この問題を解決するために、MediaStreamSource クラスを、マイクを使用してサンプルを MediaElement Player に提供するクラスで拡張しました。
このコード ブロックに対する需要があれば、喜んでどこかに投稿します。今のところ、同じことをしようとしている場合に役立つコード スニペットを次に示します。
// Provides audio samples from AudioSampleProvider property.
// (MediaStreamType parameter will always equal Audio.)
protected override void GetSampleAsync(MediaStreamType mediaStreamType)
{
// start the microphone capture if it's not started yet
if (microphone.State == MicrophoneState.Stopped)
{
microphone.Start();
}
}
// gets called back when the microphone's buffer is ready
private void microphone_BufferReady(object sender, EventArgs e)
{
// Retrieve audio data
microphone.GetData(buffer);
// Reset MemoryStream object
memoryStream.Seek(0, SeekOrigin.Begin);
// Write the newly acquired data into the memory stream
memoryStream.Write(buffer, 0, buffer.Length);
// Send out the sample
ReportGetSampleCompleted(new MediaStreamSample(mediaStreamDescription,
memoryStream,
0,
buffer.Length,
0,
mediaSampleAttributes));
}
基本的には、マイク バッファーが返されるたびに、サンプルの準備ができていることを報告するだけです。これにより、スムーズな再生が実現します。