[英]Convert memorystream to double-array?
我從波形文件中獲取了pcm流的原始音樂數據,並希望將其轉換為雙數組(此后再應用fft)。
我現在得到的結果包含很高或很低的雙數(1.0E-200和1.0E + 300),我不確定這些數字是否正確。
這是我現在正在使用的代碼:
WaveStream pcm = WaveFormatConversionStream.CreatePcmStream(mp3);
double[] real = new double[pcm.Length];
byte[] buffer = new byte[8];
int count = 0;
while ((read = pcm.Read(buffer, 0, buffer.Length)) > 0)
{
real[count] = BitConverter.ToDouble(buffer, 0);
count++;
}
您的PCM流幾乎可以肯定是16位。 因此,請使用ToInt16
代替BitConverter.ToDouble
。 然后除以32768.0進入+/- 1.0范圍
我意識到這個問題是古老的。 但是,我想我可以提供這種替代方法來調用BitConverter.ToDouble。
public static double[] ToDoubleArray(this byte[] bytes)
{
Debug.Assert(bytes.Length % sizeof(double) == 0, "byte array must be aligned on the size of a double.");
double[] doubles = new double[bytes.Length / sizeof(double)];
GCHandle pinnedDoubles = GCHandle.Alloc(doubles, GCHandleType.Pinned);
Marshal.Copy(bytes, 0, pinnedDoubles.AddrOfPinnedObject(), bytes.Length);
pinnedDoubles.Free();
return doubles;
}
public static double[] ToDoubleArray(this MemoryStream stream)
{
return stream.ToArray().ToDoubleArray();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.