0

libspotify を使用して音楽を取得し、オーディオ ライブラリで再生しています。Spotify の音楽は、生の 16 ビット、44100hz、ステレオ LPCM である必要があります。NAudio で音楽を再生しようとしてきましたが、残念ながらステレオではありません。

Spotify ドキュメントから: サンプルは整数として配信されます。sp_audioformat を参照してください。1 フレームは、チャネルと同じ数のサンプルで構成されます。つまり、インターリーブはサンプル レベルです。

次のコードは、ファイルからモノラルで曲を再生します。ファイルは、Spotify の音楽データのコピーです。

誰かが私をステレオ ソリューションに導くことができますか? できれば、.NET の任意のオーディオ ライブラリにすることができます。

using (var waveOutDevice = new WaveOut())
{

    using (var pcmStream = new FileStream(PcmFile, FileMode.Open))
    {
        WaveStream waveStream = null;
        try
        {
            const int sampleRate = 44100;
            const int channels = 2;
            var waveFormat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.Pcm, sampleRate * channels, 1, sampleRate*2*channels, channels, 16);
            waveStream = new RawSourceWaveStream(pcmStream, waveFormat);

            waveOutDevice.Init(waveStream);
            waveOutDevice.Play();

            Thread.Sleep(5000); //Listen to 5 secs of music

        }
        finally
        {
            waveOutDevice.Stop();
            if (waveStream != null) waveStream.Close();
        }
    }
}

CreateCustomFormat の署名は public static NAudio.Wave.WaveFormat CreateCustomFormat(NAudio.Wave.WaveFormatEncoding tag, int sampleRate, int channels, int averageBytesPerSecond, int blockAlign, int bitsPerSample) です。

4

2 に答える 2

1

これはステレオです:

const int bitsPerSample = 16;
int blockAlign = (channels * (bitsPerSample / 8));
int averageBytesPerSecond = sampleRate * blockAlign;
var waveFormat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.Pcm, sampleRate, channels, averageBytesPerSecond, blockAlign, bitsPerSample);
于 2012-07-17T12:01:45.073 に答える
0

CreateCustomFormatに間違った値を渡している可能性があります。次のことを試してください。

WaveFormat.CreateCustomFormat(WaveFormatEncoding.Pcm, sampleRate, channels, sampleRate*channels, 1, 8);
于 2012-07-13T15:42:07.300 に答える