繁体   English   中英

使用NAudio提高Wave文件的音量

[英]Raise wave file volume with NAudio

我是音频菜鸟

我希望通过将数据作为字符串传递来将音频嵌入html页面中,例如<Audio src =“ data:audio / wav; base64,AA .....” />,但是我需要提高音量。 我尝试使用NAudio,但似乎进行了一些转换,因此不再播放。 这是我用来提高音量的代码:

public string ConvertToString(Stream audioStream)
{
audioStream.Seek(0,SeekOrigin.Begin);
byte[] bytes = new byte[audioStream.Length];
audioStream.Read(bytes,0,(int)audioStream.Length);
audioStream.Seek(0,SeekOrigin.Begin);
return Convert.ToBase64String(bytes);
}

var fReader = new WaveFileReader(strm);
var chan32 = new WaveChannel32(fReader,50.0F,0F);
var ouputString = "data:audio/wav;base64," + ConvertToString(chan32);

但是,当我将outputString放入音频标签时,它无法播放。 NAudio会执行哪种类型的转换,如何将其序列化并让浏览器可以播放音频流,从而使其获得音频流? 或提出另一个建议:如果将NAudio用作重量级之类的轻巧产品,那么对我来说更好的选择是什么?

我不是将WAV文件嵌入网页中的专家(老实说,这似乎不是一个好主意-WAV是向网页传递声音的最无效的方法之一),但是我希望整个WAV文件(包括标头)需要进行编码。 您只是在写样本数据。 因此,使用NAudio时,您需要使用WaveFileWriter写入MemoryStream或临时文件来创建可以将其写入页面的音量调整的WAV文件。

您的代码还有两个其他问题。 一种是您已达到32位浮点数,从而使WAV文件格式的效率更低(将原始文件的大小加倍)。 在创建WAV文件之前,您需要使用Wave32To16Stream返回16位。 第二个是您将每个样本乘以50。几乎可以肯定,这会使信号失真。 放大WAV文件时,剪切很容易发生,这取决于原始记录中有多少净空。 动态范围压缩通常比单纯增加音量更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM