文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-29 17:13

关注

这篇文章主要介绍“C#中如何使用DirectX.DirectSound播放语音”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#中如何使用DirectX.DirectSound播放语音”文章能帮助大家解决问题。

DirectX.DirectSound的特点

可同时播放多条语音

可分左右声道进行播放

可随时释放正在播放的语音

此组件处理流程:

创建播放线程

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();        }

释放播放线程

public void StopDirectXSoundThread(){  IsStart = false; }

判断是否播放中,通过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;        }

播放音频

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播放语音

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

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

定义

/// <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播放语音”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