我移植一些C#的Windows Phone 7個應用到Windows 8的打從生成的緩衝聲音在Windows 8應用
的手機應用程序使用XNA SoundEffect從緩衝播放任意聲音。在最簡單的情況下,我只是創建一個所需持續時間和頻率的正弦波。持續時間和頻率都會有很大的不同,所以我不想依賴MediaElements(除非有一些方法可以改變基本文件的頻率,但這隻會幫助我進行單頻生成)。
WinRT中的XNA SoundEffectInstance等效於什麼?
我認爲我需要爲此使用DirectX,但我不確定如何從其他C#/ XAML應用程序去解決此問題。我看過SharpDX,但它似乎沒有我認爲需要使用的DirectSound,SecondaryBuffer,SecondaryBuffer類。
我已經做了上面的一些假設。這可能是我正在尋找錯誤的類,或者有一種完全獨立的方式來從Windows 8應用程序生成任意聲音。
我發現an example using XAudio2 from SharpDX to play a wav file via an AudioBuffer。這似乎很有希望,我只需要將我生成的音頻緩衝區替換爲本地文件流。
PM>安裝,包裝SharpDX
PM>安裝,包裝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();
}
我要尋找一個解決方案,我應該能夠從緩衝的音頻數據包的Windows Phone 8直接播放音頻?你可以重定向到一個工作的例子。 – sunder