簡體   English   中英

System.Media.SoundPlayer選擇性播放

[英]System.Media.SoundPlayer Selective Playing

我有一個小型應用程序,目的是當用戶按下某個鍵時會發生一些事情

  1. 創建一個對象的新實例以記錄擊鍵
  2. 檢查字典,獲取System.Media.Soundplayer類的實例
  3. 修改屏幕上某個部分的背景色
  4. 在SoundPlayer中播放,異步播放.wav文件

加載表單時,將實例化Dictionary和SoundPlayer實例,並且所有SoundPlayer實例在添加到詞典之前都同步Load().wav文件。

表單的KeyDown事件如下所示:

//do stuff up here, get the type, etc etc
//players is Dictionary<EnumFoo, SoundPlayer>

SoundPlayer sound = players[type];
sound.Play();

this.KeyUp += (sUp, eUp) =>
{
    DateTime endTime = DateTime.Now;
    foo.Duration = endTime - startTime;
    sound.Stop();
    this.resetColors();
};

這是我的問題:它似乎只播放較短的聲音。 有些聲音的長度約為30秒,而有些聲音的長度小於5秒。如果在實例化SoundPlayer之后在任何地方放置一個斷點,那么即使長聲也可以正確播放。

我當時正在考慮使用ThreadPool並將項目排隊,但是該選項有其自己的一系列后果。

有任何想法嗎? 以前,我從來不需要弄亂任何媒體課程。

糟糕,才意識到為什么會這樣。 一個3步答案

  1. 一個糟糕的假設是,當我按住鍵時,僅觸發了一個KeyDown事件。 那是不准確的。 它將觸發多次。
  2. 有人給我指出了錯誤的音頻文件,該文件有一段安靜的時間來作為噪音的序幕。
  3. 漫長的一天和糟糕的測試。 代碼本身很好(至少,對於我需要的一次性應用程序是可行的),這對我而言只是一個糟糕的測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM