我是音频菜鸟
我希望通过将数据作为字符串传递来在html页面中嵌入音频,例如 <音频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重量级的东西就像提高音量一样简单对我来说更好的选择?
答案 0 :(得分:1)
我不是在网页中嵌入WAV文件的专家(说实话,这似乎不是一个好主意 - WAV是向网页传送声音的效率最低的方式之一),但我d期望包含头部的entier WAV文件需要编码。您只是在写出示例数据。因此,对于NAudio,您需要使用WaveFileWriter写入MemoryStream或临时文件来创建可以写入页面的音量调整WAV文件。
您的代码还有两个问题。一个是你已经转到32位浮点,使得WAV文件格式更加无效(原始文件的大小加倍)。在创建WAV文件之前,您需要使用Wave32To16Stream返回16位。第二个是你将每个样本乘以50.这几乎肯定会严重扭曲信号。放大WAV文件时很容易发生剪辑,这取决于原始录制中的余量。通常dynamic range compression比仅仅增加音量更好。