阅读:6558回复:6
声卡编程
各位大侠,我想在程序中让声卡发出一定频率的正弦波信号,通过声卡的speaker口传到一块语音modem然后返回至声卡的mic口,再获取这些返回的声音数据。应该怎么做啊?
|
|
沙发#
发布于: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中的函数和数据结构的使用说明进行。 |
|
板凳#
发布于:2001-07-27 07:59
yaoyuan兄,我用的声卡是以前一位同事设计的:ISA总线,专门测试语音modem用的。它用了一个8255芯片,地址是264h-267h,我在turbo c下用inportb,outputb等函数读写263h-267h,根本没有反应,为什么?有其它的办法能读写到吗?
|
|
地板#
发布于:2001-07-27 09:23
你的同事没有提供声卡的驱动程序吗?如果没有的话,那编程就比较麻烦了,至少你需要知道它的工作原理、工作流程等才可以针对它编程。
[yaoyuan 编辑于 2001-07-27 09:27] |
|
地下室#
发布于:2001-07-27 16:01
只有dos下的驱动,现在可以控制8255了。不过我在用示波器测8255的cs线时,发现它一直为高电平,按道理它应该为低才对,这是为什么?
|
|
5楼#
发布于:2003-10-29 11:23
:D :P:
好e! 正想用声卡测试一下波形,哈哈 |
|
6楼#
发布于:2003-11-01 16:36
我喜欢 :)
|
|