Microsoft CSIP WindowsMobile MEDC 合作伙伴 体验中心
设Winbile为首页    |    加Winbile到收藏夹          
欢迎光临

请问如何打开扬声器设备,以达到免提效果

第1楼
2007-08-04
职务:普通用户
积分:7
等级: none
金钱: 0
精华: 0
帖子数:3
无等级(731)

  在电话接通后,使用什么API来控制扬声器,以实现扬声器免提和非免提的切换,以及如何控制音量呢?我用的是多普达900,谢谢!

 
2007-08-13 21:32 回复 | 引用 | 编辑 | Top

Re: 请问如何打开扬声器设备,以达到免提效果

第2楼
2008-01-28
职务:普通用户
积分:8
等级: 普通用户
金钱: 0
精华: 0
帖子数:4
发帖数前500位(485)

我也有这个疑问,WavOutMessage(ForceSpeaker)貌似没用
 
2008-04-25 15:14 回复 | 引用 | 编辑 | Top

Re: 请问如何打开扬声器设备,以达到免提效果

第3楼
2006-10-11
职务:普通用户
积分:37
等级: 初级程序员一级
金钱: 0
精华: 0
帖子数:7
发帖数前500位(288)

我也是碰到一样的问题,我是直接在扬声器里放音,我想改到听筒,但改不成功

DWORD dwRet = waveOutMessage(0,MM_WOM_FORCESPEAKER, FALSE, 0);

DWORD dwRet = waveOutMessage(m_hWaveOut,MM_WOM_FORCESPEAKER, FALSE, 0);

waveOutMessage(m_hWaveOut,WPDM_PRIVATE_SETUP_PHONE_PATH, RIL_AUDIO_HEADSET, 0);

等都试过了,都不行,看参考资料应该就是这样的。

你试下看行不行

 
2008-04-26 23:23 回复 | 引用 | 编辑 | Top

Re: 请问如何打开扬声器设备,以达到免提效果

第4楼
2007-01-12
职务:超级版主
积分:13295
等级: 高级软件工程师
金钱: 0
精华: 5
帖子数:755
发帖数前10位(8)



vivo2008:
  在电话接通后,使用什么API来控制扬声器,以实现扬声器免提和非免提的切换,以及如何控制音量呢?我用的是多普达900,谢谢!

模拟按键"VK_F16",方法可参考:http://www.cnblogs.com/fox23/archive/2008/03/10/1069059.html

Good luck!



 

 

Freesc Huang - .Net Micro Framework

MII-MS embedded lab AT CSIP

blog:http://fox23.cnblogs.com

winbile blog for .net MF
2008-04-27 09:58 回复 | 引用 | 编辑 | Top

Re: 请问如何打开扬声器设备,以达到免提效果

第5楼
2007-01-12
职务:超级版主
积分:13295
等级: 高级软件工程师
金钱: 0
精华: 5
帖子数:755
发帖数前10位(8)

这里有一段代码可供参考:

http://www.cnblogs.com/fox23/archive/2008/04/27/windowsmobile-compactframework-speaker-csharp.html

 

Freesc Huang - .Net Micro Framework

MII-MS embedded lab AT CSIP

blog:http://fox23.cnblogs.com

winbile blog for .net MF
2008-04-27 12:35 回复 | 引用 | 编辑 | Top

Re: 请问如何打开扬声器设备,以达到免提效果

第6楼
2006-10-11
职务:普通用户
积分:37
等级: 初级程序员一级
金钱: 0
精华: 0
帖子数:7
发帖数前500位(288)

那里面的代码都是托管的,而且是打电话时实现免提。



如果我是要实现点对点音频流对话功能(如VOIP),要自已实现流播放,播放的声音要在听筒出来,应该什么做?



网上我找到的相关代码:

//发送消息打开Receiver

waveOutMessage(0,0x452,0,0);



DWORD dwChannels = 1; // default to mono

DWORD dwBitsPerSample = 16; // default to 16-bit samples

DWORD dwSampleRate = 11025; // default to 11.025KHz sample rate

DWORD dwDeviceId = WAVE_MAPPER; // capture from any available device



// set up the wave format structure

WAVEFORMATEX wfx;

wfx.cbSize = 0;

wfx.wFormatTag = WAVE_FORMAT_PCM;

wfx.wBitsPerSample = (WORD) dwBitsPerSample;

wfx.nSamplesPerSec = dwSampleRate;

wfx.nChannels = (WORD) dwChannels;

wfx.nBlockAlign = wfx.nChannels * wfx.wBitsPerSample / 8;

wfx.nAvgBytesPerSec = wfx.nBlockAlign * wfx.nSamplesPerSec;



