How to stream audio from microphone to speaker?
我希望将音频直接从麦克风流式传输到默认音频输出介质,无论是扬声器还是 3.5 毫米插孔。
我发现播放音频的机制似乎取决于提供静态字节数以在 SoundEffect 中播放,如下所示:
1 2 3 4 | SoundEffect sound = new SoundEffect(stream.ToArray(), microphone.SampleRate, AudioChannels.Mono); soundInstance = sound.CreateInstance(); soundIsPlaying = true; soundInstance.Play(); |
我可以持续播放 500 毫秒或更短的 SoundEffects 来实现我的目标,但我想知道是否有更复杂的方法可以让麦克风持续写入 MemoryStream,而音频播放控件可以持续读取该内存流。 感谢您的帮助! 我通过扩展 MediaStreamSource 类来解决这个问题,该类使用麦克风向 MediaElement 播放器提供样本。 如果对这段代码有任何需求,我会很乐意将其发布到某个地方。现在,如果您尝试做同样的事情,这里有一个代码片段可以帮助您: 您基本上只是在返回麦克风缓冲区时报告样本已准备就绪。这样可以流畅播放。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// (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));
}
妮可
在尝试您的 MegaPhone 项目时,我遇到了以下错误"未将对象引用设置为对象的实例。"。
你能看看吗?谢谢
在 MS.Internal.XcpImports.CheckHResult(UInt32 小时)
在 MS.Internal.XcpImports.MediaStreamSource_OnGetSampleCompleted(MediaElement mediaElement,Int32 streamIndex,StreamInteropWrapper streamWrapper,InternalStreamWrapper internalStream,Int64 偏移量,Int64 计数,Int64 timeInHundredNanoseconds,Int64 durationInHundredNanoseconds,Int32 attributeCount,Int32 [] attributeLengths,StringBuilder 属性)
在 System.Windows.Controls.MediaElement.MediaSourceReportGetSampleCompleted (MediaStreamSample mediaStreamSample)
在 System.Windows.Media.MediaStreamSource.ReportGetSampleCompleted(MediaStreamSample mediaStreamSample)
在 Megaphone.MicrophoneSource.microphone_BufferReady(对象发送者,EventArgs e)
在 Microsoft.Xna.Framework.Audio.Microphone.OnBufferReady(EventArgs args)
在 Microsoft.Xna.Framework.Audio.MicrophoneCollection.OnBufferReady(UInt32 句柄)
在 Microsoft.Xna.Framework.FrameworkDispatcher.Update()
在 Megaphone.MainPage.dt_Tick(Object sender, EventArgs e)