別のクラスによってイベントで返された PCM オーディオ サンプルを再生しようとしています。それらをファイルに保存してからストリームとして再生すると、すべて問題ありません。しかし、リアルタイム再生では何も起こりません。PlaybackState は Stopped に設定されます。コードは次のとおりです。
WaveFormat wf = new WaveFormat(8000, 1);
MemoryStream ms;
WaveStream blockAlignedStream;
WaveOut waveOut;
short[] PCMSamples = new short[320];
void StartPlayback()
{
ms = new MemoryStream();
blockAlignedStream = new BlockAlignReductionStream(WaveFormatConversionStream.CreatePcmStream(new NAudio.Wave.RawSourceWaveStream(ms[1], wf)));
waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback());
waveOut.Init(blockAlignedStream);
waveOut.Play();
}
public void PCMStreamEventHandler(byte[] data)
{
this.Invoke((MethodInvoker)delegate
{
var pos = ms.Position;
codec.Convert(data, PCMSamples);
ms.Position = ms.Length;
byte[] buffer = new byte[PCMSamples.Length * 2];
Buffer.BlockCopy(PCMSamples, 0, buffer, 0, buffer.Length);
ms.Write(buffer, 0, buffer.Length);
ms.Position = pos;
});
}
リアルタイム PCM 再生に関するヘルプをいただければ幸いです。ありがとう。