社区
图形处理/算法
帖子详情
怎么来写录音程序
似水流年__
2010-04-26 03:01:25
同时录入输入和输出的音频,怎么来实现呢
用哪些Api呢
如果用DirectSound怎么来做呢
...全文
161
5
打赏
收藏
怎么来写录音程序
同时录入输入和输出的音频,怎么来实现呢 用哪些Api呢 如果用DirectSound怎么来做呢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zgl7903
2010-04-26
打赏
举报
回复
http://www.vckbase.com/document/viewdoc/?id=904
柯本
2010-04-26
打赏
举报
回复
用WIN API或DX SDK都可以,MSDN上都有说明的,如果是DXSDK,每个版都有例子,自己研究一下
wencheng2998
2010-04-26
打赏
举报
回复
如果你安装了DirectX 9.0b SDK的话,在系统目录C:\DXSDK\Samples\C++\DirectShow\Capture\AudioCap
里面可以找到这个实例,微软写好的边听边录的程序。。
具体专门做不是一两句话说的清楚,还是看看实例吧。
似水流年__
2010-04-26
打赏
举报
回复
其实用到的录音部分也就下面的
可是上面的代码也只能要么录输入的,要么录输出的
怎么可以同时录制输入和输出的呢
尹成
2010-04-26
打赏
举报
回复
基于API的录音程序:
一、数字音频基础知识
Fourier级数:
任何周期的波形可以分解成多个正弦波,这些正弦波的频率都是整数倍。级数中其他正线波的频率是基础频率的整数倍。基础频率称为一级谐波。
PCM:
pulse code modulation,脉冲编码调制,即对波形按照固定周期频率采样。为了保证采样后数据质量,采样频率必须是样本声音最高频率的两倍,这就是Nyquist频率。
样本大小:采样后用于存储振幅级的位数,实际就是脉冲编码的阶梯数,位数越大表明精度越高,这一点学过数字逻辑电路的应该清楚。
声音强度:
波形振幅的平方。两个声音强度上的差常以分贝(db)为单位来度量,
计算公式如下:
20*log(A1/A2)分贝。A1,A2为两个声音的振幅。如果采样大小为8位,则采样的动态范围为20*log(256)分贝=48db。如果样本大小为16位,则采样动态范围为20*log(65536)大约是96分贝,接近了人听觉极限和痛苦极限,是再线音乐的理想范围。windows同时支持8位和16位的采样大小。
二、相关API函数,结构,消息
对于录音设备来说,windows 提供了一组wave***的函数,比较重要的有以下几个:
打开录音设备函数
MMRESULT waveInOpen(
LPHWAVEIN phwi, //输入设备句柄
UINT uDeviceID, //输入设备ID
LPWAVEFORMATEX pwfx, //录音格式指针
DWORD dwCallback, //处理MM_WIM_***消息的回调函数或窗口句柄,线程ID
DWORD dwCallbackInstance,
DWORD fdwOpen //处理消息方式的符号位
);
为录音设备准备缓存函数
MMRESULT waveInPrepareHeader( HWAVEIN hwi, LPWAVEHDR pwh, UINT bwh );
给输入设备增加一个缓存
MMRESULT waveInAddBuffer( HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh );
开始录音
MMRESULT waveInStart( HWAVEIN hwi );
清除缓存
MMRESULT waveInUnprepareHeader( HWAVEIN hwi,LPWAVEHDR pwh, UINT cbwh);
停止录音
MMRESULT waveInReset( HWAVEIN hwi );
关闭录音设备
MMRESULT waveInClose( HWAVEIN hwi );
Wave_audio数据格式
typedef struct {
WORD wFormatTag; //数据格式,一般为WAVE_FORMAT_PCM即脉冲编码
WORD nChannels; //声道
DWORD nSamplesPerSec; //采样频率
DWORD nAvgBytesPerSec; //每秒数据量
WORD nBlockAlign;
WORD wBitsPerSample;//样本大小
WORD cbSize;
} WAVEFORMATEX;
waveform-audio 缓存格式
typedef struct {
LPSTR lpData; //内存指针
DWORD dwBufferLength;//长度
DWORD dwBytesRecorded; //已录音的字节长度
DWORD dwUser;
DWORD dwFlags;
DWORD dwLoops; //循环次数
struct wavehdr_tag * lpNext;
DWORD reserved;
} WAVEHDR;
相关消息
MM_WIM_OPEN:打开设备时消息,在此期间我们可以进行一些初始化工作
MM_WIM_DATA:当缓存已满或者停止录音时的消息,处理这个消息可以对缓存进行重新分配,实现不限长度录音
MM_WIM_CLOSE:关闭录音设备时的消息。
相对于录音来说,回放就简单的多了,用到的函数主要有以下几个:
打开回放设备
MMRESULT waveOutOpen(
LPHWAVEOUT phwo,
UINT uDeviceID,
LPWAVEFORMATEX pwfx,
DWORD dwCallback,
DWORD dwCallbackInstance,
DWORD fdwOpen
);
为回放设备准备内存块
MMRESULT waveOutPrepareHeader(
HWAVEOUT hwo,
LPWAVEHDR pwh,
UINT cbwh
);
写数据(放音)
MMRESULT waveOutWrite(
HWAVEOUT hwo,
LPWAVEHDR pwh,
UINT cbwh
);
相应的也有三个消息,用法跟录音的类似:
三、程序设计
一个录音程序的简单流程: 打开录音设备waveInOpen===>准备wave数据头waveInPrepareHeader===>
准备数据块waveInAddBuffer===>开始录音waveInStart===>停止录音(waveInReset) ===>
关闭录音设备(waveInClose)
当开始录音后当buffer已满时,将收到MM_WIM_DATA消息,处理该消息可以保存已录好数据。
回放程序比这个要简单的多: 打开回放设备waveOutOpen===>准备wave数据头waveOutPrepareHeader===>写wave数据waveOutWrite===>
停止放音(waveOutRest) ===>关闭回放设备(waveOutClose)
如何处理MM消息: MSDN告诉我们主要有 CALLBACK_FUNCTION、CALL_BACKTHREAD、CALLBACK_WINDOW 三种方式,常用的是
Thread,window方式。
线程模式
waveInOpen(&hWaveIn,WAVE_MAPPER,&waveform,m_ThreadID,NULL,CALLBACK_THREAD),我们可以继承MFC的CwinThread类,只要相应的处理线程消息即可。
MFC线程消息的宏为:
ON_THREAD_MESSAGE,
可以这样添加消息映射: ON_THREAD_MESSAGE(MM_WIM_CLOSE, OnMM_WIM_CLOSE)
窗口模式
安卓通过蓝牙采集音频
写
的一个测试
程序
,能通过蓝牙麦克风
录音
并存储。
零基础三小时用C++开发一款
录音
机
程序
(附完整源代码)
C++模仿Windows而
写
的功能完备的
录音
机
程序
,该
录音
机可以录制指定输入的声音,详细信息请参考源
程序
。编译运行时请将MP3Enc.dll文件拷贝至Debug目录中。
录音
程序
保存文件格式为MP3,还可以编辑MP3标签信息。
程序
界面图如下。 项目结构展示: 部分源码展示: 用C++代码编
写
的这款简单的
录音
机
程序
(源代码),同样是很简单的
程序
,只是对
录音
功能的强调,演示如何在C++...
FFmpeg4.3开发系列之15:同步
录音
录屏并存储或直播实战
敬告:该系列的课程在抓紧录制更新中,敬请大家关注。敬告: 该系列的课程涉及:FFmpeg,WebRTC,SRS,Nginx,Darwin,Live555,等。包括:音视频、流媒体、直播、Android、视频监控28181、等。我将带领大家一起来学习:
录音
录屏、同步机制、存储、直播推流。具体内容包括:1.FFmpeg
录音
录屏讲解及命令行实战。2.FFmpeg录屏API实战讲解。3.FFmpeg
录音
API实战讲解。4.FFmpeg音视频同步API实战讲解。5.FFmpeg同步
录音
录屏并直播实战。 音视频与流媒体是一门很复杂的技术,涉及的概念、原理、理论非常多,很多初学者不学 基础理论,而是直接做项目,往往会看到c/c++的代码时一头雾水,不知道代码到底是什么意思,这是为什么呢? 因为没有学习音视频和流媒体的基础理论,就比如学习英语,不学习基本单词,而是天天听英语新闻,总也听不懂。所以呢,一定要认真学习基础理论,然后再学习播放器、转码器、非编、流媒体直播、视频监控、等等。 梅老师从事音视频与流媒体行业18年;曾亲手主导广电直播全套项目,精通h.264/h.265/aac,曾亲自参与百度app上的网页播放器等实战产品。目前全身心自主创业,主要聚焦音视频+流媒体行业,精通音视频加密、流媒体在线转码快编等热门产品。
微信小
程序
:
录音
功能(授权、统计时长、上传)
最近呢,用小
程序
做了个
录音
的功能,接下来呢,与大家一起分享一下我的开发心得,希望能帮到大家。那我们就继续向下????看吧~ 需求呢,差不多是这样的: 单击开始录制(不是摁住不放哦) 点击完成上传
录音
录音
计时功能 当到达360s,自动进行上传 好了那来看看效果图吧,如下图所示: 接下来,进入主题,奥利给 一开始呢,打算用wx.startRecord(),后来看了下文档,发现从基础库 1.6.0 开始,本接口停止维护,被 wx.getRecorderManager 代替了,下面的我会说一下
录音
的几个重
微信小
程序
录音
功能的实现:有
录音
、暂停、继续、停止 、播放等功能。
微信小
程序
录音
功能的实现:有
录音
、暂停、继续、停止 、播放等功能。 网上找了半天都没找到合适的demo,很多就不完全,看着都有点难受,看了官方的api ,干脆自己
写
一个 界面如下图 看了网上大部分人
写
的例子,
录音
自动结束后都没有进行处理,那样的话会导致
录音
到达最大
录音
时间自动停止
录音
,然后会无法播放。 下面看代码 js const recorderManager = wx.getRecorder...
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章