1. 程式人生 > >windows下 利用CoreAudio,Libmad,和3D環繞音效原理實現的MP3播放器

windows下 利用CoreAudio,Libmad,和3D環繞音效原理實現的MP3播放器

      (博主qq,1204802552,歡迎交流)

之前公司的專案用到了CoreAudio API,這是windows下一套全新的用於開發音訊應用程式的API,之前我也寫過相關的部落格

     後來有一段時間,我迷上了3D環繞音效的音樂,也就是大家熟知的Echo回聲裡面比較有特色的一些音樂

     至於Echo回聲裡面的3D音樂是如何製作的,我不是很清楚,但是他們的音樂效果還是很好的,博主很喜歡。

     唯一的限制就是,個人好像並不能使用Echo來製作3D音樂(不知道現在有沒有這個功能了),也就是說,除了一些特定的曲目我們可以享受到3D音效外,其他的音樂就是普通的音效,對於喜愛聽歌的我來說,有些無法忍受,於是乎。。。。。

     我突然有個想法:自己寫個程式,來實現3D音樂播放器的效果,這樣的話,不管是什麼音樂,只要通過我這個播放器,就可以聽到3D環繞的效果,想想還是很棒的偷笑

    說做就做,大概思路就是:

    1. 讀取並解碼MP3檔案(用Libmad實現,當然也有其他的開源庫可以使用)

    2. 利用3D環繞音效的原理,處理解碼MP3檔案得到的PCM資料

    3. 將經過處理後的PCM資料,壓入音訊緩衝區進行播放

然後就是逐步完成工作

    第一步很簡單,如果是使用Libmad來做,我們只要參照他自帶的源程式就可以了,或者網上找找例子;需要注意的是,libmad輸出的是整型數,而後我們處理時是需要浮點型的,需要做好資料之間的轉換,直接強制轉換型別是會有很大問題滴

   第二步,做3d音效處理,原理在我的前一篇部落格有,大家可以看看

   第三步,就是播放了,怎麼播放,在我前面的部落格裡有說到,怎麼使用CoreAudio API 開發應用

   有個問題需要注意:解碼的速度是非常快的,幾秒鐘就可以完成工作;如果加入3D音效環繞處理後,解碼+處理的時間會變長,但總時長也只在10秒左右,跟MP3的幾分鐘的播放時間相比,已經很短了

   如果採用邊解碼邊播放的形式,勢必會影響解碼的整體速度,我採用的是緩衝檔案方式,將解碼處理後的資料儲存在一個檔案中,解碼完成後再從檔案中讀取需要播放的資料

   目前播放器的基本功能已經完成,效果還不錯的,想聽什麼歌的環繞效果都可以大笑

相關推薦

windows 利用CoreAudioLibmad3D環繞音效原理實現MP3播放

      (博主qq,1204802552,歡迎交流) 之前公司的專案用到了CoreAudio API,這是windows下一套全新的用於開發音訊應用程式的API,之前我也寫過相關的部落格      後來有一段時間,我迷上了3D環繞音效的音樂,也就是大家熟知的Echo回聲

WindowsPython安裝numpy+mklScipystatsmodels

log gif csdn 沒有 解決 static 改名 分享 最終 最近做時間序列分析需要用到Python中的statsmodels,但是安裝過程中遇到很頭疼的問題,Google、Stackover各種都沒有找到合適的解決辦法,而且貌似還有很多同學也在吐槽Windows下

Windows編譯eXosip、osip以及UACUAS的例子

osip2.dll osipparser2.lib osipparser2.dll 第三步,解壓,編譯eXosip 進入libeXosip2-3.6.0\platform\vsnet目錄,用VS2010直接開啟eXosip.sln檔案,專案自動轉換: 1.將osip2.lib,osip2

linux路徑分隔符'/'與windows的分隔符'\'以及java項目web項目讀取項目的路徑

oid ont resource light ros ren -i microsoft 配置文件 1, linux下的文件分隔符是‘/‘, windows下的文件分隔符為‘\‘。但是‘\‘這個符號是轉義符。如果需要在console輸出‘\‘這個符號的,你需要輸入‘\\‘。另

windows安裝python的numpyscipysklearn

推斷 bsp 計算機 ins rip 圖片 success 64位 ima 前提環境(根據自己所安裝的為準): python3.7 windows10 首先,要先下載好這三種包下載地址為 https://www.lfd.uci.edu/~gohlke/pythonlibs

windowsidea編寫WordCount程式並打jar包上傳到hadoop叢集執行(傻瓜版)

通常會在IDE中編制程式,然後打成jar包,然後提交到叢集,最常用的是建立一個Maven專案,利用Maven來管理jar包的依賴。 一、生成WordCount的jar包 1. 開啟IDEA,File→New→Project→Maven→Next→填寫Groupld和Artifactld→Ne

windows 關於檔案被佔用如何清理問題

