每個主要平臺都有許多API,可以讓您使用聲音。在Windows和Mac上,默認情況下由操作系統以及其他非標準應用程序棄用。
看看他的圖HERE,它對主要平臺上的許多主要聲音API有很好的分解。
除了每個具有本機聲音API的平臺之外,還有許多跨平臺API封裝了每個本地API工作的方式,以允許您編寫便攜式音頻軟件。
例如有:PortAudio這是一個衆所周知的C語言API 還有RtAudio這是聲音的C++ API,但它是有些較舊的C++風格在我看來,(沒有利用職位C++ 11功能)。
我目前正在研究我自己的更現代的C++ 11音頻API,可以找到HERE。目前,我的API是PortAudio的一個小型包裝器,可讓您以更現代的C++方式處理音頻。
請記住,您選擇的圖書館也將取決於您打算做什麼樣的音頻工作。上面列出的所有庫處理實時音頻處理,不處理音頻文件。如果您正在嘗試使用音頻文件,您可以使用libsndfile這是一個流行的開源聲音文件操作API。
從您的問題的上下文來看,它聽起來像您一直主要在遊戲開發相關環境中處理聲音。值得一提的是,在聲音層面上工作,到目前爲止,我所建議的大多數庫都將低於簡單地調用一個函數播放聲音文件的程度。
試圖回答OpenAl如何與操作系統交互的問題是閱讀OpenAL文檔時最好的答案。
我也建議尋找基本的數字音頻理論以及數字信號處理。任何一個主題都有免費的在線資源。
編輯:
在關於如何音頻API的工作......平均音頻API的工作方式關閉編程器和聲卡之間的抽象的幾層。通常,程序員會獲得一個以數組值存儲的音頻數據緩衝區。程序員將要求系統將用於回放的一組特定參數(採樣率,緩衝區大小,通道數量)。程序員將使用音頻數據完成他們的工作,並將輸出緩衝區交給api,後者最終將緩衝區數據交給專爲已安裝聲卡編寫的設備驅動程序。該聲卡的驅動程序將根據驅動程序所指定的平臺指定的接口實現。這就是爲什麼當你在一臺機器上安裝一個新的聲卡時,你可能需要爲它安裝驅動程序,通過安裝驅動程序來爲操作系統級api提供一種與設備通信的手段。
(還有很多更多的那張比,能夠容易地解釋,我敢肯定,我已經失去了在這個過程中的幾個步驟。但是,我希望應該是開始一個足夠好的解釋)
對於Linux來說,由於沒有一個單一的聲音API,所以回答有問題。 –
因此,在Linux中,庫如何與所有聲卡驅動程序連接? 而在Windows中,PlaySound是否被所有聲音庫用作基地? –
PlaySound是一個Windows API函數,可以讓您快速輕鬆地播放聲音。這是一種播放聲音的高層次手段,側重於便利而非深度功能。請參閱參考資料:https://msdn.microsoft.com/en-us/library/windows/desktop/dd743680(v=vs.85).aspx –