我希望将音频直接从麦克风传输到默认音频输出媒体,无论是扬声器还是3.5毫米插孔 .
我发现用于播放音频的机制似乎取决于在SoundEffect中提供静态的字节数,如下所示:
SoundEffect sound = new SoundEffect(stream.ToArray(), microphone.SampleRate, AudioChannels.Mono);
soundInstance = sound.CreateInstance();
soundIsPlaying = true;
soundInstance.Play();
我可以不断播放500毫秒或更短时间的SoundEffects以实现我的目标,但我想知道是否有更复杂的方式让麦克风不断写入MemoryStream,音频播放控件可以连续读取 .
感谢您的任何帮助!
2 回答
我通过使用使用麦克风向MediaElement Player提供样本的类扩展MediaStreamSource类来解决此问题 .
如果对这段代码有任何需求,我会很乐意将它发布到某个地方 . 现在,如果你正在尝试做同样的事情,这里有一个代码片段来帮助你:
您只需在返回麦克风缓冲区时报告示例已准备就绪 . 这样可以平滑播放 .
尼科
在尝试MegaPhone项目时,我遇到以下错误“对象引用未设置为对象的实例 . ” . 你看看吗?谢谢
在MS.Internal.XcpImports.CheckHResult(UInt32 hr)at MS.Internal.XcpImports.MediaStreamSource_OnGetSampleCompleted(MediaElement mediaElement,Int32 streamIndex,StreamInteropWrapper streamWrapper,InternalStreamWrapper internalStream,Int64 offset,Int64 count,Int64 timeInHundredNanoseconds,Int64 durationInHundredNanoseconds,Int32 attributeCount,Int32 [在System.Windows.Controls.MediaElement.MediaSourceReportGetSampleCompleted(MediaStreamSample mediaStreamSample)的System.Windows.Media.MediaStreamSource.ReportGetSampleCompleted(MediaStreamSample mediaStreamSample)处于Microsoft的Megaphone.MicrophoneSource.microphone_BufferReady(Object sender,EventArgs e)处的attributeLengths,StringBuilder属性 . 位于Megaphone.MainPage.dt_Tick(对象发送者)的Microsoft.Xna.Framework.FrameworkDispatcher.Update()的Microsoft.Xna.Framework.Audio.MicrophoneCollection.OnBufferReady(UInt32句柄)中的Xna.Framework.Audio.Microphone.OnBufferReady(EventArgs args) ,EventArgs e)