gpt4 book ai didi

c# - 在 Windows Store (Metro) 应用程序中播放简单的声音

转载 作者:太空狗 更新时间:2023-10-29 18:32:03 27 4
gpt4 key购买 nike

我正在使用 XAML 和 C# 构建 Windows Store (Metro) 应用程序。我想演奏一种简单的音调,并且能够控制持续时间和音调;我们过去使用 Console.Beep 做的事情。

我找到了 Play dynamically-created simple sounds in C# without external libraries但它引用的 SoundPlayer(System.Media 命名空间)似乎不受此类应用程序的支持(当然除非我遗漏了什么)。

有没有人有在 Metro 应用程序中生成声音(而不是播放 wav 文件)的示例?

最佳答案

基于 this文章,下面对我有用:

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();
}

它使用 MediaElement 进行播放,但由于源是自动生成的 IRandomAccessStream,因此它很灵活。

关于c# - 在 Windows Store (Metro) 应用程序中播放简单的声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17139288/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com