2016-04-22 8 views
0

J'essaie de produire une pause et de reprendre des fonctionnalités en utilisant le code suivant.Impossible de créer une pause et de reprendre la fonctionnalité dans une application d'enregistrement audio. Application Store StoreWindows 8.1

private async void RecordBtn_Click(object sender, RoutedEventArgs e) 
{ 
    if (IsNewRecording) 
    { 
     mediaFile = await Windows.Storage.KnownFolders.MusicLibrary.CreateFileAsync("newFile.mp3", Windows.Storage.CreationCollisionOption.ReplaceExisting); 
     MediaEncodingProfile encodingProfile = null; 
     switch (SelectedFormat) 
     { 
      case AudioEncodingFormat.Mp3: 
      encodingProfile = MediaEncodingProfile.CreateMp3(SelectedQuality); 
      break; 
      case AudioEncodingFormat.Mp4: 
      encodingProfile = MediaEncodingProfile.CreateM4a(SelectedQuality); 
      break; 
      case AudioEncodingFormat.Wma: 
      encodingProfile = MediaEncodingProfile.CreateWma(SelectedQuality); 
      break; 
      default: 
      throw new ArgumentOutOfRangeException(); 
      } 

      await CaptureMedia.StartRecordToStorageFileAsync(encodingProfile, mediaFile); 
      UpdateRecordingControls(RecordingMode.Recording); 
      DishTimer.Start(); 
      IsNewRecording = false; 
      RecordBtn.Content = "Pause"; 
      return; 
    } 
    else if (!IsNewRecording && !IsPaused) 
    { 
     UpdateRecordingControls(RecordingMode.Paused); 
     DishTimer.Stop(); 
     await CaptureMedia.StopRecordAsync(); 
     IsPaused = true; 
     RecordBtn.Content = "Resume"; 
     return; 
    } 
    else if (!IsNewRecording && IsPaused) 
    { 
      MediaEncodingProfile encodingProfile = null; 
      encodingProfile = MediaEncodingProfile.CreateMp3(SelectedQuality); 
      await CaptureMedia.StartRecordToStorageFileAsync(encodingProfile, mediaFile); 
      DishTimer.Start(); 
      IsPaused = false; 
      RecordBtn.Content = "Pause"; 
      return; 
    } 
} 

Pour arrêter l'enregistrement.

private async void StopBtn_Click(object sender, RoutedEventArgs e) 
{ 
     await CaptureMedia.StopRecordAsync(); 
     UpdateRecordingControls(RecordingMode.Stopped); 
     DishTimer.Stop(); 
     InitTimer(); 
     IsNewRecording = true; 
     RecordBtn.Content = "Record"; 

} 

Et pour initialiser la MediaCapture.

private async Task InitMediaCapture() 
{ 
    CaptureMedia = new MediaCapture(); 
    captureInitSettings = new MediaCaptureInitializationSettings(); 
    captureInitSettings.StreamingCaptureMode = StreamingCaptureMode.Audio; 
    await CaptureMedia.InitializeAsync(captureInitSettings); 
    CaptureMedia.Failed += MediaCaptureOnFailed; 
    CaptureMedia.RecordLimitationExceeded += MediaCaptureOnRecordLimitationExceeded; 

} 

et l'événement OnNavigatedTo est comme suit.

protected async override void OnNavigatedTo(NavigationEventArgs e) 
{ 
     await InitMediaCapture();// Mic disconnection Exception thrown if no device is found 
     LoadAudioEncodings(); 
     LoadAudioQualities(); 
     UpdateRecordingControls(RecordingMode.Initializing); 
     InitTimer(); 

} 

aussi l'autre problème que je suis face est que lorsque l'application est réduite au minimum ou la fenêtre est verrouillée et l'enregistrement démarre à nouveau MediaCapture événement ayant échoué est élevé, ce qui donne le message d'erreur suivant. Le message d'erreur est: "Le périphérique multimédia ne peut pas passer de l'état arrêté à l'état en pause", même si la méthode Pause n'est pas prise en charge dans Windows 8.1 par la méthode MediaCapture.

Actuellement, l'enregistrement est également enregistré dans le dossier Bibliothèque musicale, mais que puis-je faire pour enregistrer l'enregistrement dans un dossier particulier du lecteur C.

S'il vous plaît aidez-moi!

Répondre

0

Je n'ai aucune expérience avec le streaming, mais sur la partie de sauvegarde, vous pouvez utiliser le fichier SavePicker. Selon votre code, l'enregistrement devrait générer un StorageFile.

var fileSavePicker = new FileSavePicker(); 
fileSavePicker.FileTypeChoices.Add(".mp3 audio", new List { ".mp3" }); 
fileSavePicker.DefaultFileExtension = “.mp3”; 
fileSavePicker.SuggestedFileName = “name.mp3”; 
fileSavePicker.SettingsIdentifier = "pickerName"; 
fileSavePicker.SuggestedSaveFile = //your storage file here 
fileSavePicker.SuggestedStartLocation = //select start location 

var file = await fileSavePicker.PickSaveFileAsync(); 

if (file != null) 
{ 
    Windows.Storage.CachedFileManager.DeferUpdates(file); 

    //override file with content, text example below 
    //await Windows.Storage.FileIO.WriteTextAsync(file, "yourconten"); 

    Windows.Storage.Provider.FileUpdateStatus status = 
     await Windows.Storage.CachedFileManager.CompleteUpdatesAsync(file); 

    if (status == Windows.Storage.Provider.FileUpdateStatus.Complete) 
    { 
     //operation done 
    } 
    else 
    { 
     //something went wrong 
    } 
} 

Plus d'informations: https://msdn.microsoft.com/en-us/windows/uwp/files/quickstart-save-a-file-with-a-picker

+0

merci mais, ce que je veux faire est d'enregistrer le fichier à un endroit de mon choix sans demander un FilePicker, quelque chose comme je donne le chemin complet du fichier à sauvegarder et le fichier est enregistré dans cet emplacement. –