2011-03-18 53 views
2

我使用了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()工作正常)。

+2

http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/52312bbc-5fa2-491a-b3bd-aa7267fc2a8c – 2011-03-23 01:26:08

+0

尔加的当然你可以把我连接到一个看起来可以工作的人。不幸的是,其中的代码超过了我的技能水平,并试图将我已经编写的代码转换为使用该代码的难度。不知道评论是否给予声望,但是+1。 – 2011-03-24 16:06:36

回答

1

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

+1

再次感谢Ernzo:p – 2011-03-26 02:36:49