有一个关于waveOutOpen与Modem的问题

Postgre.J 2003-10-04 05:45:04
我想用Modem在电话接通后向对方播放一段语音.用的是TAPI.看有些资料上说可以用waveOutOpen函数向Modem播放语音,其第二个参数dwDevID用Modem的句柄即可.但实际上我用lineGetID获得了Modem的句柄后,再用如下代码
HWAVEOUT hWho;
WAVEFORMATEX m_WaveFormatEx;
memset(&m_WaveFormatEx,0x00,sizeof(m_WaveFormatEx));
m_WaveFormatEx.wFormatTag = WAVE_FORMAT_PCM;
m_WaveFormatEx.nChannels = 1;
m_WaveFormatEx.wBitsPerSample = 16;
m_WaveFormatEx.cbSize = 0;
m_WaveFormatEx.nSamplesPerSec = 20050;
m_WaveFormatEx.nAvgBytesPerSec = m_WaveFormatEx.nSamplesPerSec
*(m_WaveFormatEx.wBitsPerSample/8);
m_WaveFormatEx.nBlockAlign =
(m_WaveFormatEx.wBitsPerSample/8)*
m_WaveFormatEx.nChannels;

MMRESULT mmReturn = waveOutOpen(&hWho,
(UINT)m_hModem,
&m_WaveFormatEx,NULL,NULL,
CALLBACK_WINDOW);
if(mmReturn!=MMSYSERR_NOERROR)
{
ShowMessage("初始化音频接口出错!");
char errorbuffer[MAX_PATH];
char errorbuffer1[MAX_PATH];
waveOutGetErrorText( mmReturn,errorbuffer,MAX_PATH);
sprintf(errorbuffer1,"WAVEOUT:%x:%s",mmReturn,errorbuffer);
ShowMessage(errorbuffer1);
}
结果执行果报错:所用的设备号超出了本地系统范围.
请问:这应该如何解决?
谢谢
...全文
83 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluesen 2003-12-03
  • 打赏
  • 举报
回复
同意RomanticProgrammer所论。不过也可能他取设备ID有问题。此外我觉得用TAPI3.0更好。
RomanticProgrammer 2003-12-03
  • 打赏
  • 举报
回复
up
RomanticProgrammer 2003-12-02
  • 打赏
  • 举报
回复
其中1的可能性很小,因为1的不会发报错的,只是你听不到声音,
而2的报错就是你说的那个。。呵呵。我遇到过无数此。
RomanticProgrammer 2003-12-02
  • 打赏
  • 举报
回复
我做过用调制解调器发送发送传真的程序,和你遇到过一样的问题。

可能情况有二:
1:
m_WaveFormatEx.nChannels = 1;
m_WaveFormatEx.wBitsPerSample = 16;
m_WaveFormatEx.cbSize = 0;
m_WaveFormatEx.nSamplesPerSec = 20050;
你这里是采用16为量化精度,20050hz音频PCM数据,一般的调制解调器无法支持这么高的音频数据,我的程序中使用的是8位8000hz的脉冲编码调制数据,是可以放出来的。
2:
原因是你的调制解调器没有Voice功能。
请你仔细检查你的调制解调器,看是否有Voice功能。一般调制解调器只有Fax/Data。
如果不是这个原因,那你取得调制解调器音频输出的代码可能有问题,贴出来看看。。。
warton 2003-12-02
  • 打赏
  • 举报
回复
不懂这个,看这么长时间没人回答,up一下!

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