sto porting qualche C# Windows Phone 7 le applicazioni verso Windows 8.Riproduzione di un suono da un buffer generato in un Windows 8 app
Le applicazioni del telefono utilizzato un XNA SoundEffect per riprodurre i suoni arbitrari da un buffer. Nei casi più semplici creerei solo un'onda sinusoidale della durata e della frequenza richieste. Sia la durata che la frequenza possono variare notevolmente, quindi preferirei non fare affidamento su MediaElements (a meno che non ci sia un qualche modo per spostare la frequenza di un file di base, ma questo mi aiuterà solo con la generazione a singola frequenza).
Qual è l'equivalente di XNA SoundEffectInstance in WinRT?
Suppongo che dovrò usare DirectX per questo, ma non sono sicuro di come farlo da un'altra app C#/XAML. Ho dato un'occhiata a SharpDX, ma non sembrava avere le classi DirectSound, SecondaryBuffer, SecondaryBuffer che presumo avrei bisogno di usare.
Ho fatto una serie di ipotesi sopra. Potrebbe essere che sto cercando le classi sbagliate o c'è un modo completamente separato per generare un suono arbitrario da un'app di Windows 8.
Ho trovato an example using XAudio2 from SharpDX to play a wav file via an AudioBuffer. Questo sembra promettente, dovrei solo sostituire il mio buffer audio generato per il flusso di file nativo.
PM> Installa-Package SharpDX
PM> Installa-Package 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();
}
Sto cercando una soluzione in cui dovrei essere in grado di riprodurre l'audio direttamente da pacchetti audio bufferizzati in Windows Phone 8? Puoi reindirizzare a un esempio funzionante. – sunder