Я надеюсь, что кто-то может помочь мне с этим. Я нашел примеры для записи звука с использованием XNA в приложении Silverlight. И это работает, однако, только в первый раз. У меня есть все функции записи на отдельной странице WP7 и при последовательных посещениях страницы это не работает. Лучшее, что я могу сказать, - звонит микрофон. Старт, но микрофон. Статус остается остановленным. Что странно, так это то, что BufferReady продолжает вызываться, и код внутри этой функции все работает, но без запуска микрофона ничего не происходит. Когда вы выходите из приложения и возвращаетесь снова при первом посещении страницы, все работает нормально, но при повторном посещении страницы это не так.
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();
}
Обновление ...
Я нашел проблему, но не нашел решения. Я вызывал микрофон с помощью кода на таймере (чтобы я мог ограничить записанный звук до 5 секунд). Точно такой же код для выполнения при нажатии кнопки ручной остановки. При нажатии кнопки ручной остановки все работало нормально, мог повторно посетить страницу и все было бы хорошо. Когда остановка была вызвана в коде из таймера, следующее посещение страницы не будет работать. Так что я реализовал это только с помощью кнопки ручного останова, но было бы неплохо сделать это автоматически (и узнать, в чем реальная проблема).