【问题标题】:Playing sounds simultaneously on windows phone在 windows phone 上同时播放声音
【发布时间】:2013-10-28 21:35:52
【问题描述】:

首先,我想说我已经在 stackoverflow 上阅读了与我的问题相关的所有主题(当然还有谷歌搜索),但这些研究没有为我的问题提供解决方案。 我正在为 Windows Phone 编写应用程序,我需要同时播放两种声音,但这段代码不起作用,因为两种声音之间存在轻微但明显的延迟,并且我的项目中必须没有明显的延迟。

Stream s1 = TitleContainer.OpenStream("C.wav");
Stream s2 = TitleContainer.OpenStream("C1.wav");
SoundEffectInstance sci = sc.CreateInstance();
SoundEffectInstance sci1 = sc1.CreateInstance();
sci.Play();
sci1.Play();

我也尝试过简单地混合两个 wav 文件,但由于我不知道的原因它不起作用。 (ArgumentException - 确保指定的流包含有效的 PCM 单声道或立体声波数据。 - 在调用 SoundEffect.FromStream(WAVEFile.Mix(s1, s2)) 时抛出;

    public static Stream Mix(Stream in1,Stream in2)
    {
        BinaryWriter bw;
        bw = new BinaryWriter(new MemoryStream());
        byte[] header = new byte[44];
        in1.Read(header, 0, 44);
        bw.Write(header);
        in2.Seek(44, SeekOrigin.Begin);
        BinaryReader r1 = new BinaryReader(in1);
        BinaryReader r2 = new BinaryReader(in2);
        while (in1.Position != in1.Length)
        {
            bw.Write((short)(r1.ReadInt16() + r2.ReadInt16()));
        }
        r1.Dispose();
        r2.Dispose();
        bw.BaseStream.Seek(0, SeekOrigin.Begin);
        return bw.BaseStream;
    }

Stream s1 = TitleContainer.OpenStream("C.wav");
Stream s2 = TitleContainer.OpenStream("C1.wav");
s3 = SoundEffect.FromStream(WAVEFile.Mix(s1, s2));

那么,有谁知道当时如何播放两种声音?

【问题讨论】:

标签: c# windows-phone-7 audio windows-phone-8


【解决方案1】:

所以您的第一个解决方案应该有效。我有另一个非常相似的解决方案,但我知道它可以工作。

static Stream stream1 = TitleContainer.OpenStream("soundeffect.wav");
static SoundEffect sfx = SoundEffect.FromStream(stream1);
static SoundEffectInstance soundEffect = sfx.CreateInstance();

public void playSound(){
    FrameworkDispatcher.Update();
    soundEffect.Play();
}

您的第二个解决方案不起作用的原因是因为 windows phone 可以播放非常特定的文件格式。

支持的格式列表

http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff462087(v=vs.105).aspx

此代码的参考是我的博客

http://www.anthonyrussell.info/postpage.php?name=60

编辑

您可以在这里看到上述解决方案

http://www.windowsphone.com/en-us/store/app/xylophone/fe4e0fed-1130-e011-854c-00237de2db9e

编辑#2

为了回应下面关于这段代码不起作用的评论,我还在我的博客上发布了一个工作的、已发布的应用程序,它实现了这段代码。它叫做 Xylophone,它是免费的,你可以在页面底部下载代码。

http://anthonyrussell.info/postpage.php?name=60

【讨论】:

  • 我已经设法让我的“混合”代码工作了,事实上,它的格式与我想象的不同。谢谢。
  • 我已经测试了你的代码,但它都不起作用;/似乎在单击按钮后混合两个 wav 文件会持续 2 秒。我将不得不想出一个如何更快地混合它的解决方案,也许多线程混合会有所帮助......
  • 您可以同时播放声音。 “混合”它们是非常低效的。我建议您尝试找出您哪里出错或为什么它不起作用。这段代码确实有效。我从上面发布的应用程序的解决方案中复制并粘贴了它......
  • 检查了您的应用程序(并稍作修改)并得出结论,它就像我的一样工作(错误):P 当我第一次按下按钮同时播放 2 个声音时,它们一个接一个地播放,当我第二次按下时,它们同时播放。可笑,我没有希望了,我不得不考虑快速混合。
  • @quirell 你是在模拟器上做的吗?如果你在手机上下载它,你可以清楚地看到,更重要的是听到他们同时播放两种声音。这并不复杂的解决方案实施,这是公认的做法。所以我不知道该怎么回答你的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
相关资源
最近更新 更多