加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – wma使用Naudio压缩音频文件引发错误

发布时间:2020-12-15 22:31:45 所属栏目:百科 来源:网络整理
导读:这里我有一些编码wma音频文件的代码..它工作得很好.但是把文件上传到服务器,发生了一些错误.它显示输出文件应该满足 像费率这样的要求应该是16000 public void ConvertToWMA(string tempFilePath,string tempFileName,string audioType) { WaveFormat form =
这里我有一些编码wma音频文件的代码..它工作得很好.但是把文件上传到服务器,发生了一些错误.它显示输出文件应该满足
像费率这样的要求应该是16000

public void ConvertToWMA(string tempFilePath,string tempFileName,string audioType)
        {
          WaveFormat form = new WaveFormat(16000,16,1);
          using (WmaStream str = new WmaStream(tempFilePath + tempFileName,form))
            {
                string profileData;
                using (StreamReader reader = new StreamReader(File.OpenRead("audio.prx")))
                {
                    profileData = reader.ReadToEnd();
                }

                IWMProfileManager profileManager;
                IWMProfile wmProfile = null;
                profileManager = WM.CreateProfileManager();
                profileManager.LoadProfileByData(profileData,out wmProfile);

                WMProfile wmp = new WMProfile(str.Profile);

                NAudio.WindowsMediaFormat.WmaWriter ww = new NAudio.WindowsMediaFormat.WmaWriter(new FileStream(@"D:wmaconvtest.wma",FileMode.Create),form,wmProfile);
                byte[] buff = null;

                int read = 0;

                buff = new byte[form.AverageBytesPerSecond];
                read = str.Read(buff,buff.Length);
                while ((read > 0))
                {
                    ww.Write(buff,read);
                    read = str.Read(buff,buff.Length);
                }

            }
        }

如何摆脱这个问题.有人请帮帮我..

解决方法

{
            var temp = tempFilePath + tempFileName;
            using (var reader = new MediaFoundationReader(temp))
            {
                // Create a wave format for 16-bit pcm at 8000 samples per second.
                int channels = reader.WaveFormat.Channels;
                int rate = 8000;
                int rawsize = 2;
                int blockalign = rawsize * channels; // this is the size of one sample.
                int bytespersecond = rate * blockalign;
                //MediaFoundationEncoder.enc(reader,"test.mp3");
                var midformat =
                    WaveFormat.CreateCustomFormat(WaveFormatEncoding.Pcm,rate,channels,bytespersecond,blockalign,rawsize * 8);

                // And a conversion stream to turn input into 16-bit PCM.
                //var midstream = new MediaFoundationResampler(reader,midformat);
              //  var outstream = new PcmToALawConversionStream(midstream);
             //   var outstream = new PcmToALawConversionStream(midstream);
                //var converted16Bit = new SampleToWaveProvider16(mixer);
//
                // now for MP3,we need to upsample to 44.1kHz. Use MediaFoundationResampler 
                using (var resampled = new MediaFoundationResampler(
                            reader,midformat))
                {
                    var outstream = new PcmToALawConversionStream(resampled);
                  //  var desiredBitRate = 16000; // ask for lowest available bitrate 

                    //MediaFoundationEncoder.EncodeToWma(outstream,//                "mixedtets10.wma",desiredBitRate);
                    WaveFileWriter.CreateWaveFile("mixedtets10.wma",outstream);
                    //NAudio.WindowsMediaFormat.WmaWriter ww = new NAudio.WindowsMediaFormat.WmaWriter(new FileStream(@"D:wmaconvtest1.wma",midformat,outstream);
                }


              //  NAudio.WindowsMediaFormat.WmaWriter ww = new NAudio.WindowsMediaFormat.WmaWriter(new FileStream(@"D:wmaconvtest1.wma",outstream);

                //NAudio.WindowsMediaFormat.WmaWriter Ww=
                // The output stream is our custom stream.
                //var outstream = new PcmToALawConversionStream(midstream);




            }


        }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读