有時候我們在刪除或者替換檔案時,系統會提示檔案被佔用 可是我們找了半天也沒有找到在什麼地方開啟,此時我們該怎麼辦呢? 1.開啟“工作管理員” 2. 在效能”選項卡里,點選“開啟資源監視器” 3.在開啟的資源監視器中,下方的關聯的控制代碼的搜尋框裡,搜尋被佔用的檔名,然後根據列表裡搜尋出來的

Windowsvagrant建立VirtualBox後運用SecureCRT執行rzsz命令上傳下載檔案

最近因為學習的需要,第一次接觸了vagrant。因為是Windows環境,所以通過cmd中以進去之後,也無法複製黏貼。 rz,sz便是Linux/Unix同Windows進行ZModem檔案傳輸的命令列工具。 windows端需要支援ZModem的telnet/

RabbitMQ的學習(一):Windows安裝及配置RabbitMQerlang環境變數

前言:從本章開始,慢慢去了解並深化架構師成長路上所需要的基礎框架:訊息中介軟體; 從這裡開始,會一直往下學習,從what to do到how to do 到why to do。先學會如何使用中介軟體,到後面慢慢去體會中介軟體原理及精髓,然後到最後自己再搭建一個簡單的中介軟體框架。這是該分類的

Windows安裝Matplotlib的教程及常見問題彙總

Matplotlib python3是一款視覺化繪圖工具工具,其在Windows下的安裝過程如下: (1)在Matplotlib的官網下載電腦對應的版本,網址為:https://pypi.org/project/matplotlib/#files。 (2)將在下

WindowsTensorflow-GPU的安裝Tensorboard的使用以及過程中遇到的各種坑

1、安裝Anaconda Anaconda 4.3.1 (Python 3.6) 下載頁:https://www.continuum.io/downloads 安裝後,如果conda下載包的速度很慢,可以執行下面的命令設定國內映象 conda con

windows本地連線MYSQL資料庫報1130錯誤的解決方法

原連結重灌MySQL,由於不知道重灌之前的root密碼,使用重灌之後的密碼連線Mysql資料,總報 ERROR 1130: host 'localhost' not allowed to connect to this MySQLserver,不能連線資料庫,猜測使用者許可權

本人64位windows安裝最新版XGBoost附操作步驟圖

    最新更新的XGBoost與老版安裝方式不再一樣,具體安裝步驟如下: 1、 材料 系統:win7 64位 sp5 (win7、win10親測都可以) 下載安裝cmake: 下載安裝VS2013 sp5 安裝git,安裝Anaconda,百度就有 2、安裝步驟 開

Windows caffe編譯好檔案帶例子

執行Lenet 首先,配置環境變數,.\caffe-master\Build\x64\Release 例子在解壓包裡的 caffe-master/examples/mnist//train_lenet .bat 對應的mnist資料已轉換好,配置好環境即可執行

windows關閉指定埠服務解決tomcat端口占用問題

<iframe id="cproIframe_595135_2" width="250" height="250" src="http://cb.baidu.com/ecom?adn=3&amp;at=231&amp;aurl=&amp;cad=1&amp;ccd=24

windows使用pycharm寫程式碼遠端連線linux 的資料庫

點選設定的按鈕,選擇show all   點選+號 選中SSH Interpreter,填寫伺服器地址,使用者名稱   點選next,填寫密碼   點選next,填寫linux伺服器的python路徑和專案在linux伺服器的儲存路徑   點選fi

Windows安裝gcc與gdb實現code blocks配置第一步

Windows下安裝gcc與gdb,實現code blocks配置 2.下載 3.按提示一步步點下來,當Browers時一定要記住這個檔案所在的位置。 4.進入介面,選中mingw32-gcc-g++(注意class屬性一定要為bin)此行,然後右擊make for

windows利用python 2.7獲取電腦上所有的wifi名稱密碼

# -*- coding: UTF-8 -*- import os import sys reload(sys) sys.setdefaultencoding('utf-8') # 定義一個函式checkWIFI,獲取電腦連線過的所有wifi名稱和密碼,結果以列表形式返回

Windows使用vim編寫程式碼使用nmake編譯程式碼使用vs來除錯程式碼

1、編寫程式碼 2、編寫Makefile,如果要除錯,   2.1、需要在編譯的時候加上/Zi ( Generates complete debugging information),編譯由cl.exe來完成   2.2、需要在連結選項中指定/DEBUG,(The /DEBUG option creates

windows利用IIS搭建webftp服務以及防火牆配置

第一步:找到程式與功能裡面的啟動或關閉windows功能。選擇如下圖:第二步:點選計算機管理,選擇IIS。將底下預設的Default web site網站關閉。然後右擊網站,新建一個網站,填寫如下資訊。網站名稱隨便自己起,網站根目錄自己選擇一個資料夾。協議如何你的網站網站得到