2011-09-08 9 views
0

私はこれを理解することはできません。テキストボックスをクリックすると、1分間に何回も起動するタイマーが設定されます。タイマーはうまく動作しているようですが、1分あたりのサイクル数が少なくなると、影響を受ける音量が低くなります。 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

私は最終的に開発者ライセンスを購入し、そのソフトウェアを電話機に導入しました。物理デバイス上に問題はありません。この時点では、エミュレータだけがこの問題を抱えているように見えます。 – 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にオブジェクト。

もちろん、1つのインスタンスしか保持していないので、これらのサウンドのうち2つは重複しません(あなたが望むものが不明)。いずれにしても、この問題が依然として続く場合は試してみる価値があります。

関連する問題