我希望有人能帮助我解决这个问题。我已经找到了在Silverlight应用程序中使用XNA录制音频的例子。然而,它只能在第一次使用。我将所有录制功能放在单独的WP7页面上,并且连续访问该页面不起作用。我能告诉的最好的是麦克风。开始播放,但micophone.status仍然停止。有什么奇怪的是BufferReady一直在调用,并且该函数中的代码都在运行,但没有麦克风真正开始没有真正发生。当你第一次访问该页面时,当你退出应用程序并再次返回时,一切正常,但是重新访问该页面并且不会。Windows Phone 7音频录制问题
void microphone_BufferReady(object sender, EventArgs e)
{
this.Dispatcher.BeginInvoke(() =>
{
microphone.GetData(buffer);
stream.Write(buffer, 0, buffer.Length);
TimeSpan tsTemp = timer.Elapsed;
TextBlockSeconds.Text = tsTemp.Hours.ToString().PadLeft(2, '0') + ":" + tsTemp.Minutes.ToString().PadLeft(2, '0') + ":" + tsTemp.Seconds.ToString().PadLeft(2, '0');
if(timer.Elapsed.Seconds >5)
DoStop();
});
}
private void ButtonRecord_Click(object sender, RoutedEventArgs e)
{
DisableRecordButton();
timer = new Stopwatch();
timer.Start();
stream = new MemoryStream();
TextBlockSeconds.Text = "00:00:00";
TextBlockStatus.Text = "Recording: ";
microphone.BufferDuration = TimeSpan.FromMilliseconds(500);
buffer = new byte[microphone.GetSampleSizeInBytes(microphone.BufferDuration)];
microphone.BufferReady += new EventHandler<EventArgs>(microphone_BufferReady);
microphone.Start();
}
private void DoStop()
{
if (timer.IsRunning)
timer.Stop();
if (microphone.State == MicrophoneState.Started)
{
microphone.Stop();
TextBlockStatus.Text = "Stopped: Ready to save";
}
else
{
TextBlockStatus.Text = "Ready: ";
}
TextBlockSeconds.Text = string.Empty;
EnableRecordButton();
}
更新... 我发现问题,但没有解决方案。我通过定时器上的代码呼叫microphone.stop(因此我可以将录制的音频限制在5秒钟内)。当点击手动停止按钮时,执行完全相同的代码。当点击手动停止按钮一切正常,可以重新访问该页面,一切都会好起来的。当停止在计时器的代码中被调用时,下次访问该页面将不起作用。所以我只用一个手动停止按钮来实现它,但真的很高兴自动完成它(并知道真正的问题是什么)。
请发布您的代码,以便我们可以看到您在做什么。 – 2010-12-06 22:54:29