mjl
mjl
驱动牛犊
驱动牛犊
  • 注册日期2001-05-24
  • 最后登录2002-03-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:6558回复:6

声卡编程

楼主#
更多 发布于:2001-07-24 16:28
各位大侠,我想在程序中让声卡发出一定频率的正弦波信号,通过声卡的speaker口传到一块语音modem然后返回至声卡的mic口,再获取这些返回的声音数据。应该怎么做啊?
yaoyuan
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2015-01-04
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-07-24 21:24
由于篇幅的关系,这里只提供一个简单的思路供参阅:
在Win32 API中提供了约四十多个函数可供对声卡编程:
1。声音输入
waveInGetNumDevs();
waveInGetDevCaps(0,&incaps,sizeof(WAVEINCAPS));
waveInOpen(&m_inwave,0,&m_WaveFormat,(DWORD)m_waveinevent.m_hObject,NULL,CALLBACK_EVENT);
waveInPrepareHeader(m_inwave,&m_waveinheader1,sizeof(WAVEHDR));
waveInUnprepareHeader(m_inwave,&m_waveinheader1,sizeof(WAVEHDR));
waveInAddBuffer(m_inwave,&m_waveinheader1,sizeof(WAVEHDR) );
 waveInStart( m_inwave );
利用以下几个函数即可对声卡输入进行采样,如采用的是回调用函数或线程,则可在回调函数或线程中周期性的获得数据,可参阅MSDN或SDK来获得函数和相关数据结构详细的使用说明。
2。声卡输出
声卡的输出则相对较简单
waveOutGetNumDevs();
waveOutGetDevCaps(0,&outcaps,sizeof(WAVEOUTCAPS));
waveOutOpen(&m_outwave,0,&m_WaveFormat,
0,NULL,CALLBACK_NULL);
waveOutPrepareHeader(m_outwave,&m_waveoutheader1,sizeof(WAVEHDR) );
waveOutUnprepareHeader(m_outwave,&m_waveoutheader1,sizeof(WAVEHDR) );
waveOutWrite(m_outwave,&m_waveoutheader1,sizeof(WAVEHDR) );

如需要输出一定频率的正弦波,可事先通过某些工具获得该正弦波的数据,周期性的通过waveOutWrite函数输出即可。

上面是从我的程序中摘录下来的。详细的编程可参阅MSDN或SDK中的函数和数据结构的使用说明进行。
mjl
mjl
驱动牛犊
驱动牛犊
  • 注册日期2001-05-24
  • 最后登录2002-03-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-07-27 07:59
yaoyuan兄,我用的声卡是以前一位同事设计的:ISA总线,专门测试语音modem用的。它用了一个8255芯片,地址是264h-267h,我在turbo c下用inportb,outputb等函数读写263h-267h,根本没有反应,为什么?有其它的办法能读写到吗?
yaoyuan
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2015-01-04
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-07-27 09:23
 你的同事没有提供声卡的驱动程序吗?如果没有的话,那编程就比较麻烦了,至少你需要知道它的工作原理、工作流程等才可以针对它编程。
[yaoyuan 编辑于 2001-07-27 09:27]
mjl
mjl
驱动牛犊
驱动牛犊
  • 注册日期2001-05-24
  • 最后登录2002-03-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-07-27 16:01
只有dos下的驱动,现在可以控制8255了。不过我在用示波器测8255的cs线时,发现它一直为高电平,按道理它应该为低才对,这是为什么?
jnbhygtzjjhx
驱动牛犊
驱动牛犊
  • 注册日期2002-07-26
  • 最后登录2004-03-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-10-29 11:23
 :D :P:
       好e!
正想用声卡测试一下波形,哈哈































lwx2003
驱动牛犊
驱动牛犊
  • 注册日期2003-11-01
  • 最后登录2003-11-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-11-01 16:36
我喜欢 :)
游客

返回顶部