Reproduzindo um som de um buffer gerado em um aplicativo do Windows 8

Estou portando alguns aplicativos do C # Windows Phone 7 para o Windows 8.

Os aplicativos do telefone usaram um XNAEfeito sonoro para reproduzir sons arbitrários de um buffer. Nos casos mais simples, eu criaria uma onda senoidal da duração e da frequência necessárias. Tanto a duração quanto a frequência podem variar muito, então prefiro não confiar no MediaElements (a menos que haja alguma maneira de mudar a frequência de um arquivo base, mas isso só me ajudará com a geração de frequência única).

Qual é o equivalente de um XNA SoundEffectInstance no WinRT?

Eu suponho que precisarei usar o DirectX para isso, mas não tenho certeza de como fazer isso a partir de um aplicativo C # / XAML. Eu dei uma olhadaSharpDX, mas não parece ter as classes DirectSound, SecondaryBuffer, SecondaryBuffer que eu suponho que eu preciso usar.

Eu fiz uma série de suposições acima. Pode ser que eu esteja procurando as classes erradas ou há uma maneira completamente separada de gerar som arbitrário a partir de um aplicativo do Windows 8.

eu encontreium exemplo usando o XAudio2 da SharpDX para reproduzir um arquivo wav por meio de um AudioBuffer. Isso parece promissor, basta substituir meu buffer de áudio gerado pelo fluxo de arquivo nativo.

PM> Instalar o pacote SharpDX

PM> Instalar o pacote SharpDX.XAudio2

    public void PlaySound()
    {
        XAudio2 xaudio;
        MasteringVoice masteringVoice;

        xaudio = new XAudio2();
        masteringVoice = new MasteringVoice(xaudio);

        var nativefilestream = new NativeFileStream(
            @"Assets\SpeechOn.wav",
            NativeFileMode.Open,
            NativeFileAccess.Read,
            NativeFileShare.Read);

        var soundstream = new SoundStream(nativefilestream);


        var waveFormat = soundstream.Format;
        var buffer = new AudioBuffer
        {
            Stream = soundstream.ToDataStream(),
            AudioBytes = (int)soundstream.Length,
            Flags = BufferFlags.EndOfStream
        };

        var sourceVoice = new SourceVoice(xaudio, waveFormat, true);

        // There is also support for shifting the frequency.
        sourceVoice.SetFrequencyRatio(0.5f);

        sourceVoice.SubmitSourceBuffer(buffer, soundstream.DecodedPacketsInfo);

        sourceVoice.Start();
    }

questionAnswers(2)

yourAnswerToTheQuestion