导航
  • 全部
...

如何读写wav、mp3文件的音调(频率)

zoumengdiefly 2010-04-24 10:22:30
请高手支招,如何应用c语言和win32api读写wav、mp3文件的音调(频率)?注意不是采样频率。
...全文
给本帖投票
1206 37 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
看看 上面到底说了写什么
ych_chsh159357 2011-09-05
  • 打赏
  • 举报
回复
这个和码率有关系么?

xylsulala 2011-05-05
  • 打赏
  • 举报
回复
我使用的是linux系统,这个系统下提取mp3文件的音调和音长信息,应该怎么做?
zoumengdiefly 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 bottlebox 的回复:]
引用 31 楼 zoumengdiefly 的回复:
对了,还有一个问题,单纯的改变它们的实部和虚部值也只是改变了该频点的强度值吧,而该点的频率值并没有变啊

这个说法有问题吧,比如采样512个数据,fft变换后,对应到256个频点,每个频点对应多少频率值,由你的采样率决定,比如是44KHz的采样率,每个频点间隔为44000/256=171Hz,据此,你可以算出声音中2KHz频率的强度,由第……
[/Quote]
以我的理解,没错,2KHZ这个频率的强度是增大了,可是它的频率还是2KHz啊,如果声音中还有比它更小的频率,那么声音的总体频率可能会变大,问题是现在不知道一个声音中的基本频率有多少个,如果有很多个,又该如果定量的改变每个基本频率的强度,使得总体频率达到一个定量的值?
可能我没有理解清楚,希望你再提示提示?
如果能直接交流就更好了,我的QQ是875156226.你放心,我一定会给你应得的分的,不够的话我再加,反正分就是用来问问题的嘛.
尹成 2010-04-30
  • 打赏
  • 举报
回复
友情支持,三颗心关照,up~up~up~!!
瓶盒 2010-04-30
  • 打赏
  • 举报
回复
上面计算有误,44KHz的采样率,采样512个数据,fft变换后,得到到256个频点,每个频点间隔为(44000/2)/256=85.9375Hz。2KHz频率的强度,由第23和第24个频点的值确定(2000/85.9375=23.27);
44KHz的采样率只能获得其一半的频率强度。
瓶盒 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 zoumengdiefly 的回复:]
对了,还有一个问题,单纯的改变它们的实部和虚部值也只是改变了该频点的强度值吧,而该点的频率值并没有变啊
[/Quote]
这个说法有问题吧,比如采样512个数据,fft变换后,对应到256个频点,每个频点对应多少频率值,由你的采样率决定,比如是44KHz的采样率,每个频点间隔为44000/256=171Hz,据此,你可以算出声音中2KHz频率的强度,由第11和第12个频点的值确定,因而当你把这两个频点的值单独放大,也就把声音中2KHz的强度提高了。声音数据本来就是由不同的频率合成在一起的,每个频率都有强度值,各频率的大小值决定了声音的内容。
声音中的频率成分跨度应该是从0到无穷大Hz,只是采样率限制了你所能获得的各频率成分的强度,大于采样率二分之一的频率强度是无法正确计算的。
zoumengdiefly 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 bottlebox 的回复:]
实部和虚部是分量值。
真正理解傅里叶变化是困难的,我也还未吃透。
[/Quote]
对了,还有一个问题,单纯的改变它们的实部和虚部值也只是改变了该频点的强度值吧,而该点的频率值并没有变啊,当然,也可以只增加频率高的点的强度,这样就可以提高声音的频率了,但是这个难度似乎太大了吧?
瓶盒 2010-04-29
  • 打赏
  • 举报
回复
实部和虚部是分量值。
真正理解傅里叶变化是困难的,我也还未吃透。
zoumengdiefly 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 bottlebox 的回复:]
起作用的是模值,应该是实部和虚部都乘1.5.
[/Quote]
实部和虚部没有具体的物理含义吗?
qq614190370 2010-04-29
  • 打赏
  • 举报
回复
mark
瓶盒 2010-04-29
  • 打赏
  • 举报
回复
起作用的是模值,应该是实部和虚部都乘1.5.
zoumengdiefly 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 bottlebox 的回复:]
你是问改变频率的方法还是把频率改成什么值?
如果是前者,fft后就获得了各个频点的强度值,直接把值改大改小,也就改变了对应频点的强度,然后再FFT逆变换(也就是fft_double函数的参数p_bInverseTransform设为true),得到的数据就可以送声卡播放。
[/Quote]
我问的就是改变频率的方法.
我是这样想的FFT后得到的是个复数数组吧,复数的模才是该点的强度值,复数有实部和虚部,那应该改变哪部分呢?如果我想把频率改成原频率的1.5倍(具体倍数由多普勒效应公式决定),我应该怎么改变数值呢?
wgd123pl 2010-04-28
  • 打赏
  • 举报
回复
不错啊,
klkvc386 2010-04-28
  • 打赏
  • 举报
回复
UP..........
瓶盒 2010-04-28
  • 打赏
  • 举报
回复
你是问改变频率的方法还是把频率改成什么值?
如果是前者,fft后就获得了各个频点的强度值,直接把值改大改小,也就改变了对应频点的强度,然后再FFT逆变换(也就是fft_double函数的参数p_bInverseTransform设为true),得到的数据就可以送声卡播放。
zoumengdiefly 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 xianglitian 的回复:]

引用 16 楼 zoumengdiefly 的回复:
引用 15 楼 xianglitian 的回复:

引用 14 楼 zoumengdiefly 的回复:
引用 12 楼 bottlebox 的回复:

你只需要看下播放文件到画图的过程就行了,另外wave文件我没有解析,直接按44KHz双声道来处理的。下面是其流程图:


以我的理解,大致就是从声卡(或文件)中取得数据,放……
[/Quote]

嗯,谢谢,我也是在研究,就是不知道能不能研究出来,还有就是时间比较紧,所以还是希望知道的朋友能给点指导.
zoumengdiefly 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 wencheng2998 的回复:]

我建议你还是用DirectShow来弄把!
[/Quote]
谢谢你的建议,对于怎么操作wav和FFT我已经比较清楚了,我还是用这种方法先试试吧,不行的话到时再看看DerectShow吧.

不过对于怎么改变频率,还是没有眉目,有谁知道支支招啊!
lzjdlsl 2010-04-26
  • 打赏
  • 举报
回复
顶。。。。。。。。。。。。。。。关注
wencheng2998 2010-04-26
  • 打赏
  • 举报
回复
我建议你还是用DirectShow来弄把!
加载更多回复(17)

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部