2013-03-05 33 views
0

我音频小白抬起波文件体积与n音讯

我期待通过将数据作为一个字符串,如 <音频SRC =“数据嵌入在HTML页中的音频:音频/ 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做了哪些类型的转换,以及如何让它获得音频流,以便我可以序列化它并让浏览器能够播放它? 还是其他建议:如果n音讯权重股如调高音量什么的对我来说是更好的选择,因为简单的东西吗?

回答

1

我在网页中嵌入WAV文件没有专家(和说实话这似乎不是一个好主意 - WAV是将声音导入网页的最没有效率的途径之一),但我预计包含头文件的实体WAV文件需要编码。你只是写出样本数据。因此,与n音讯你需要使用WaveFileWriter写入到MemoryStream或临时文件,创建一个可以写入到您的网页调整体积WAV文件。

有你的代码的两个额外的问题。一个是你已经达到32位浮点数,使得WAV文件格式变得更加不合法(原始文件的大小加倍)。在创建WAV文件之前,您需要使用Wave32To16Stream返回到16位。第二是你将每个样本乘以50.这几乎肯定会严重扭曲信号。放大WAV文件时很容易出现剪切,这取决于原始记录中有多少空间。通常dynamic range compression比单纯增加音量更好。

+0

这不是头,但你我指出了正确的方向。我看到waveChannel32将编码更改为ieeefloat(chrome只支持pcm)。提高音量(或将其转换回pcm)最简单的方法是什么?在这一点上,我不关心表现(尽管我把音量降低到了10)。正如我所说的, – Fragilerus 2013-03-06 00:45:05

+0

,调整音量后使用Wave32To16Stream找回16位PCM。 10仍然会剪辑。 1.0意味着根本不改变样品的值。 2.0会使它们翻一番。 16位样本的最大值是32767,所以如果将它们全部乘以10,那么3277以上的任何值都将被剪切。 – 2013-03-06 08:21:29

+0

这并没有解决我的问题,但我将其标记为接受的,因为有一些很好的意见,并没有其他人给了一个更好的解决方案。看起来我试图用一把大锤打破坚果来完成像我这样的简单任务。 NAudio是一个功能全面的库,对于我的需求来说太复杂了。我会找到一个不同的解决方案。 – Fragilerus 2013-03-10 02:10:41