1

最初に、私は私の問題に関連するすべてのトピックをここで、stackoverflow で読んだ (そしてもちろんググった) と言いたいのですが、それらの研究は私の問題に対する解決策を提供しませんでした。私は Windows Phone 用のアプリを作成しており、2 つのサウンドを同時に再生する必要がありますが、このコードは機能しません。これは、2 つのサウンドの間にわずかではあるが顕著な違いがあり、プロジェクトに知覚できるほどの遅延があってはならないためです。

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

2 つの wav ファイルの単純なミックスも実行しようとしましたが、理由がわかりません。(ArgumentException - 指定されたストリームに有効な PCM モノラルまたはステレオ Wave データが含まれていることを確認してください。 - 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));

では、同時に2つの音を鳴らす方法を知っている人はいますか?

4

1 に答える 1

0

したがって、最初のソリューションは機能する必要があります。私が知っているひねりを加えた非常によく似た別のソリューションがあります。

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();
}

2 番目の解決策が機能しなかった理由は、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

このコードが機能しないという以下のコメントに応えて、このコードを実装した動作する公開アプリもブログに投稿しました。これはシロフォンと呼ばれ、無料で、ページの下部からコードをダウンロードできます。

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

于 2013-10-29T01:18:30.287 に答える