2011-09-08 78 views
0

我無法弄清楚這一點。如果我點擊一個文本框,它會設置一個定時器,每分鐘激發x次。計時器似乎工作正常,但每分鐘循環越低,聲音影響的音量越低。我不能理解XNA框架是如何工作的。WP7 SoundEffect音量減少

private System.Threading.Timer tmrMetronome_m; 

private void tbTempo_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    TextBlock tb = (TextBlock)sender; 
    int iBeatsPerMinute = int.Parse(tb.Text); 

    int iMS = 1000 * 60/iBeatsPerMinute; 

    if (this.tmrMetronome_m != null) 
    { 
     this.tmrMetronome_m.Change(new TimeSpan(0), new TimeSpan(0, 0, 0, 0, iMS)); 
    } 
    else 
    { 
     this.tmrMetronome_m = new System.Threading.Timer(MetronomeTick, null, new TimeSpan(0), new TimeSpan(0, 0, 0, 0, iMS)); 
    } 
} 

private void MetronomeTick(object state) 
{ 
    using (System.IO.Stream strWAV = TitleContainer.OpenStream("wav/Beat.wav")) 
    { 
     SoundEffect effect = SoundEffect.FromStream(strWAV); 
     FrameworkDispatcher.Update(); 
     effect.Play(); 
    } 
} 
+0

我終於購買了開發者許可證,並將softawre部署到了手機上。在物理設備上時沒有問題。在這一點上,似乎只有模擬器有這個問題。 – Jeremy

回答

0

你確定這裏沒有其他問題嗎?這些節拍可能會重疊,從而產生更頻繁出現的更響亮的印象?

我在一個快速的XNA項目中重新創建了上面的確切代碼,並沒有遇到響度問題。我當時並不明顯 - 使用相同的音頻樣本。

+0

我不認爲有重疊現象發生,因爲它們必須是完美的重疊 - 而且我在40到200之間的所有方面都會進行不同的測試,所以如果有重疊,他們大多會在大多數情況下不規則。該項目不會在其他地方使用xna或者播放任何其他聲音。我處於全面虧損狀態。 – Jeremy

+0

我終於購買了一個開發人員帳戶並部署到我的手機中。真正的手機沒有問題。我認爲這是模擬器的問題。 – Jeremy

0

您可能想嘗試將該流讀出移動到初始化位置。在應用程序加載時間內將音效內容存儲到SoundEffect變量中,然後在MetronomeTick中對此變量調用Play()。

根據您想要的,另一種是隻存儲SoundEffectInstance變量,然後加載過程中,加載它,像這樣:

using (System.IO.Stream strWAV = TitleContainer.OpenStream("wav/Beat.wav")) 
{ 
    SoundEffect effect = SoundEffect.FromStream(strWAV); 
    soundInstance = effect.CreateInstance(); 
} 

要在SoundEffectInstance玩的話,只需要調用播放()目的。

當然,因爲你只保留一個實例,所以這些聲音中的兩個永遠不會重疊(不確定你想要什麼)。無論哪種方式,如果這個問題仍然存在,值得嘗試。