public void Stop() { _cts?.Cancel(); _recorder.Stop(); byte[] audioBytes = null; if (_options.StreamFormat == AudioRecordOptions.Format.Wave) { audioBytes = File.ReadAllBytes(_audioFilePath); } else if (_options.StreamFormat == AudioRecordOptions.Format.Flac) { // encode audio into flac using (var fr = File.OpenRead(_audioFilePath)) { using (var ms = new MemoryStream()) { using (var what = new WaveOverFlacStream(ms, WaveOverFlacStreamMode.Encode, true)) { fr.CopyTo(what); } ms.Flush(); ms.Seek(0, SeekOrigin.Begin); audioBytes = ms.ToArray(); } } } File.Delete(_audioFilePath); _tcs.TrySetResult(new AudioRecordResult(audioBytes)); }
public string GetLastRecordingFilename() { string lastFile = recognizer.LastRecordingFilename; var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); //var library = Path.Combine(documents, "..", "Library"); //var targetFolder = Path.Combine(library, subFolder); var targetFolder = Path.Combine(documents, "testing"); if (!System.IO.Directory.Exists(targetFolder)) { System.IO.Directory.CreateDirectory(targetFolder); } string fileName = DateTime.Now.ToString("yyyyMMdd-hhmmss.flac"); var outputFile = Path.Combine(targetFolder, fileName); var inputStream = File.OpenRead(lastFile); var outputStream = new WaveOverFlacStream( File.Create(outputFile), WaveOverFlacStreamMode.Encode); CopyStreams(inputStream, outputStream); outputStream.Close(); inputStream.Close(); return(outputFile); }
private static Stream CreateOutputStream(string path) { switch (conversion) { case ConversionType.Wave: path = Path.ChangeExtension(path, ".wav"); return(File.Create(path)); case ConversionType.Ogg: path = Path.ChangeExtension(path, ".ogg"); WaveOverFlacStream flacStream = new WaveOverFlacStream(File.Create(path), WaveOverFlacStreamMode.Encode); try { return(new FlacOverOggStream(flacStream, FlacOverOggStreamMode.Encode)); } catch { flacStream.Dispose(); throw; } case ConversionType.Flac: default: path = Path.ChangeExtension(path, ".flac"); return(new WaveOverFlacStream(File.Create(path), WaveOverFlacStreamMode.Encode, true)); } }
public void Stop() { if (_isRecording && _recorder == null) { _tcs.TrySetResult(new AudioRecordResult($"Not recording")); } _timeoutToken?.Cancel(); _isRecording = false; if (_recorder.State == State.Initialized) { _recorder.Stop(); } _recorder.Release(); // Android audio is raw stream content, so add WAV header var wavstream = new MemoryStream(); WriteWaveFileHeader(wavstream, _ms.Length, _options.SampleRate, 1); _ms.Seek(0, SeekOrigin.Begin); _ms.CopyTo(wavstream); _ms.Close(); _ms.Dispose(); _ms = null; if (_options.StreamFormat == AudioRecordOptions.Format.Wave) { _tcs.TrySetResult(new AudioRecordResult(wavstream.ToArray())); } else if (_options.StreamFormat == AudioRecordOptions.Format.Flac) { // encode audio into flac using (var ms = new MemoryStream()) { using (var what = new WaveOverFlacStream(ms, WaveOverFlacStreamMode.Encode, true)) { wavstream.Seek(0, SeekOrigin.Begin); wavstream.CopyTo(what); } ms.Flush(); ms.Seek(0, SeekOrigin.Begin); _tcs.TrySetResult(new AudioRecordResult(ms.ToArray())); } } }
static void Main(string[] args) { string filePath = DemoFilePath; if (args.Length > 0) { filePath = args[0]; } WaveOverFlacStream flacStream = new WaveOverFlacStream(File.OpenRead(filePath), WaveOverFlacStreamMode.Decode); SoundPlayer player = new SoundPlayer(flacStream); player.Play(); Console.WriteLine("Demo sound is playing... ({0})", filePath); Console.WriteLine("Press ENTER to exit application"); Console.ReadLine(); }
public override FrameBufferData GetFrameBufferData(byte[] data, long timeCode, long duration, bool keyFrame, bool discardable, bool invisible) { //flacInfo.MaxFrameSize, flacInfo.MinFrameSize, data.Length, flacInfo.MaxBlockSize, flacInfo.MinBlockSize); byte[] flacData = data; using (System.IO.MemoryStream src = new System.IO.MemoryStream(data, 0, data.Length)) { src.Position = 0; WaveOverFlacStream flacStream = new WaveOverFlacStream(flacInfo, src); using (var flacDataStream = new System.IO.MemoryStream()) { //byte[] b = new byte[data.Length]; byte[] b = new byte[16384]; while (true) { int i = flacStream.Read(b, 0, b.Length); if (i > 0) { flacDataStream.Write(b, 0, i); } else { flacDataStream.Position = 0; break; } } flacData = flacDataStream.ToArray(); } } FrameBufferData frame = new FrameBufferData(flacData, timeCode, duration, keyFrame, discardable, invisible); //System.Diagnostics.Debug.WriteLine(frame.TimeCode); return(frame); }
static void Main(string[] args) { if (args.Length < 3) { PrintUsage(); return; } string mode = args[0].ToLowerInvariant(); string inputFile = args[1]; string outputFile = args[2]; Stream inputStream = null; Stream outputStream = null; try { switch (mode) { case "-wave2flac": inputStream = File.OpenRead(inputFile); outputStream = new WaveOverFlacStream( File.Create(outputFile), WaveOverFlacStreamMode.Encode); break; case "-wave2ogg": inputStream = File.OpenRead(inputFile); outputStream = new FlacOverOggStream( new WaveOverFlacStream(File.Create(outputFile), WaveOverFlacStreamMode.Encode), FlacOverOggStreamMode.Encode); break; case "-flac2wave": inputStream = new WaveOverFlacStream( File.OpenRead(inputFile), WaveOverFlacStreamMode.Decode); outputStream = File.Create(outputFile); break; case "-flac2wave16": inputStream = new Wave16OverFlacStream(File.OpenRead(inputFile)); outputStream = File.Create(outputFile); break; case "-ogg2wave": inputStream = new FlacOverOggStream( new WaveOverFlacStream(File.OpenRead(inputFile), WaveOverFlacStreamMode.Decode), FlacOverOggStreamMode.Decode); outputStream = File.Create(outputFile); break; default: throw new ApplicationException("Unknown transcode option: " + mode); } Console.WriteLine("Copying data from '{0}' to '{1}'.", inputFile, outputFile); CopyStreams(inputStream, outputStream); Console.WriteLine(); Console.WriteLine("Done."); } catch (Exception ex) { Console.Error.WriteLine(ex); } finally { if (inputStream != null) { inputStream.Close(); } if (outputStream != null) { outputStream.Close(); } } }