首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WP7 SoundEffect卷减少

WP7 SoundEffect卷减少
EN

Stack Overflow用户
提问于 2011-09-08 12:23:59
回答 2查看 500关注 0票数 0

我搞不懂这件事。如果我点击一个文本框,它会设置一个计时器,每分钟触发x次。计时器似乎工作得很好,但每分钟的循环次数越低,声音影响播放的音量就越小。我一定不理解XNA框架是如何工作的。

代码语言:javascript
复制
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();
    }
}
EN

回答 2

Stack Overflow用户

发布于 2011-09-09 07:28:29

您确定这里没有其他问题吗?当节拍出现的频率更高时,会不会是重叠的节拍造成了响亮的印象呢?

我在一个快速的XNA项目中重新创建了几乎与上面完全相同的代码,并且没有遇到响度问题。很明显,我没有使用相同的音频样本。

票数 0
EN

Stack Overflow用户

发布于 2011-09-10 20:04:33

您可能希望尝试将该Stream读数移出到初始化的某个位置。在应用程序加载期间将音效内容存储到SoundEffect变量中,然后在MetronomeTick期间对此变量调用Play()。

根据您的需要,另一种方法是只存储一个SoundEffectInstance变量,然后在加载时加载它,如下所示:

代码语言:javascript
复制
using (System.IO.Stream strWAV = TitleContainer.OpenStream("wav/Beat.wav"))
{
    SoundEffect effect = SoundEffect.FromStream(strWAV);
    soundInstance = effect.CreateInstance();
}

要播放它,只需在SoundEffectInstance对象上调用Play()。

当然,因为您只保留一个实例,所以其中两个声音永远不会重叠(不确定您想要什么)。无论哪种方式,如果这个问题仍然存在,都值得一试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7343092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档