最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用DirectX.DirectSound播放語(yǔ)音

 更新時(shí)間:2022年03月27日 08:11:40   作者:程序猿evint  
這篇文章主要為大家詳細(xì)介紹了C#使用DirectX.DirectSound播放語(yǔ)音,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近在做項(xiàng)目時(shí),需要進(jìn)行音頻文件的即時(shí)播放,并且要求同時(shí)播放多條語(yǔ)音,之前C#程序中語(yǔ)音播放一直使用System.Media類庫(kù)的SoundPlayer類進(jìn)行播放,但是這個(gè)播放類有個(gè)弊端,就是在播放時(shí)不能搶占式播放語(yǔ)音,經(jīng)過(guò)查找資料DirectX.DirectSound可同時(shí)播放多條語(yǔ)音。

DirectX.DirectSound的特點(diǎn)

1、可同時(shí)播放多條語(yǔ)音

2、可分左右聲道進(jìn)行播放

3、可隨時(shí)釋放正在播放的語(yǔ)音

此組件處理流程:

1、創(chuàng)建播放線程

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、判斷是否播放中,通過(guò)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("無(wú)" + _wavpath + "文件!");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? secDev.SetCooperativeLevel(control, CooperativeLevel.Normal);
? ? ? ? ? ? ? ? ? ? BufferDescription buffdes = new BufferDescription()
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? GlobalFocus = true
? ? ? ? ? ? ? ? ? ? };
? ? ? ? ? ? ? ? ? ? secBuffer = new SecondaryBuffer(_wavpath, buffdes, secDev);
? ? ? ? ? ? ? ? ? ? secBuffer.Play(0, BufferPlayFlags.Default);//設(shè)置緩沖區(qū)為默認(rèn)播放?
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? IsCreate = true;
? ? ? ? ? ? ? ? IsPlayVoice = false;
? ? ? ? ? ? }
? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? LogHelper.Debug(ex);
? ?  }
}

左右聲道通過(guò)secBuffer.Pan屬性進(jìn)行控制,值含義見(jiàn)下圖:

a、Center中心通道,左右通道同時(shí)播放,默認(rèn)值0

b、Right右通道,值10000

c、Right左通道,值-10000

5、清除播放中音頻 ,播放中的音頻可以通過(guò)Dispose()方法進(jìn)行釋放

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

6、定義

/// <summary>
/// 播放設(shè)備
/// </summary>
private Device secDev = new Device();
?
/// <summary>
/// 播放緩沖區(qū)
/// </summary>
private SecondaryBuffer secBuffer = null;
?
/// <summary>
/// 可視化組件
/// </summary>
private Control control;
?
/// <summary>
/// 是否被創(chuàng)建
/// </summary>
private bool IsCreate = false;

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Nopcommerce為商城添加滿XX減XX優(yōu)惠券功能

    使用Nopcommerce為商城添加滿XX減XX優(yōu)惠券功能

    中秋國(guó)慶節(jié)眼看到跟前了,很多商城都借此機(jī)會(huì)搞促銷活動(dòng),什么滿200減80送優(yōu)惠券等活動(dòng),基于后臺(tái)程序是怎么實(shí)現(xiàn)的呢?下面腳本之家小編帶領(lǐng)大家一起學(xué)習(xí)吧
    2015-09-09
  • C#線程間通信的異步機(jī)制

    C#線程間通信的異步機(jī)制

    這篇文章介紹了C#線程間通信的異步機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • Unity3D實(shí)現(xiàn)物體排成弧行

    Unity3D實(shí)現(xiàn)物體排成弧行

    這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)物體排成弧行,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C#進(jìn)度軸控件分享

    C#進(jìn)度軸控件分享

    這里給大家介紹的是使用C#實(shí)現(xiàn)的進(jìn)度軸的方法和示例,非常的實(shí)用,有需要的小伙伴可以參考下。
    2015-06-06
  • C#中構(gòu)造函數(shù)和析構(gòu)函數(shù)用法實(shí)例詳解

    C#中構(gòu)造函數(shù)和析構(gòu)函數(shù)用法實(shí)例詳解

    這篇文章主要介紹了C#中構(gòu)造函數(shù)和析構(gòu)函數(shù)用法,結(jié)合實(shí)例形式詳細(xì)分析了C#中構(gòu)造函數(shù)與析構(gòu)函數(shù)的原理、定義、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-06-06
  • C# 利用IRawPixels接口遍歷柵格數(shù)據(jù)

    C# 利用IRawPixels接口遍歷柵格數(shù)據(jù)

    本文主要介紹了利用IRawPixels接口遍歷柵格數(shù)據(jù)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • C#自定義RSA加密解密及RSA簽名和驗(yàn)證類實(shí)例

    C#自定義RSA加密解密及RSA簽名和驗(yàn)證類實(shí)例

    這篇文章主要介紹了C#自定義RSA加密解密及RSA簽名和驗(yàn)證類,實(shí)例分析了C#實(shí)現(xiàn)RSA加密解密及RSA簽名和驗(yàn)證的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • C#操作XML方法詳解

    C#操作XML方法詳解

    對(duì)于XML讀寫操作,項(xiàng)目中經(jīng)常要用到,之前木有好好總結(jié)過(guò),例如LINQ TO XML也用過(guò),這篇文章主要介紹了C#操作XML的方法
    2021-11-11
  • C# 中的 IReadOnlyDictionary 和 IReadOnlyList實(shí)例詳解

    C# 中的 IReadOnlyDictionary 和 IReadOnlyLis

    C# 中的IReadOnlyDictionary和IReadOnlyList是接口,用于表示只讀的字典和只讀的列表,這些接口提供了對(duì)集合的只讀訪問(wèn)權(quán)限,即不允許對(duì)集合進(jìn)行修改操作,這篇文章主要介紹了C# 中的 IReadOnlyDictionary 和 IReadOnlyList實(shí)例詳解,需要的朋友可以參考下
    2024-03-03
  • C#設(shè)置與獲取環(huán)境變量的方法詳解

    C#設(shè)置與獲取環(huán)境變量的方法詳解

    這篇文章主要給大家介紹了關(guān)于C#設(shè)置與獲取環(huán)境變量的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03

最新評(píng)論

明光市| 宜兰市| 绍兴县| 泌阳县| 巴林右旗| 伊春市| 师宗县| 青河县| 嘉黎县| 修文县| 海兴县| 长乐市| 侯马市| 张掖市| 商水县| 巴彦淖尔市| 日土县| 阿坝县| 卫辉市| 沽源县| 永川市| 江山市| 西宁市| 博湖县| 丰原市| 区。| 开原市| 宁夏| 永年县| 望城县| 宁陕县| 南京市| 阆中市| 巴东县| 育儿| 耒阳市| 奉新县| 普安县| 泗水县| 湛江市| 会泽县|