作者StubbornLin (Victor)
看板C_and_CPP
标题Re: [问题] 新手想询问关於处理声音(音乐)的工具书
时间Thu Feb 5 15:44:01 2009
※ 引述《sp012336 (^^)》之铭言:
: 因为那太过於进阶(Maybe未来会用到)
: 而我只需要能够处理
: 将一首mp3/wav/midi档格式的音乐透过程式读取进阵列中
: 以做後续的处理
: 但在市面上看到的都找不到相关的工具书
: 所以想在此询问大大是否有哪间书商或是作者有出过类似的工具书
: 恳请大大们帮忙
: 小弟我对您感激不尽
我最近刚好在写相关的程式 不过我还没做什麽进阶的处理
这方面的东西资料相对比较难找 例如我想做软体混音
网路上找得到的混音 都是直接输出到音效卡的 没有能让你取得混合後音讯的
所以我找了半天没找到现成的可以用 就自己写一个软体混音的引擎
像读取音乐等等,因为实在太耗时间 格式太多种 想每种都自己写
会先发疯 於是我决定使用现成的函式库
最初我找到GStreamer,它是Open Source的类似DirectShow的串流处理程式库
可以跨平台,可是试了一阵子 发现编译等等麻烦问题会让我很头大
所以想说反正我的程式只在Windows下跑 跨平台没有必要
就改用DirectShow 所以它能播的音乐我都能抓
除此之外还有很多东西要写 让我最头大的是各种格式之间的转换
DirectShow的格式都是这样
121212121212.... 左声道右声道 也有单一声道的可能
每声道样本的长度好像也有可能会有8bits和16bits两种可能
而在混音时为了减少误差用的是float
我花了不少时间在想要怎样解决
最後我用样版 写了能够自动转换的iterator
想要存取某段audio使用float的话只要这样写
ConvertedAudio<float> audio(data);
就可以使用float存取 单声道也会被自动转换成双声道
其实除此之外我还发现另一个头痛的问题
就是取样的频率 44100是最常见的濒率
可是以Mp3而言 有44100和48000两种可能 我就有遇过48000的mp3
播起来速度会变很慢 因为我是用44100的速度来处理 = ="
这部份我还没去处理它 但其实不难 在ConvertedAudio里多加针对这部份的处理就可以
总而言之 音讯不好处理 很多格式令人觉得很烦= = 要先想办法统一
而效率又是另一个要处理的问题 我的应用需要即时性
所以效率很重要
--
哇咧咧 创意投票系统
http://walele.com
易记学 程式设计教学
http://ez2learn.com/
易记学 程式设计讨论区
http://forum.ez2learn.com
VICTOR's 个人Blog
http://blog.ez2learn.com/
财报分析王
http://victorlin.serveftp.org/stock/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.113.156.83