2013-10-31 48 views
0

我想导出一个双[]数组到一个wav文件。我在操作标题(RIFF,fmt等)时遇到了一些麻烦。任何想法我应该如何处理这个?也许使用BitConverter将double []数组转换为byte []数组,然后使用NAudio的waveFileWriter?任何示例代码非常感谢!双阵列到wav

回答

1

只需使用WaveFileWriter的WriteSample方法逐个写入每个样本,或者使用WriteSamples即可在一次打击中完成。既然你有一个双精度数组,你可以使用一点LINQ来首先转换成浮点数组。

float[] floatArray = doubleArray.Select(s => (float)s).ToArray(); 
writer.WriteSamples(floatArray, 0, floatArray.Length); 

这将每个样本写入到WaveFileWriter,转换到正确的位深度(例如,16位或32位IEEE浮点),它依赖于当你打开WaveFileWriter

+0

谢谢! NAudio看起来非常棒!奖励!我很快就会进入;) – Cobe

1

您将不得不根据标准编写WAV文件的所有必要位。单声道和立体声以及采样率问题也会有问题。强烈建议你看看已经存在的一些处理这个问题的源代码(我没有在快速搜索中找到任何C#版本,虽然有几个C/C++版本)。试图编写仅基于标题规范的代码将被击中或错过

+0

没”所选WAVEFORMAT我自己也可以找到任何现有的代码。我知道唯一的“快捷方式”是NAudio,但我不确定如何实现这一点。发现这个http://mark-dot-net.blogspot.gr/2011/04/how-to-use-wavefilewriter.html,但它假定输入数组由字节组成 – Cobe

+0

原始音频是字节(实际上是字16通常是位字)。你的浮点数据是什么样的? –

+0

我看着你引用的页面,它有一个将浮点转换为字节流的例子。 –