社区
C++ Builder
帖子详情
求教:怎样抓实时语音,通过连接到电脑的语音输入设备(如麦克风)抓录入语音???
gqxs
2001-07-06 11:54:22
...全文
432
6
打赏
收藏
求教:怎样抓实时语音,通过连接到电脑的语音输入设备(如麦克风)抓录入语音???
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gqxs
2001-07-06
打赏
举报
回复
佩服
wjzhuang
2001-07-06
打赏
举报
回复
http://www.torry.net/samples_graphics.htm
delphi的代码
我不懂电脑
2001-07-06
打赏
举报
回复
1.语音的采集和播放。
本软件中要把语音直接转换为数据,放在内存中,而不是存为语音文件,而且播放语音时,也是直接播放语音数据,而不是播放语音文件。这样的好处前面已经提到,即省略了读写硬盘的费时操作,提高了语音通话的实时性。
要完成上述语音操作,编程语言中提供的容易使用的高级的多媒体语音函数是无法胜任的,只能用一些底层的语音函数来实现,这一类函数和结构的名字都以"wave"作为前缀。
下面简要分析录音和放音的流程,考虑到两着的处理和流程基本上是类似的,本文就只以录音为例来分析,如图三为录音流程。录音的准备工作主要是三点,打开录音设备,获得录音句柄,指定录音格式,分配若干用于录音的内存,内存的大小和数量下文将进一步分析。开始录音时,先将所有内存块都提供给录音设备用来录音,录音设备就会依次将语音数据写入内存,当一块内存写满,录音设备就会发一个Window 消息MM_WIM_DATA给相应的窗口,通知程序作相关的处理,这时程序通常的处理是把内存中的数据进行复制,如写入文件等,在此我们的处理是把数据进行压缩和网络发送,然后把内存置空,返还给录音设备进行录音,这样就形成一个循环不息的录音过程。结束录音时就释放所有内存块,关闭录音设备。
图三 录音流程
以录音为例,关键的录音函数和顺序如下:
WAVEFORMATEX waveformat;
waveformat.wFormatTag=WAVE_FORMAT_PCM;
waveformat.nChannels=1;
waveformat.nSamplesPerSec=8000;
waveformat.nAvgBytesPerSec=16000;
waveformat.nBlockAlign=2;
waveformat.cbSize=0;
waveformat.wBitsPerSample=16; //指定录音格式
int res=waveInOpen(&m_hWaveIn,WAVE_MAPPER, &waveformat, (DWORD)m_hWnd,0L,CALLBACK_WINDOW); //打开录音设备
waveInPrepareHeader(m_hWaveIn,m_pWaveHdr[i],sizeof(WAVEHDR)); //准备内存块录音
waveInAddBuffer(m_hWaveIn,m_pWaveHdr[i],sizeof(WAVEHDR)); //增加内存块
waveInStart(m_hWaveIn);//开始录音
waveInStop(m_hWaveIn); //停止录音
waveInReset(m_hWaveIn); //清空内存块
waveInClose(m_hWaveIn); //关闭录音设备
在录音和放音的程序处理中,要特别注意两点。一个是分配的内存的大小和数量。内存的大小与IP电话中语音的连续性和延时性有直接关系,内存越大,则语音的连续性越好,但延时性越差,反之,内存越小,则语音的延时性越小,但连续性越差,所以要权衡利弊,取一个折衷量,这就需要反复实验。根据作者的实验,大约每个内存块录音的时间长度取0.1秒比较合适,具体的大小与采用的语音格式有关。内存的数量则与内存的大小和对每个内存的录音数据的处理时间长短有关,一定要保证在录音过程中,录音设备至少有一块内存可供录音,也就是说录满的内存要及时返回,使得循环能够顺利进行。由此可知,内存大,分配的数量就可以少,对每个内存的录音数据的处理时间短,分配的数量就可以少,反之,分配的数量就要多。当然可以分配足够多的数量,但是太多则耗费资源,降低了程序的效率。根据作者的实验,大约所有的内存块录音的时间长度和有0.5秒就足够了,也就是说,如果每个内存块录音时间长度为0.1秒,则可以分配5个内存块。
程序中还有特别重要的一点是语音设备的Window消息的相应,通过语音设备发送的一系列消息,如MM_WIN_OPEN录音设备打开消息,MM_WIM_CLOSE录音设备关闭消息等,我们可以响应语音设备的打开,关闭,开始录音和放音,停止录音和放音,录音时一个内存块录满,放音时一个内存块放完等各种事件,来进行相关的处理。需要注意的是这些消息在VC的ClassWizard类工具的消息序列中是看不到的,需要手工编辑消息响应宏和代码。
我不懂电脑
2001-07-06
打赏
举报
回复
你可以用wave这组Api来实现。
luhongjun
2001-07-06
打赏
举报
回复
录音的主要实现部分.
void TForm1::RecordWave(long time,char * filename)
{
MCI_OPEN_PARMS mciOpen;
MCI_RECORD_PARMS mciRecord;
MCI_SAVE_PARMS mciSave;
DWORD flags;
long DeviceID;
StatusBar1->Panels->Items[0]->Text="Recording...";
mciOpen.lpstrDeviceType="waveaudio";
mciOpen.lpstrElementName="";
flags=MCI_OPEN_ELEMENT¦MCI_OPEN_TYPE;
mciError(mciSendCommand(0,MCI_OPEN,flags,DWORD(&mciOpen)),"OpenWave");
DeviceID=mciOpen.wDeviceID;
mciRecord.dwTo=time;
flags=MCI_TO¦MCI_WAIT;
mciError(mciSendCommand(DeviceID,MCI_RECORD,flags,DWORD(&mciRecord)),"RecordWave");
StatusBar1->Panels->Items[0]->Text="Finished...";
mciSave.lpfilename=filename;
flags=MCI_SAVE_FILE¦MCI_WAIT;
mciError(mciSendCommand(DeviceID,MCI_SAVE,flags,DWORD(&mciSave)),"SaveToFile");
mciError(mciSendCommand(DeviceID,MCI_CLOSE,flags,DWORD(NULL)),"Close");
}
错误处理:
bool TForm1::mciError(long error, char *caller)
{
char msg[100];
if (error!=0){
mciGetErrorString(error,msg,100);
Application->MessageBox(msg,caller,ID_OK);
return true;
}
return false;
}
调用的例子:
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
SaveDialog1->Filter="WaveAudio files (*.wav)¦*.Wav";
if (SaveDialog1->Execute())
RecordWave(StrToInt(Edit1->Text),SaveDialog1->FileName.c_str());
}
gqxs
2001-07-06
打赏
举报
回复
下周一我来结帐!
语音
输入
支持:用
麦克风
录入
要合成的文字内容
通过
麦克风
录音结合零样本
语音
克隆技术,系统可自动识别
语音
并合成为目标音色的自然
语音
。GLM-TTS 与轻量ASR模型协同,实现从口述到高保真音频输出的全流程,支持个性化声纹、情感迁移与离线部署,大幅提升内容创作效率。
电脑
wps可以
语音
录入
吗_怎样用word进行
语音
录入
文字
有时候我们不方便手敲键盘输入时,可以利用word的
语音
录入
功能进行输入。以下是学习啦小编为您带来的关于用Word进行
语音
录入
文字,希望对您有所帮助。用Word进行
语音
录入
文字
语音
输入
功能添加完成后,系统智能化地弹出要求进行
语音
识别练习的对话框(如图),戴好耳麦,并调整好话筒与嘴之间的距离和位置(经笔者测试,话筒与嘴之间的距离以8cm左右最为合适),然后跟着向导,一步一步完成
语音
识别练习工作。打开“...
小程序
语音
识别:实现
语音
输入
功能
本文旨在为开发者提供在微信小程序中实现
语音
输入
功能的完整指南。内容涵盖从基础录音功能到高级
语音
识别的全流程实现,包括前端交互设计、后端服务对接以及性能优化建议。首先介绍
语音
识别的基本概念然后详细讲解小程序录音API的使用接着分析
语音
识别服务的接入方式最后提供完整的代码实现和优化建议
语音
识别(ASR): Automatic Speech Recognition,将人类
语音
转换为文本的技术采样率: 录音时每秒采集声音样本的次数,单位Hz比特率: 每秒传输的比特数,影响音频质量。
电脑
wps可以
语音
录入
吗_懒人用技巧—使用Word录音实现
语音
录入
文字(口读文字,Word为您写文字)...
之前曾听说过吗,只要您读文章,Word就会为您写文字拉?Word也不简单哪,软件本身自带的
语音
录入
功能,可以为您实现,您读什么,它就能为您写什么?这不是懒人的专利,而是一种常用功能,为方便大众而设置的一种文字
录入
功能!下面我们一起来学习如何实现这种效果!首先应具备如下的条件:①具备
麦克风
设备
,并设置为可用状态!②系统安装有微软拼音输入法,注意哦,其他输入法是不行的!打开Word,执行操作:“工具”...
C++ Builder
13,871
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章