J'espère que quelqu'un pourra m'aider avec ça. J'ai trouvé les exemples d'enregistrement audio en utilisant XNA dans une application Silverlight. Et cela fonctionne, cependant, seulement la première fois. J'ai toutes les fonctionnalités d'enregistrement sur une page WP7 séparée et avec des visites successives à la page cela ne fonctionne pas. Le mieux que je puisse dire, c'est que le micro.start est appelé mais le micophone.status reste arrêté. Ce qui est bizarre, c'est que le BufferReady continue d'être appelé et que le code de cette fonction est en cours d'exécution mais sans le micro, rien ne se passe réellement. Lorsque vous quittez l'application et revenez à nouveau la première fois à la page et tout fonctionne bien, mais une nouvelle visite à la page et il ne fonctionne pas.Windows Phone 7 Enregistrement audio Problème
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();
}
Mise à jour ... j'ai trouvé le problème, mais pas de solution. J'appelais le microphone.stop via le code sur une minuterie (donc je pourrais limiter l'audio enregistré à 5 secondes). Exactement le même code à exécuter quand un bouton d'arrêt manuel serait cliqué. En cliquant sur le bouton d'arrêt manuel, tout a bien fonctionné, peut-être re-visiter la page et tout irait bien. Lorsque l'arrêt a été appelé dans le code de la minuterie, la prochaine visite de la page ne fonctionnerait pas. Donc je l'ai implémenté avec seulement un bouton d'arrêt manuel mais j'aurais vraiment aimé le faire automatiquement (et savoir quel était le vrai problème).
veuillez poster votre code afin que nous puissions voir ce que vous faites. –