我有一个RAW音频文件,它由几个连接的较小的WAV文件组成。我可以在Sound Forge中打开并播放该文件为48,000,8位PCM,带符号单声道。删除几个WAV文件的头文件,然后将其余数据连接成一个RAW文件
我想在C#中做的事情是用程序在文件中用相同或更小长度的新数据覆盖每个单独的WAV,我认为我相当接近能够做到这一点。我可以在RAW文件上做一个File.ReadAllBytes,遍历字节数组,并确定每个WAV的开始和结束位置。然后,我在PC上选取新的WAV文件,删除标题,并将其余数据写入我的RAW文件。如果新的WAV比目标小,我用0填充差值。
但是,当我在上面提到的设置中打开Sound Forge中的新文件时,我的所有WAV看起来都比实际的“圣诞树”形状更像固体块,并且它们都会大声和失真。第一次经历这个之后,我发现所有新的源WAV都是41,000,16位PCM,有符号立体声格式。我以这种格式打开了我新创建的RAW文件,它看起来很好。
我想我必须将我所有的新WAV转换为48,000,8位PCM,签名,单声道,第一,然后运行应用程序将它们复制到RAW文件中。我使用NAudio编写了一些代码,用于在将数据复制到RAW文件之前对文件进行转换,而且我仍然遇到同样的问题。我也试着先在Sound Forge中手动转换每个新的WAV,但仍然有同样的问题。
我在这里错过了什么?谢谢。
你可能意味着44,100而不是41,000。 – 2012-07-29 22:53:10
感谢您的建议。我明白了这一点。这是有符号/无符号音频文件的区别。我做了一些Google搜索,并且读取默认情况下8位PCM WAV文件未签名。为了解决这个问题,使用NAudio将文件转换为8位后,我循环遍历字节并从每个字节中减去128。我随心所欲地做了这件事。我相信有更好的方法来做到这一点。 – user1561302 2012-07-30 05:45:26