delphi如何实现直接实时播放话筒的声音,而不用录音

 我来答
royrob16x8
2011-08-07 · TA获得超过524个赞
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:106万
展开全部
无论如何都先要录音,你说的情况只是需要将音频录制到内存中,不需要储存到文件里而已。
有四种方法:
1、系统MME功能,也就是使用waveIn****/waveOut****系列API来完成。程序启动后用waveIn****系列函数打开声卡输入功能,同时将缓冲区设定到足够小的值,然后开始将音频数据录制到设定的缓冲区,当缓冲区满后再将缓冲区(WAVHDR)直接加入到waveOut****系列函数的输出队列中即可。此方法实现较简单,缺点是MME为高级API,因此在整个过程中需要走过很多系统处理阶段,导致延迟较大。若缓冲区太小会导致声音断断续续。一般最小延迟可到120毫秒左右。可参考libzplay的麦克风监听。
2、使用DirectSound技术,处理流程同方法1。此方法实现较方法1稍难,但可设置DirectSound的工作模式为最高级别,一般最小延迟可到60毫秒左右。可参考微软DirectSound SDK例子。推荐使用。
3、使用WDM技术。所谓WDM技术也就是微软系统的新一代驱动程序架构,即应用程序直接调用底层系统服务。总流程同方法1,也是先接受一个缓冲区的数据,然后输出。在WinXP下,音频WDM也就是常说的Kernel Streaming(内核音频流),在Vista/Win7下,音频WDM是WASAPI。此方法实现难度最高,且需要程序员有一定的系统内核编程能力,要严格处理程序,否则会引起系统崩溃(蓝屏)。且KS方法对声卡有兼容性要求。此方案的优势在于可将延迟做到极低的状态,一般最小延迟可以到1毫秒~10毫秒,且在一定情况下可以使用非分页内存、直接硬件IRP和RT,独占声卡的所有资源。可参考微软KS和WASAPI的例子。
4、使用ASIO技术。ASIO是一个音频公司推出的“音频流输入输出接口”,真正意义(非模拟)上的ASIO需要声卡硬件支持。总流程同方法1,但使用此方法时需要注意ASIO中的缓冲区切换,一般在ASIO中缓冲区切换需要使用nanosecond来计时,当CPU占用较高时会造成声音断断续续。此方法的优点在于同WDM一样可以获得极低的延迟,一般为1毫秒~25毫秒。可参考ASIO SDK。

WDM与ASIO对比:
WDM处理流程:
用户程序<->声卡驱动<->声卡
ASIO处理流程:
用户程序<->ASIO驱动<->声卡驱动<->声卡
由此可见,WDM属于最低级音频输入输出技术了。

以上全部手打。。。。
唯创智能
2024-05-10 广告
同时支持储存多段录音的录音IC有如下:WT2000/WTR030/WTR050系列录音芯片(当然,也有同等型号系列下的录音模块),用户选择,主要看录音时长的需求、是纯录音用还是录音/播放兼具,是要芯片还是要模块,看电路的一个设计需求。当然如... 点击进入详情页
本回答由唯创智能提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式