将音频样本从字节转换为复数?

时间:2011-02-16 03:40:35

标签: c# silverlight silverlight-4.0

向大家致意,

我目前正在使用C#后端为Silverlight中的乐器/语音开发一个半音调音器。我处于起步阶段,在抓取音频数据方面遇到了问题。我正在使用AudioSink类在实时捕获开始时将音频写入内存流。我遇到的问题是将流中的这些字节转换为复数,以便将其输入FFT算法。我已尝试过本文Problem to convert byte array to double中讨论的各种方法,但不确定应该使用哪种方法。

有关从字节数组到复数数组的任何建议吗?准确性和速度是必须的(比速度更准确),因为我的项目的后期阶段将实时执行此过程,以便在声音进入时显示正在播放的音高。

干杯谢谢!

约什

1 个答案:

答案 0 :(得分:0)

CodeProject上的

This project可能对您有用,因为它在C#中,并通过Cooley-Turkey FFT算法处理音频处理。

如果你不想筛选它,那么字节到复数位:

byte[] data = yourByteArray;
double[] x = new double[data.Length];
for (int i = 0; i < x.Length; i++)
{
    x[i] = data[i] / 32768.0;
}
ComplexNumber[] data = new ComplexNumber[length];
for (int i = 0; i < x.Length; i++)
{
    data[j] = new ComplexNumber(x[i]);
}

我对声音处理知之甚少,所以不知道除以32768是否是这个解决方案所独有的,或者一般是真的。

此外,虽然这将是100%准确,但我不知道它的表现如何。如果这成为问题,您可能需要重构。