2

まず第一に、私はオーディオプログラミングが初めてなので、ご容赦ください。

NAudio または BASS.Net またはその他の .net オーディオ ライブラリで Spotify の音楽を再生しようとしています。

私が知る限り、libspotify は音楽を生の PCM データとして配信します。Spotify ストリーム (libspotify) のサンプルレートは?

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

曲を再生しようとすると、Spotify が 8192 バイトのバッファでコールバックを行います

チャネル = 2

サンプルレート = 44100

フレーム数 = 2048

この情報を NAudio 用語に変換するには、少し助けが必要です。

また、Spotify to Bass.Net サンプル (BASSPlayer.cs) も試しました。しかし、スピーカーからはまだ 1 音も聞こえていません。NAudio と Bass.NET で mp3 曲を再生しようとしましたが、これは正常に動作するため、スピーカーの音量は問題ありません。 https://github.com/Alxandr/SpotiFire/blob/master/SpotiFire.Server/BASSPlayer.cs

4

1 に答える 1

2

NAudio にはブレークスルーがあります。試行錯誤の末にたどり着いたのがこれです。これが sampleRate/channels からパラメーターを計算する正しい方法かどうかはわかりません...

しかし、歌は再生されています:-)

IWavePlayer waveOutDevice = new WaveOut();

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

    waveOutDevice.Init(waveStream);
    waveOutDevice.Play();
    Thread.Sleep(songDuration);
    waveOutDevice.Stop();
    waveStream.Close();
    waveOutDevice.Dispose();
}
于 2012-07-12T13:53:41.200 に答える