千家信息网

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

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章主要介绍"C#中如何使用DirectX.DirectSound播放语音"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"C#中如何使用DirectX.Di
千家信息网最后更新 2025年02月04日C#中如何使用DirectX.DirectSound播放语音

这篇文章主要介绍"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

5、清除播放中音频 ,播放中的音频可以通过Dispose()方法进行释放

public void ClearPlay()  {  if (secBuffer != null)   {    soundlist.Clear();    secBuffer.Dispose();    IsCreate = false;     }}

6、定义

/// /// 播放设备/// private Device secDev = new Device(); /// /// 播放缓冲区/// private SecondaryBuffer secBuffer = null; /// /// 可视化组件/// private Control control; /// /// 是否被创建/// private bool IsCreate = false;

关于"C#中如何使用DirectX.DirectSound播放语音"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

0