请高手支招,如何应用c语言和win32api读写wav、mp3文件的音调(频率)?注意不是采样频率。
解决方案 »
- VC6.0 链接问题、高手进
- MCI消息方式 如何控制 wav 播放速度 ?
- 如何调用后台EXE程序
- 使用GetWindowRect得到某个窗口的窗口坐标 问题。
- 刚开始学vc,提个小问题:
- 我在 ISAPI Filter 中无法 CoCreateInstance 一个 COM 对象
- XML与TreeCtrl
- 请问各位,为什么每次编译生成的EXE文件都在debug目录中?
- 一个外挂了很多dll的大project,能转化为一个acitvex控件吗?
- 堆区与进程控制块
- 中山大学和华南理工大学的软件工程系哪个比较好?
- 剪贴板远程拷贝IsClipboardFormatAvailable(CF_HDROP)问题
知道美国国家仪器么?
NI公司的LabWindows的函数库里有专业的信号分析工具
包括FFT、卷积、希尔伯特变换能
你可以考虑一下
至于读wav
这个网上很多例子吧
mp3转wav用Dshow要方便些,另外也有开源库。
http://download.csdn.net/source/800786
LabWindowsb就是一个基于C的开发平台
一般学通信的人都应该知道这个软件
至于你说的功能
只要能把波形换算到频域上就应该好解决了吧
以我的理解,大致就是从声卡(或文件)中取得数据,放入缓冲区,然后用FFT处理,得到频域,然后画出图是吗?
这样应该可以解决读取音调的问题,谢谢!现在还有一个问题是改变音调,并以改变后的音调播放文件,请问这个问题怎么办呢?
改变后再做一次FFT逆变换然后写回声卡不就行了
如果是前者,fft后就获得了各个频点的强度值,直接把值改大改小,也就改变了对应频点的强度,然后再FFT逆变换(也就是fft_double函数的参数p_bInverseTransform设为true),得到的数据就可以送声卡播放。
我是这样想的FFT后得到的是个复数数组吧,复数的模才是该点的强度值,复数有实部和虚部,那应该改变哪部分呢?如果我想把频率改成原频率的1.5倍(具体倍数由多普勒效应公式决定),我应该怎么改变数值呢?
声音中的频率成分跨度应该是从0到无穷大Hz,只是采样率限制了你所能获得的各频率成分的强度,大于采样率二分之一的频率强度是无法正确计算的。
44KHz的采样率只能获得其一半的频率强度。
可能我没有理解清楚,希望你再提示提示?
如果能直接交流就更好了,我的QQ是875156226.你放心,我一定会给你应得的分的,不够的话我再加,反正分就是用来问问题的嘛.