一部のC#WindowsPhone7アプリをWindows8に移植しています。
電話アプリは、XNA SoundEffectを使用して、バッファーから任意のサウンドを再生しました。最も単純なケースでは、必要な持続時間と周波数の正弦波を作成するだけです。継続時間と頻度の両方が大きく異なる可能性があるため、MediaElementsに依存しないことをお勧めします(ベースファイルの頻度をシフトする方法がない限り、それは単一の頻度の生成にのみ役立ちます)。
WinRTのXNASoundEffectInstanceに相当するものは何ですか?
これにはDirectXを使用する必要があると思いますが、それ以外の場合はC#/XAMLアプリからこれを実行する方法がわかりません。SharpDXを見てきましたが、使用する必要があると思われるDirectSound、SecondaryBuffer、SecondaryBufferクラスがないようです。
私は上記のいくつかの仮定をしました。間違ったクラスを探しているか、Windows8アプリから任意のサウンドを生成するまったく別の方法がある可能性があります。
SharpDXのXAudio2を使用してAudioBuffer経由でwavファイルを再生する例を見つけました。これは有望なようです。生成されたオーディオバッファをネイティブファイルストリームに置き換える必要があります。
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();
}