转换此代码以获取麦克风输入?包括类源代码

时间:2011-03-18 19:31:27

标签: .net audio input microphone

我正在使用此处的WindowsMedia库:http://www.ernzo.com/soundstudio.aspx

示例代码能够播放音频文件,但我正试图让流来自麦克风。

我相信我已经将所有代码用于使用带麦克风的PeakMeter,但以下部分除外。这是初始化音乐文件播放的代码,但我需要它来初始化听麦克风。

不知道如何做到这一点。有没有人以前做过这个并知道需要做哪些改变?

IMediaStream pAudioStream = null;
_MediaStream = new MultimediaStream();
int mmr = _MediaStream.Initialize(STREAM_TYPE.STREAMTYPE_READ,    
                                 (int)AMMSF_INIT.AMMSF_NOGRAPHTHREAD, null);
mmr = _MediaStream.AddMediaStream(null, MSPurposeId.PrimaryAudio, 
                                  0, out pAudioStream);
MSStatus.ThrowExceptionForHR(mmr);

// open media file
mmr = _MediaStream.OpenFile(filePath, (int)AMMSF_OPEN.AMMSF_RUN);
MSStatus.ThrowExceptionForHR(mmr);

_AudioStream = new MMAudioStream();
mmr = _AudioStream.SetMediaStream(pAudioStream);
MSStatus.ThrowExceptionForHR(mmr);

_wfmt = new WaveFormat(_AudioStream.Format);
mmr = WaveDevice.Open(WaveConstants.WAVE_MAPPER, _wfmt);
WaveOutStatus.ThrowExceptionForHR(mmr);

WaveDevice是IWaveDevice,类型为WaveOutDevice。这将更改为WaveInDevice类型,WaveOutStatus显示为WaveInStatus。

这是我完整创建的类的代码。 Listen()方法是我正在修改的方法。

http://pastebin.com/TQTwRHTF

此类是使用SoundStudio项目中提供的代码,使用Ernzo提供的WindowsMedia和PeakMeter创建的。

如果有人能够找出改变以使Listen()发挥作用,那将为他们赢得赏金。 (它目前有代码我试图解决它,但Play()工作正常)。

1 个答案:

答案 0 :(得分:1)

有一个演示,演示如何使用waveIn。 __waveInput_SoundStudioFrm.cs,只需将其重命名为SoundStudioFrm.cs