问题描述:
在MATLAB中
用以下代码可以发出一个拨号声,
n = 1 : 999
d5(n) = sin(0.5906n) + sin(1.0245n)
sound(d5, 8192)
但如果我想把一个声音输出为了一个WAVE文件的话,应该怎么做,请高手指点
解析:
for n = 1 : 999
d5(n) = sin(0.5906*n) + sin(1.0245*n)
end
sound(d5, 8192)
d6=d5/2%avoid to be clipped
wavwrite(d6,8192,16,'d5.wav')
首先要理解wav和midi的本质区别:wav及绝大多数音频文件(包括MP3,flac,ape,ogg,aac等等),其内容是对声音波形的描述,所以他们之间互相转换要相对容易一些。midi文件的内容的是指令,像乐谱,也就是“在哪个时间,指定哪种乐器,发出怎样的声音”。不包含对声音波形的描述。而真正发音的是合成器(硬件或软件的)。所以即使是演奏同一本乐谱,不同合成器(不同乐团)演奏出来的效果也不一样。为什么wav转midi效果很不好?不知道楼主了不了解“扒谱”这个技能?玩乐队玩编曲的人都要有这个技能,但真正扒明白是相当相当难的。“扒谱”就是把一首曲子里用到的乐器,以及他们的演奏,完完全全地依原样给记下谱子。打个常见比喻,就好像咱们仔细品尝一道大菜,然后精确说出里边用了多少油盐酱醋一样,很难很难的。咱们人来扒谱,首先就是感觉声音里包含了多少种乐器(乐器特征识别),然后紧跟住某种乐器的声音,听出它的谱子并记下来(抓住乐器特征而识别音高和时值等)。很多时候乐器的声音会互相掩盖,让人很难分辨出旋律。软件算法做这个事情也是一样,甚至还没有人做得更好。因为人还是有经验的,可以根据某些乐器和声音的特点而“猜”出音符,但计算机没有这个本领的。
综上所述,wav转midi效果很不好的,还不如自己训练扒谱技能,自己动手丰衣足食。如果原音频是单独乐器,转化效果能好一些。但注意,计算机是区分不出拍节的,所以……还是自己扒谱吧……
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)