簡體   English   中英

將memorystream轉換為雙數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM