8

私はかなり長い間これに苦労してきましたが、有効な解決策を見つけることができませんでした。

wav ファイル (16 ビット PCM: 44kHz 2 チャンネル) があり、サンプルを 2 つのチャンネルのそれぞれに対して 2 つの配列に抽出したいと考えています。私の知る限り、これに対する直接的な方法は NAudio ライブラリには存在しないため、次のコードを実行していくつかのインターレース サンプルを読み取ろうとしましたが、バッファ配列は空のままです (0 の集まりのみ)。

using (WaveFileReader pcm = new WaveFileReader(@"file.wav"))
{
    byte[] buffer = new byte[10000];
    using (WaveStream aligned = new BlockAlignReductionStream(pcm))
    {
        aligned.Read(buffer, 0, 10000);
    }
}

これに関するヘルプは大歓迎です。

4

1 に答える 1

4

BlockAlignReductionStream不要です。バッファから読み取り、16ビットの左右のサンプルバッファに分割する簡単な方法の1つを次に示します。

using (WaveFileReader pcm = new WaveFileReader(@"file.wav"))
{
    int samplesDesired = 5000;
    byte[] buffer = new byte[samplesDesired * 4];
    short[] left = new short[samplesDesired];
    short[] right = new short[samplesDesired];
    int bytesRead = pcm.Read(buffer, 0, 10000);
    int index = 0;
    for(int sample = 0; sample < bytesRead/4; sample++)
    { 
        left[sample] = BitConverter.ToInt16(buffer, index);
        index += 2;
        right[sample] = BitConverter.ToInt16(buffer, index);
        index += 2;
    }
}
于 2012-05-03T13:21:44.253 に答える