使用DirectX播放wav声音文件
1.? ? 使用 DirectX ,主要用到?MicroSoft.DirectX.dll 和 Microsoft.Directx.DirectSound.dll。
? ? ? ? a. 可以下載安裝DirectX,下載地址https://www.microsoft.com/en-us/download/details.aspx?id=6812
? ? ? ? ? ? ?然后添加引用MicroSoft.DirectX.dll和Microsoft.Directx.DirectSound.dll。
? ? ? ? b. 也可以直接下載dll文件,下載地址https://www.dllme.com/dll/download/7588/Microsoft.DirectX.dll
2.? ? 安裝DirectX SDK時,無法安裝成功,遇到 Error Code : S1023,? 打開文件 C:\Users\用戶名\AppData\Local\Temp\Microsoft Visual C++ 2010? x86? ? ? ? ? ? ?Redistributable .html
? ? ? ? ??
? ? ?也就是說: VS已經安裝了更高版本的Microsoft Visual C++ 2010 Redistributable ,所以導致無法成功安裝DirectX SDK,在控制面板中卸載高版本的 這個文件,重新安裝directX SDK 即可。
3.? ? 安裝完成后,新建一個winform項目,添加引用MicroSoft.DirectX.dll 和 Microsoft.Directx.DirectSound.dll, 卻無法找到這個兩個dll文件, 實際上這? 兩? 個dll文件不在安裝目錄下。在C:\Windows\Microsoft.NET\DirectX for Managed Code\? ..文件下可以找到各個版本的DirectX.dll? ??
? ? ? ? ?
? ? ? ? ??
將這兩文件添加引用即可。
?4? ?開始寫代碼
? ? ? ? ? (1).引入DirectX 的DLL文件的名字空間:
| using Microsoft.DirectX; using Microsoft.DirectX.DirectSound; |
(2)建立設備。在Microsoft.DirectX.DirectSound空間中,有個Device的類。這個是表示系統中的聲音設備。
| Device dev=new Device(); |
(3).設置CooperativeLevel。因為windows是多任務的系統,設備不是獨占的,所以在使用設備前要為這個設備設置CooperativeLevel。調用Device的SetCooperativeLevel方法:其中,第一個參數是一個Control,可以用this代替,第二個參數是個枚舉類型,設置優先級。 ? ? ? ??
| dev.SetCooperativeLevel(this,CooperativeLevel.Normal); |
(4).開辟緩沖區。系統中,一個設備有唯一的主緩沖區。由于windows是多任務,所以可以有幾個程序同時利用一個設備播放聲音,所以每個程序都自己開辟一個二級緩沖區,播放自己的聲音。
系統根據各個程序的優先級別,按照相應的順序分別去各個二級緩沖區中讀取內容到主緩沖區中播放。
其中,第一個參數表示(要播放的.wav)文件名,第二個就是需要使用的設備。
| SecondaryBuffer buf=new SecondaryBuffer("hello.wav",dv); |
(5).接下來就可以播放啦。第一個參數表示優先級別,0是最低的。第2個參數是播放方式,這里是循環播放。
| buf.Play(0,BufferPlayFlags.Looping); |
代碼完成,可以編譯運行了。
? 5.? ? ?運行項目時,debug模式下報出異常?
? ? ? ?Mixed mode assembly is built against version 'v1.1.4322' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.
解決方案:
? ? ? ? https://stackoverflow.com/questions/14508627/mixed-mode-assembly-is-built-against-version-2-0-50727-of-the-runtime-and-cann
項目--->右鍵------>add new Item----->App config file? 即添加App.config文件,文件中輸入下面內容。
<?xml version="1.0" encoding="utf-8" ?>?
<configuration>?
? <startup useLegacyV2RuntimeActivationPolicy="true">?
? ? <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>?
? </startup>?
</configuration>?
??
? 再次運行項目,就可以聽到.wav文件播放出的聲音了
代碼如下
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Microsoft.DirectX; using Microsoft.DirectX.DirectSound; namespace directXTest {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){Device dev = new Device();//系統中的聲音設備。dev.SetCooperativeLevel(this, CooperativeLevel.Normal);// 設置設備優先級。SecondaryBuffer buf = new SecondaryBuffer("music.wav", dev);//wav文件可以放在debug文件下。buf.Play(0, BufferPlayFlags.Looping);}} }
? ?
總結
以上是生活随笔為你收集整理的使用DirectX播放wav声音文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle存储过程实例带参数,orac
- 下一篇: 政府信息化与电子政务