Exemplo n.º 1
0
        public static byte[] EncodeCwav(byte[] wavData)
        {
            if (!ThirdPartyTools.CtrWaveConveter.Present)
                return EmptyData;

            using (var sourceStream = new MemoryStream(wavData))
                //
            using (var tempBcwav = new TempFile("bcwav"))
            using (var tempWav = new TempFile("wav"))
                //
            {
                using (var tempWavStream = File.Open(tempWav.FilePath, FileMode.Create))
                {
                    if (Settings.Default.EXP_ResampleWav)
                    {
                        var nwf = new WaveFormat(22050, 8, 1); //22Khz Mono PCM8
                        var wr = new WaveFileReader(sourceStream);
                        var conv = new WaveFormatConversionStream(nwf, wr);
                        conv.CopyTo(tempWavStream);
                    }
                    else
                    {
                        sourceStream.CopyTo(tempWavStream);
                    }
                    tempWavStream.Flush(true);
                }

                try
                {
                    var psi = new ProcessStartInfo
                    {
                        UseShellExecute = false,
                        CreateNoWindow = true,
                        WindowStyle = ProcessWindowStyle.Hidden,
                        FileName = ThirdPartyTools.CtrWaveConveter.Path,
                        Arguments = $"-o \"{tempBcwav.FilePath}\" \"{tempWav.FilePath}\""
                    };

                    var process = Process.Start(psi);
                    process.WaitForExit();

                    using (var tempBcwavStream
                        = File.Open(tempBcwav.FilePath, FileMode.Open))
                    {
                        byte[] converted = new byte[tempBcwavStream.Length];
                        tempBcwavStream.Read(converted, 0, converted.Length);
                        return converted;
                    }
                }
                catch
                {
                    return EmptyData;
                }
            }
        }