/// <summary> /// Converts the chosen media to a certain extension the user has chosen for /// </summary> /// <param name="selectedFiles"></param> /// <param name="output"></param> public async void ConvertChosenMedia(List <StorageFile> selectedFiles, string output) { List <StorageFile> files = selectedFiles; foreach (StorageFile file in files) { StorageFile source = file; MediaEncodingProfile profile = new MediaEncodingProfile(); var ext = file.FileType; //To which extension needs the file be converted to switch (output) { case "MP3": if (ext == ".MP3") { ext = null; MessageDialog showDialogError = new MessageDialog("Het bestand kan niet naar dezelfde extensie geconverteerd worden."); await showDialogError.ShowAsync(); } else { profile = MediaEncodingProfile.CreateMp3(AudioEncodingQuality.High); } break; case "MP4": if (ext == ".MP4") { ext = null; MessageDialog showDialogError = new MessageDialog("Het bestand kan niet naar dezelfde extensie geconverteerd worden."); await showDialogError.ShowAsync(); } else { profile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Auto); } break; case "WAV": if (ext == ".WAV") { ext = null; MessageDialog showDialogError = new MessageDialog("Het bestand kan niet naar dezelfde extensie geconverteerd worden."); await showDialogError.ShowAsync(); } profile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.High); break; default: output = null; MessageDialog showDialogUnknown = new MessageDialog("Gekozen formaat om naar te converten is niet geldig."); await showDialogUnknown.ShowAsync(); break; } //Puts the file in the "Video's" folder if (output != null && ext != null) { var folder = KnownFolders.VideosLibrary; string datetime = "_" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Year + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second; var destination = await folder.CreateFileAsync(source.Name.Remove(source.Name.Length - 4) + datetime + "." + output); MediaTranscoder transcoder = new MediaTranscoder(); PrepareTranscodeResult prepareOp = null; while (source.Equals(null) || destination.Equals(null) || profile.Equals(null)) { //waiting } using (await bouncer.LockAsync()) { //catch the nullreference exception on prepareOp try { prepareOp = await transcoder.PrepareFileTranscodeAsync(source, destination, profile); //if possible if (prepareOp.CanTranscode) { var transcodeOp = prepareOp.TranscodeAsync(); transcodeOp.Completed += new AsyncActionWithProgressCompletedHandler <double>(TranscodeComplete); } else { switch (prepareOp.FailureReason) { case TranscodeFailureReason.CodecNotFound: Debug.WriteLine("Codec not found."); break; case TranscodeFailureReason.InvalidProfile: Debug.WriteLine("Invalid profile."); break; default: Debug.WriteLine("Unknown failure."); break; } } } catch (NullReferenceException ex) { Debug.WriteLine(ex.Message); } } } } }
public async void ConvertChosenMedia(List <StorageFile> selectedFiles, string output) { List <StorageFile> files = selectedFiles; foreach (StorageFile file in files) { StorageFile source = file; MediaEncodingProfile profile = new MediaEncodingProfile(); //wat wil de gebruiker er mee switch (output) { case "MP3": profile = MediaEncodingProfile.CreateMp3(AudioEncodingQuality.High); break; case "MP4": profile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Auto); break; case "WAV": profile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.High); break; default: Debug.WriteLine("Gekozen formaat om naar te converten staat niet in de switchlijst"); break; } //bepaald waar het nieuwe bestand komt var folder = KnownFolders.VideosLibrary; string datetime = "_" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Year + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second; var destination = await folder.CreateFileAsync(source.Name.Remove(source.Name.Length - 4) + datetime + "." + output); MediaTranscoder transcoder = new MediaTranscoder(); PrepareTranscodeResult prepareOp = null; while (source.Equals(null) || destination.Equals(null) || profile.Equals(null)) { //blijf wachten } using (await bouncer.LockAsync()) { //afvangen dat prepareOp nullreferenceexception gooit try { prepareOp = await transcoder.PrepareFileTranscodeAsync(source, destination, profile); //als het kan if (prepareOp.CanTranscode) { var transcodeOp = prepareOp.TranscodeAsync(); transcodeOp.Progress += new AsyncActionProgressHandler <double>(TranscodeProgress); transcodeOp.Completed += new AsyncActionWithProgressCompletedHandler <double>(TranscodeComplete); } else { switch (prepareOp.FailureReason) { case TranscodeFailureReason.CodecNotFound: Debug.WriteLine("Codec not found."); break; case TranscodeFailureReason.InvalidProfile: Debug.WriteLine("Invalid profile."); break; default: Debug.WriteLine("Unknown failure."); break; } } } catch (NullReferenceException ex) { Debug.WriteLine(ex.Message); } } }//foreach }