91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中如何使用DirectX.DirectSound播放語音

發布時間:2022-03-28 09:12:17 來源:億速云 閱讀:468 作者:iii 欄目:開發技術

這篇文章主要介紹“C#中如何使用DirectX.DirectSound播放語音”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C#中如何使用DirectX.DirectSound播放語音”文章能幫助大家解決問題。

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

C#中如何使用DirectX.DirectSound播放語音

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播放語音”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

肥城市| 永清县| 佛山市| 和政县| 闽侯县| 德州市| 泗水县| 罗山县| 宁安市| 买车| 富宁县| 绥阳县| 马山县| 扬中市| 平果县| 蒙城县| 花莲县| 柳江县| 抚远县| 广德县| 南靖县| 浮梁县| 嘉鱼县| 梁平县| 达州市| 东兴市| 临泽县| 墨竹工卡县| 山阳县| 曲麻莱县| 东丰县| 鄢陵县| 平泉县| 桃江县| 和龙市| 类乌齐县| 酒泉市| 青川县| 丰顺县| 沅江市| 修文县|