none
wince5.0 如何自定义操作,以实现电话免提功能? RRS feed

  • 问题

  • 用WINCE5.0做电话操作系统。电话线接到声卡上。

    在应用中,如何才能将电话线的信号音,从扬声器放出来呢?

    用waveout***,可以播放声音文件,也可以设置音量,但是不知道如何做,才能将电话的拨号音等信号音也从扬声器放出来?

    给点思路吧,谢谢回复!

    2010年5月19日 8:31

答案

  • 你可以在你的audio driver的PDD_AudioMessage函数中添加一个Message ID用以处选择输出是Handset还是speaker。然后在你的application里叫waveOutMessage函数,并且将新添加的Message ID和相应的参数传递给它。就可以了。
    2010年5月19日 13:01
    版主

全部回复

  • 补充说明:在linux系统上,我们通过ioctl自定义操作,在免提时,将声卡的相应寄存器的位置上或者清掉,电话线的信号音就可以从PCM_OUT播放出来。

    现在只是改成了wince5.0系统,该如何做呢?

    2010年5月19日 8:40
  • 你可以在你的audio driver的PDD_AudioMessage函数中添加一个Message ID用以处选择输出是Handset还是speaker。然后在你的application里叫waveOutMessage函数,并且将新添加的Message ID和相应的参数传递给它。就可以了。
    2010年5月19日 13:01
    版主
  • 多谢!添加了Message ID,实现了读写声卡寄存器,可以将线路音播放出来了。

    现在的问题:

    能不能通过 CreateFile(TEXT("WAV0:"), GENERIC_READ, FILE_SHARE_READ,
        NULL, OPEN_EXISTING, 0, 0);

    的方式,对声卡句柄进行 ReadFile 和 WriteFile 操作实现录放音,如果不想使用WaveIn***的话?

    我试了一下,读写返回的数量值都是0啊

     

    2010年5月24日 9:18
  • 一般来说应该是"WAV1:",不是0。对audio driver的读写也不是通过ReadFile和WriteFile,而是走IoControl路线。

    还有最好还是用Waveform API来调用Audio driver。否则可能会有访问限制或者同步问题。

    2010年5月24日 9:23
    版主