您好,登錄后才能下訂單哦!
這篇文章主要介紹“C#中如何使用DirectX.DirectSound播放語音”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C#中如何使用DirectX.DirectSound播放語音”文章能幫助大家解決問題。
1、可同時播放多條語音
2、可分左右聲道進行播放
3、可隨時釋放正在播放的語音
此組件處理流程:
1、創建播放線程
public void StartDirectXSoundThread(Control _con) { IsStart = true; if (control == null) control = _con; Task task = new Task(() => { while (true) { try { if (!IsStart) break; if (!IsPlaying()) { if (soundlist.Count > 0) { if (!IsPlayVoice) { IsPlayVoice = true; control.Invoke((MethodInvoker)delegate { SoundPlay(soundlist[0]); soundlist.RemoveAt(0); }); } } } } catch (Exception ex) { LogHelper.Debug(ex); } finally { } Thread.Sleep(100); } }); task.Start(); }
2、釋放播放線程
public void StopDirectXSoundThread() { IsStart = false; }
3、判斷是否播放中,通過PlayPosition!=0和播放緩沖是否null的條件判斷是否播放
private bool IsPlaying() { bool Ret = false; try { if (IsCreate) { if (secBuffer != null) { if (secBuffer.PlayPosition != 0) { Ret = true; } } } } catch (Exception ex) { LogHelper.Debug(ex); } return Ret; }
4、播放音頻
public void SoundPlay(string _wavpath) { try { if (_wavpath.IndexOf("\\") < 0) { _wavpath = SoundPath + _wavpath; } if (_wavpath.IndexOf(".wav") < 0) { _wavpath += ".wav"; } if (!File.Exists(_wavpath)) { LogHelper.Info("無" + _wavpath + "文件!"); } else { secDev.SetCooperativeLevel(control, CooperativeLevel.Normal); BufferDescription buffdes = new BufferDescription() { GlobalFocus = true }; secBuffer = new SecondaryBuffer(_wavpath, buffdes, secDev); secBuffer.Play(0, BufferPlayFlags.Default);//設置緩沖區為默認播放 } IsCreate = true; IsPlayVoice = false; } catch (Exception ex) { LogHelper.Debug(ex); } }
左右聲道通過secBuffer.Pan屬性進行控制,值含義見下圖:
a、Center中心通道,左右通道同時播放,默認值0
b、Right右通道,值10000
c、Right左通道,值-10000
5、清除播放中音頻 ,播放中的音頻可以通過Dispose()方法進行釋放
public void ClearPlay() { if (secBuffer != null) { soundlist.Clear(); secBuffer.Dispose(); IsCreate = false; } }
6、定義
/// <summary> /// 播放設備 /// </summary> private Device secDev = new Device(); /// <summary> /// 播放緩沖區 /// </summary> private SecondaryBuffer secBuffer = null; /// <summary> /// 可視化組件 /// </summary> private Control control; /// <summary> /// 是否被創建 /// </summary> private bool IsCreate = false;
關于“C#中如何使用DirectX.DirectSound播放語音”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。