private static void Conversion() { string filename = "audio_bin2"; byte[] myBytes =File.ReadAllBytes(filename); // entre 0 et 255 short short[] myShort = new short[myBytes.Length]; // entre 0 et | 257 short[] myShortDouble = new short[myBytes.Length*2]; byte[] myBytes16MHz = new byte[myShortDouble.Length * 2]; int short_intervalle = short.MaxValue - short.MinValue; int multiplieur = short_intervalle/Byte.MaxValue; for (int i = 0; i < myBytes.Length; i++) { short sh = myBytes[i]; int tampon = short.MinValue + (sh * multiplieur); myShort[i] = (short)(tampon); } for (int i = 0; i < myShort.Length; i++) { myShortDouble[2*i] = myShort[i]; if (i < myShort.Length-1) { short half1 = (short)(myShort[i] / 2); short half2 = (short)(myShort[i + 1] / 2); myShortDouble[2 * i + 1] = (short)(half1 + half2); } if (i == myShort.Length - 1) { myShortDouble[2 * i+1] = myShort[i]; } } for (int i = 0; i < myShortDouble.Length; i++) { myBytes16MHz[2*i] = (byte)myShortDouble[i]; myBytes16MHz[2*i+1] = (byte)(myShortDouble[i] >> 8); } /* DateTime d = DateTime.Now; string datePatt = @"Mdyyyyhhmmsstt"; string filename2 = "audio_raw_" + d.ToString(datePatt); FileStream fileStream2 = new FileStream(filename2, FileMode.Create); fileStream2.Write((byte[])myBytes16MHz, 0, myBytes16MHz.Length); fileStream2.Close();*///MemoryStream get buffer DateTime d = DateTime.Now; string datePatt = @"Mdyyyyhhmmsstt"; Console.WriteLine("Conversion finie !!"); string outputFile = "audio_flac_" + d.ToString(datePatt) + ".flac"; FlakeWriter flac = new FlakeWriter(null, 16, 1, 16000, File.Create(outputFile)); //FlacWriter flac = new FlacWriter(File.Create(outputFile), 16, 1, 16000); //flac.Write(myBytes16MHz, 0, myBytes16MHz.Length); //flac.Write(); flac.Close(); }
private static Tuple<int, string> WavToFlacHelper(WAVReader audioSource, string targetFlacPath) { int sampleRate; AudioBuffer buffer = new AudioBuffer(audioSource, 0x10000); FlakeWriterSettings settings = new FlakeWriterSettings(); settings.PCM = audioSource.PCM; FlakeWriter audioDestination = new FlakeWriter(targetFlacPath, settings); while (audioSource.Read(buffer, -1) != 0) { audioDestination.Write(buffer); } sampleRate = settings.PCM.SampleRate; audioDestination.Close(); audioSource.Close(); return new Tuple<int, string>(sampleRate, targetFlacPath); }
public async Task TestWriting() { var wavStream = await (await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///test.wav"))) .OpenStreamForReadAsync(); var expectedBytes = ReadFully(await (await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///flake.flac"))) .OpenStreamForReadAsync()); var buff = WAVReader.ReadAllSamples(wavStream); FlakeWriter target; var outputStream = new MemoryStream(); target = new FlakeWriter(outputStream, new FlakeWriterSettings { PCM = buff.PCM, EncoderMode = "7" }); target.Settings.Padding = 1; target.DoSeekTable = false; target.Write(buff); target.Close(); outputStream.Seek(0, SeekOrigin.Begin); var resultContent = outputStream.ToArray(); var outStream = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync("out.flac", CreationCollisionOption.ReplaceExisting); outStream.Write(resultContent, 0, resultContent.Length); outStream.Dispose(); Debug.WriteLine(ApplicationData.Current.LocalFolder.Path); CollectionAssert.AreEqual(expectedBytes, outputStream.ToArray(), "result and expected doesn't match."); }
public void TestWriting() { AudioBuffer buff = WAVReader.ReadAllSamples("test.wav", null); FlakeWriter target; target = new FlakeWriter("flakewriter0.flac", null, new FlakeWriterSettings { PCM = buff.PCM, EncoderMode = "7" }); target.Settings.Padding = 1; target.DoSeekTable = false; //target.Vendor = "CUETools"; //target.CreationTime = DateTime.Parse("15 Aug 1976"); target.FinalSampleCount = buff.Length; target.Write(buff); target.Close(); //CollectionAssert.AreEqual(File.ReadAllBytes("flake.flac"), File.ReadAllBytes("flakewriter0.flac"), "flakewriter0.flac doesn't match."); target = new FlakeWriter("flakewriter1.flac", null, new FlakeWriterSettings { PCM = buff.PCM, EncoderMode = "7" }); target.Settings.Padding = 1; target.DoSeekTable = false; //target.Vendor = "CUETools"; //target.CreationTime = DateTime.Parse("15 Aug 1976"); target.Write(buff); target.Close(); CollectionAssert.AreEqual(File.ReadAllBytes("flake.flac"), File.ReadAllBytes("flakewriter1.flac"), "flakewriter1.flac doesn't match."); }
private void ConvertToFlac(Stream sourceStream, Stream destinationStream) { var audioSource = new WAVReader(null, sourceStream); try { if (audioSource.PCM.SampleRate != 16000) { throw new InvalidOperationException("Incorrect frequency - WAV file must be at 16 KHz."); } var buff = new AudioBuffer(audioSource, 0x10000); var flakeWriter = new FlakeWriter(null, destinationStream, audioSource.PCM); // flakeWriter.CompressionLevel = 8; while (audioSource.Read(buff, -1) != 0) { flakeWriter.Write(buff); } flakeWriter.Close(); } finally { audioSource.Close(); } }
/// <summary> /// Convert stream of wav to flac format and send it to google speech recognition service. /// </summary> /// <param name="stream">wav stream</param> /// <returns>recognized result</returns> /// // Step 1- Converts wav stream to flac public static string WavStreamToGoogle(Stream stream) { FlakeWriter audioDest = null; IAudioSource audioSource = null; string answer; try { var outStream = new MemoryStream(); stream.Position = 0; audioSource = new WAVReader("", stream); var buff = new AudioBuffer(audioSource, 0x10000); audioDest = new FlakeWriter("", outStream, audioSource.PCM); var sampleRate = audioSource.PCM.SampleRate; while (audioSource.Read(buff, -1) != 0) { audioDest.Write(buff); } answer = GoogleRequest(outStream, sampleRate); } finally { if (audioDest != null) audioDest.Close(); if (audioSource != null) audioSource.Close(); } return answer; }
/// <summary> /// Convert .wav file to .flac file with the same name /// </summary> /// <param name="WavName">path to .wav file</param> /// <returns>Sample Rate of converted .flac</returns> public static int Wav2Flac(string WavName) { int sampleRate; var flacName = Path.ChangeExtension(WavName, "flac"); FlakeWriter audioDest = null; IAudioSource audioSource = null; try { audioSource = new WAVReader(WavName, null); AudioBuffer buff = new AudioBuffer(audioSource, 0x10000); audioDest = new FlakeWriter(flacName, audioSource.PCM); sampleRate = audioSource.PCM.SampleRate; while (audioSource.Read(buff, -1) != 0) { audioDest.Write(buff); } } finally { if (audioDest != null) audioDest.Close(); if (audioSource != null) audioSource.Close(); } return sampleRate; }