【问题标题】:Set volume to mp3 stream using NAudio使用 NAudio 将音量设置为 mp3 流
【发布时间】:2013-10-10 06:16:44
【问题描述】:

在这段代码中, 我正在使用 NAudio 和 Lame 将 wav 文件转换为 mp3 流,并且我得到 mp3 流输出没有任何问题。但除此之外,我还想将音量设置为最终的 mp3 流。非常感谢任何帮助。

 public byte[] ConvertWavToMP3(byte[] bt, uint bitrate)
 {         

     MemoryStream ms = new MemoryStream(bt);
     ms.Seek(0, SeekOrigin.Begin);
     var ws = new WaveFileReader(ms);

     byte[] wavdata = null;
     using (MemoryStream wavstrm = new MemoryStream())
     using (WaveFileWriter wavwri = new WaveFileWriter(wavstrm, ws.WaveFormat))
     {
        ws.CopyTo(wavwri);
        wavdata = wavstrm.ToArray();
     }

     WaveLib.WaveFormat fmt = new WaveLib.WaveFormat(ws.WaveFormat.SampleRate, ws.WaveFormat.BitsPerSample, ws.WaveFormat.Channels);

     Yeti.Lame.BE_CONFIG beconf = new Yeti.Lame.BE_CONFIG(fmt, bitrate);

     using (MemoryStream mp3strm = new MemoryStream())
     using (Mp3Writer mp3wri = new Mp3Writer(mp3strm, fmt, beconf))
     {               

        mp3wri.Write(wavdata, 0, wavdata.Length);
        byte[] mp3data = mp3strm.ToArray();
        return mp3data;
     }

    }

【问题讨论】:

    标签: c#-4.0 mp3 naudio lame


    【解决方案1】:

    您可以使用AudioFileReader,它会为您提供一个可以调整的音量属性(1.0 是满量程)。它还会将音频转换为带有 IEEE 浮点样本的 ISampleProvider,但我认为 LAME 接受 IEEE 浮点,否则使用 SampleToWaveProvider16 以返回到 16 位整数样本。

    【讨论】:

    • 但@Mark AudioFileReader 只接受文件名作为参数。你可以看到我上面的代码在转换为 mp3 后我需要设置音量。是否可以在该级别设置音量?
    • AudioFileReader 使用 SampleChannel 类将 IWaveProvider 转换为 ISampleProvider 并添加 VolumeProperty。
    • 嗨 @Mark 我只需要传递流,但 AudioFileReader 将文件名作为参数,这不是我的要求。
    猜你喜欢
    • 2013-10-25
    • 2015-09-25
    • 2013-01-22
    • 2021-03-06
    • 2017-06-05
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 2013-12-08
    相关资源
    最近更新 更多