Пример #1
0
        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));
        }
Пример #2
0
        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);
        }
Пример #3
0
        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));
            }
        }
Пример #4
0
        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()));
                }
            }
        }
Пример #5
0
        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();
        }
Пример #6
0
        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);
        }
Пример #7
0
        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();
                }
            }
        }