0

我是音频菜鸟

我希望通过将数据作为字符串传递来在 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 成为重量级的东西,比如提高音量这样简单的事情,对我来说什么是更好的选择?

4

1 回答 1

1

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

您的代码还有两个额外的问题。一是你已经使用了 32 位浮点,使得 WAV 文件格式更加低效(原始文件的大小增加了一倍)。在创建 WAV 文件之前,您需要使用 Wave32To16Stream 返回到 16 位。第二个是您将每个样本乘以 50。这几乎肯定会严重扭曲信号。放大 WAV 文件时很容易发生削波,这取决于原始录音中有多少动态余量。通常动态范围压缩是比简单地增加音量更好的选择。

于 2013-03-05T08:33:43.447 回答