關鍵字: vb.net directsound9 播放器 均衡器 作者:董含君
轉載請注明來自:http://blog.csdn.net/a11s
發現最近發帖有點上癮,這個估計真的是最后一篇關于directsound的文章了.用vb做播放器--估計又是我填補國內空白了.呵呵開玩笑.用mediaplayer做播放器的不要看不起我哦...現在來寫一下均衡器.必要知識是示波器,如果沒有示波器的知識來做均衡器估計比較困難.這個是連接
http://blog.csdn.net/a11s/archive/2005/03/07/313672.aspx
依舊是拿winamp來分析
中間的那個就是均衡器(這個圖沒有截好,而且這個blog居然不能刪除上傳的圖像,我暈)
上面的1k 3k 6k ...都是可以調整的.
根據上一篇文章的說明,就是修改播放的buffer
1 primarybuffer 這里面是directsound的最終播放緩沖,通常說來,你不需要修改他的內容,包括sdk的例子也沒有涉及到primarybuffer的操作.包括寫入,鎖定,播放 三個部分.更加詳細的資料只能參照c++的資料的,全部都是英文的.不要指望我來翻譯,我怕挨罵.
2 針對當時示波器的方案,應用到均衡器.就是將某一段的音量進行調整.這個"段"可以映射到riff的數據塊,也就是播放前就修改了primary的數據,然后lock ,最后play
3 最重要的還是這個"范圍"的定義.由于我對聲學了解幾乎為0.但是相信winamp這么劃分時有道理的.你仔細看均衡器的上面有一條曲線.他的放大并不是大起大落,而是平滑的,這樣你的eq函數跟示波器的繪制函數一樣,應該是連續的效果才會比較好
4 多種聲音的加載.
這個在示波器沒有多說,主要是為了拿到均衡器這邊來.
既然知道均衡器最終的實質是修改primarybuffer,那么你應該很容易就聯想到怎么加載mp3 或者 wma了
最"經典"的辦法,自己讀mp3文件,然后轉化成響應的riff,寫primarybuffer,最后play
流行的辦法,利用現有的插件,com對象.沒有發現么,directshow支持的文件格式基本上就包含了mediaplayer的文件格式,很多播放器都是這樣.基本上都是為windows media player做插件.realone也有自己的update 站點升級插件,winamp的插件也很多.他們的功能就是將目標文件專成riff然后給源程序播放.
5 播放器的播放環節
5.1 初始化
5.2 打開文件
5.3 找合適的插件讀取文件內容,變成riff
5.4 找合適的插件進行示波
5.5 找合適的插件進行eq調整
5.6 找合適的插件進行輸出(這里我們用directsound)
5.7 播放進行時,處理各種時間以及做好節目列表
5.8 ....
可見,里面插件擔當了非常重要的技術,而且不是一個人能夠做的來的.
視頻操作更是如此.
但是都是利用了一個同一的標準,然后大家具體實現其中的內容.
6 說了這么多,是不是對插件感興趣?這個你可以直接用.但是需要到winamp的官方查看他的示例代碼.當年豪杰曾經也出過演示程序,c++的.然后既然知道了接口,你就應該能夠制作出這樣的程序來適應他的插件.
相關技術主要還是經典的dll的動態加載問題,c# 以及 vb.net j# 都辦不到.建議還是看c++或者delphi吧.雖說安裝插件的vb6也能做到.....
估計這塊已經沒有什么可以再值得研究的了,或者說也不是一個人能夠做到的了.僅僅了解一下就可以了.如果真的認真做,需要耗費的時間跟精力是難以估量的.或者你去做個forlinux的也許還能有前途,這個就不是我要討論的問題了
=============end===============