我在新的Windows Phone SDK。 我找不到例如打从生成的缓冲声音在Windows手机应用程序。 帮助请。
我发现这个例子:
byte] buffer = new byte[44100 * 2 * 5];
float t = 0;
for (int i = 0; i < 44100 * 2 * 5; i += 2)
{
short val = (short)(Math.Sin(t * 2 * Math.PI * 440) * short.MaxValue);
buffer[i] = (byte)(val & 0xFF);
buffer[i + 1] = (byte)(val >> 8);
t += 1 / 44100.0f;
}
sf = new SoundEffect(buffer, 44100, AudioChannels.Mono);
// Play.
sf.Play();
但它的崩溃,错误“System.InvalidOperationException”类型的第一次机会异常出现在Microsoft.Xna.Framework.ni.dll“System.InvalidOperationException”类型的异常出现在Microsoft.Xna.Framework.ni.dll但没有在用户代码中处理
你需要调用FrameworkDispatcher.Update
。
(参见例外:FrameworkDispatcher.Update没有被调用定期FrameworkDispatcher.Update调用是必要的消防和忘记的声音效果和框架事件才能正常工作见。 http://go.microsoft.com/fwlink/?LinkId=193853为细节。)
设置在构造函数的计时器:
var dt = new DispatcherTimer();
dt.Interval = TimeSpan.FromMilliseconds(33);
dt.Tick += new EventHandler(Tick);
dt.Start();
而一个Tick事件处理程序:
void Tick(object sender, EventArgs e)
{
try
{
FrameworkDispatcher.Update();
}
catch (Exception ex)
{
if (Debugger.IsAttached)
{
Debugger.Break();
}
}
}
应该例如在你的应用程序运行一个播放按钮。 我还添加一行代码: var soundInstance = sf.CreateInstance();
private void appBarPlayButton_Click(object sender, EventArgs e)
{
byte[] buffer = new byte[44100 * 2 * 5];
float t = 0;
for (int i = 0; i < 44100 * 2 * 5; i += 2)
{
short val = (short)(Math.Sin(t * 2 * Math.PI * 440) * short.MaxValue);
buffer[i] = (byte)(val & 0xFF);
buffer[i + 1] = (byte)(val >> 8);
t += 1 / 44100.0f;
}
var sf = new SoundEffect(buffer, 44100, AudioChannels.Mono);
var soundInstance = sf.CreateInstance();
// Play.
sf.Play();
}