我希望有人能幫助我解決這個問題。我已經找到了在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