this maddeye dayanarak, aşağıda bende çalıştı: Kaynak IRandomAccessStream
oluşturulan bir otomatik olduğu için
public async Task<IRandomAccessStream> BeepBeep(int Amplitude, int Frequency, int Duration)
{
double A = ((Amplitude * (System.Math.Pow(2, 15)))/1000) - 1;
double DeltaFT = 2 * Math.PI * Frequency/44100.0;
int Samples = 441 * Duration/10;
int Bytes = Samples * 4;
int[] Hdr = { 0X46464952, 36 + Bytes, 0X45564157, 0X20746D66, 16, 0X20001, 44100, 176400, 0X100004, 0X61746164, Bytes };
InMemoryRandomAccessStream ims = new InMemoryRandomAccessStream();
IOutputStream outStream = ims.GetOutputStreamAt(0);
DataWriter dw = new DataWriter(outStream);
dw.ByteOrder = ByteOrder.LittleEndian;
for (int I = 0; I < Hdr.Length; I++)
{
dw.WriteInt32(Hdr[I]);
}
for (int T = 0; T < Samples; T++)
{
short Sample = System.Convert.ToInt16(A * Math.Sin(DeltaFT * T));
dw.WriteInt16(Sample);
dw.WriteInt16(Sample);
}
await dw.StoreAsync();
await outStream.FlushAsync();
return ims;
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
var beepStream = await BeepBeep(200, 3000, 250);
mediaElement1.SetSource(beepStream, string.Empty);
mediaElement1.Play();
}
O esnek, oynatma için MediaElement
kullanır ama.
Dosyayı yüklemek için oynatıcıyı desteklemeyebileceğinden akışını deneyebilirsiniz, bu durumda akış http://msdn.microsoft.com/en-us/library/system.media.soundplayer.aspx adresinde çalışabilir. 'SoundPlayer' (Stream) 'Constuctor 'a bakın .. Umarım bunu yapacaktır .. – MarmiK
[WinRT'de SharpDX'i kullanarak aynı anda birden fazla ses nasıl çalabilirim?] kontrol ettiniz mi? (http://stackoverflow.com/questions/13642944/nasıl-can-i-play-çoklu-ses-at-the-aynı zamanda-kullanarak-sharpdx-in-winrt)? – Xyroid
Saf C# ve XAML'de bunu yapmanın bir yolu yoktur, bu yüzden SharpDX ve XAudio'yu kullanmanızı veya ilgili XAudio çağrılarını sarmalayan bir C++ kitaplığı oluşturmanızı öneririm. – Rafael