windows 音频编程

windows 音频编程主要有三种方式:
1.MCI,这种方式很简单,但是不够灵活 
2.waveXXXX等低阶的声音API 
3.DirectSound 


编写一个功能较强大的音频处理程序,那就必须使用低级音频函数和多媒体文件I/O来控制音频设备的输入和输出。因为低级音频函数可直接与音频驱动程序交互,通过窗口消息或回调(CALL BACK)函数来管理音频数据块的记录和播放,控制非常灵活。重要的一点是,低级音频函数为我们提供了一个设备无关的接口。


示波器


源码爱好者网站

http://www.codefans.net/


利用DirectSound实现声卡录音

http://www.hur.cn/Article/2013/120856.html


音频数据文件WAVE结构分析--Windows XP 启动.wav 文件头分析 

http://blog.csdn.net/c_huabo/article/details/5984402


快速傅里叶变换 fft

http://www.codeproject.com/Articles/6855/FFT-of-waveIn-audio-signals

http://www.codeproject.com/Articles/29366/Play-Wave-file-with-DirectSound-and-display-its-sp


我遇到的死锁是由于当执行WaveInReset函数时,回调函数仍然在调用WaveInAddBuffer才产生的,所以只要设置标示符,使将要执行WaveInReset函数之时及以后回调函数不调用WaveInAddBuffer即可避免死循环,另外不要忘了在调用WaveInReset之前调用WaveInStop函数。


参考

http://www.docin.com/p-159437153.html
http://www.docin.com/p-327123929.html
http://blog.csdn.net/joyzml/article/details/5381143


http://ee.sjtu.edu.cn:8080/PDF/Paper/junheng.htm


请教关于实时录音/放音的问题

http://bbs.csdn.net/topics/99939


API 层实现语音录制

http://www.lihuasoft.net/article/show.php?id=124


基于WaveX低级音频函数的实时语音通信

http://www.wavecn.com/content.php?id=95

http://wmnmtm.blog.163.com/blog/static/3824571420111030125597/?suggestedreading&wumii


http://www.elautoctrl.info/wordpress/archives/1730

http://www.programfan.com/article/729.html

http://old.uplook.cn/blog/0/1939/

http://www.vckbase.com/index.php/wv/664

http://www.cnblogs.com/linbc/archive/2009/03/18/1415936.html

http://blog.sina.com.cn/s/blog_49cb42490100l4u1.html

http://blog.sina.com.cn/s/blog_49cb42490100l51f.html

http://blog.sina.com.cn/s/blog_49cb42490100l99d.html


声音以图形显示的计算机实现

http://wenku.baidu.com/view/9bdac51c59eef8c75fbfb3bf.html


一个简单的录音播放程序:即边录边播,用MFC开发

http://www.pudn.com/downloads165/sourcecode/windows/multimedia/detail756713.html


波形示意软件

http://www.m5home.com/bak_blog/article/282.html


android录音与示波器

http://jim443.iteye.com/blog/1666087


vc画波形图

http://tw.knowledge.yahoo.com/question/question?qid=1611033103794

http://www.pudn.com/downloads171/sourcecode/windows/bitmap/detail790648.html


http://help.apple.com/mainstage/mac/2.2/cn/mainstage/usermanual/index.html#chapter=A%26section=0

http://bbs.csdn.net/topics/100137205

Fundamentals of Sound: How to Make Music out of Nothing at All

http://www.codeproject.com/Articles/15786/Fundamentals-of-Sound-How-to-Make-Music-out-of-Not

WAV文件的格式:
  WAV文件,由WAV文件头和音频采样数据组成。
  由文件头可以得知该文件的音频采样数据的相关信息(声道数,采样率,采样数据的位数等)  声道数最多2个声道,2个声道也就是立体声。
  得到文件头信息后,把采样数对应坐标画上去即可。

format.wFormatTag       =WAVE_FORMAT_PCM;   //格式为PCM  

format.nChannels        =1;                 //单声道,2是立体声 

format.nSamplesPerSec   =11025;             //采样率 

format.nAvgBytesPerSec  =11025;         //数据率

format.nBlockAlign      =1;                 //每样点的字节数 

format.wBitsPerSample   =8;             //采样精度

format.cbSize           =0; 




WAV档案格式
偏移量 
位元组 
资料
0000
4
「RIFF」
0004
4
波形块的大小(档案大小减8)
0008
4
「WAVE」
000C
4
「fmt 」
0010
4
格式块的大小(16位元组)
0014
2
wf.wFormatTag = WAVE_FORMAT_PCM = 1
0016
2
wf.nChannels
0018
4
wf.nSamplesPerSec
001C
4
wf.nAvgBytesPerSec
0020
2
wf.nBlockAlign
0022
2
wf.wBitsPerSample
0024
4
「data」
0028
4
波形资料的大小
002C
波形资料
这是一种扩充自RIFF(Resource Interchange File Format:资源交换档案格式)的格式。RIFF是用於多媒体资料档案的万用格式,它是一种标记档案格式。在这种格式下,档案由资料「块」组成,而这些 资料块则由前面4个字元的ASCII名称和4位元组(32位元)的资料块大小来确认。资料块大小值不包括名称和大小所需要的8位元组。
波形声音档案以文字字串「RIFF」开始,用来标识这是一个RIFF档案。字串後面是一个32位元的资料块大小,表示档案其余部分的大小,或者是小於8位元组的档案大小。
资料块以文字字串「WAVE」开始,用来标识这是一个波形声音块,後面是文字字串「fmt」-注意用空白使之成为4字元的字串-用来标识包含 波形声音资料格式的子资料块。「fmt」字串的後面是格式资讯大小,这里是16位元组。格式资讯是WAVEFORMATEX结构的前16个位元组,或者, 像最初定义时一样,是包含WAVEFORMAT结构的PCMWAVEFORMAT结构。
格式资讯的後面是文字字串「data」,然後是32位元的资料大小,最後是波形资料本身。这些资料是按相同格式进行简单连结的样本,这与低阶 波形声音设备上所使用的格式相同。如果样本大小是8位元,或者更少,那么每个样本有1位元组用於单声道,或者有2位元组用於立体声。如果样本大小在9到 16位元之间,则每个样本就有2位元组用於单声道,或者4位元组用於立体声。对於立体声波形资料,每个样本都由左值及其後面的右值组成。



用完设备之后,必须调用waveOutClose函数关闭波形输出设备,以便其他程序可以使用设备。


示波器中的波形图就是每个采样点对应的坐标点连起来的,这个坐标点可以是声音大小。就是每个采样的值,幅度。


在线音频格式转换

http://media.io/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值