MMRESULT mr = waveOutOpen(&phwo, dwDeviceId, &wfx, NULL , NULL, CALLBACK_NULL);



然后用Playsound就行了。





这里我用waveOutWrite,没用PlaySound来写入音频数据,不过还是没有作用。
 
2008-04-27 12:53 回复 | 引用 | 编辑 | Top

Re: 请问如何打开扬声器设备,以达到免提效果

第7楼
2007-01-12
职务:超级版主
积分:13295
等级: 高级软件工程师
金钱: 0
精华: 5
帖子数:755
发帖数前10位(8)

 
1.对于在其他应用程序中打开扬声器,简单来说: No , 做不到.
2.这个问题我已经在这里解释过了,扬声器是由OEM加上去的,他们一般不会提供相应的API,您最好与OEM方联系一下以获取更多信息
3.对于使用听筒播放,同样取决于你OEM提供的该型号手机扬声器和听筒与codec的连接方式,您最好查看一下OEM提供的Audio Codec的datasheet再考虑如何编码。从软件的角度,这个问题就是说没有标准的手段可以作到。有可能你需要在Audio驱动部分天加路由代码,也有可能你需要专为路由控制编写特定的驱动,这是设计上的问题,也是软件开发人员无法解决的。
 
Good luck
 

Freesc Huang - .Net Micro Framework

MII-MS embedded lab AT CSIP

blog:http://fox23.cnblogs.com

winbile blog for .net MF
2008-04-27 17:50 回复 | 引用 | 编辑 | Top

Re: 请问如何打开扬声器设备,以达到免提效果

第8楼
2006-10-11
职务:普通用户
积分:37
等级: 初级程序员一级
金钱: 0
精华: 0
帖子数:7
发帖数前500位(288)

非常感谢fox23的耐心回复。



1.我现在的问题是可以用扬声器放音,无法用听筒放音。我估计跟我的机型有关,我是O2 ATOM EXEC的,可能我的机形默认是用扬声器播放。



2.我需要做成的是通用的软件,所以需要找到一种标准接品口实现,如果是是找OEM产商的话,可能就失去了通用性。



3.我不太明白,你这里所指的CODEC是指的什么?我原来的理解是CODEC是指G723,G729之类的,这些编码器,可以通过软件来实现软编解码,当然主要是考虑性能问题。 你所说的路由代码,这些可能是到了硬件底层的问题,我暂时还无法理解。



我原来以为SKYPE可以做切换音频输出通道,后面发现SKYPE也是只能用扬声器来放音的。不知有没有软件可以做到切换输出通道,在听筒与扬声器之间。



再次感谢您的回复。
 
2008-04-27 23:20 回复 | 引用 | 编辑 | Top

Re: 请问如何打开扬声器设备,以达到免提效果

第9楼
2007-01-12
职务:超级版主
积分:13295
等级: 高级软件工程师
金钱: 0
精华: 5
帖子数:755
发帖数前10位(8)

 我还没有看到可以随意控制Speaker播放到听筒的切换的软件,基本上所有生厂商都将听筒,mic和speaker设计为直接从硬件激活,几乎不存在以软件方式控制的可能性,更不可能开发出通用的软件。
 
Freesc
 

Freesc Huang - .Net Micro Framework

MII-MS embedded lab AT CSIP

blog:http://fox23.cnblogs.com

winbile blog for .net MF
2008-04-28 08:42 回复 | 引用 | 编辑 | Top

Re: 请问如何打开扬声器设备,以达到免提效果

第10楼
2006-10-11
职务:普通用户
积分:37
等级: 初级程序员一级
金钱: 0
精华: 0
帖子数:7
发帖数前500位(288)

照你所说,那还真是郁闷。



MS的waveOutMessage 函数,MM_WOM_FORCESPEAKER 按说明,应该是指切换到扬声器播放,但可能只在已接了耳机,并且音频驱动支持时有效。用于比如接上耳机,又需要在扬声器响铃的地方。由于我现手上没有耳机线,所以也还未测试。

http://msdn2.microsoft.com/en-us/library/ms894688.aspx

In general, when the headset is plugged into a Windows Mobile-based device, all audio should be routed to the headset by default. There are, however, certain sounds, such as the phone ring, that are always most appropriately played through the external speaker so it can always be heard.



Support for the MM_WOM_FORCESPEAKER message is driver dependent. The AR11 sample audio driver implements this message. Hardware that supports selectively routing individual streams to the speaker is rare. So in practice, audio drivers typically keep a reference count of how many streams are to be routed to the speaker. If the number of streams is non-zero then all audio is routed to the speaker.
 
2008-04-28 15:27 回复 | 引用 | 编辑 | Top