private async void AbbSave_Click(object sender, RoutedEventArgs e) { try { MusicProperties props = (MusicProperties)DataContext; await props.SavePropertiesAsync(); if (song != null) { await song.Reset(); } } catch (Exception exc) { await new MessageDialog(exc.Message, exc.GetType().Name).ShowAsync(); } }
/// <summary> /// /// </summary> /// <param name="fileTarget">File to write to</param> /// <param name="synthStream">The SpeechSynthesisStream with the actual sound</param> /// <param name="voice">The VoiceInformation for setting the correct voice in the artist</param> /// <returns></returns> private static async Task <bool> SaveAndEncodeFile(StorageFile fileTarget, SpeechSynthesisStream synthStream, VoiceInformation voice) { bool success = false; // Initialise some stuff MediaEncodingProfile _profile; MediaTranscoder _transcoder = new MediaTranscoder(); CoreDispatcher _dispatcher = Window.Current.Dispatcher; CancellationTokenSource _cts = new CancellationTokenSource(); Debug.WriteLine(fileTarget.FileType + " selected"); // Set encoding profiles _profile = null; AudioEncodingQuality audioEncodingProfile = AudioEncodingQuality.High; if (fileTarget.FileType == ".wma") { _profile = MediaEncodingProfile.CreateWma(audioEncodingProfile); } else if (fileTarget.FileType == ".mp3") { _profile = MediaEncodingProfile.CreateMp3(audioEncodingProfile); } else if (fileTarget.FileType == ".m4a") { _profile = MediaEncodingProfile.CreateM4a(audioEncodingProfile); } else { Debug.WriteLine("Can't select a media encoding profile"); return(success); } // Write temporary Wav to Temp-storage ApplicationData appData = ApplicationData.Current; StorageFile source = await appData.TemporaryFolder.CreateFileAsync("temporary.wav", CreationCollisionOption.ReplaceExisting); try { using (var reader = new DataReader(synthStream)) { await reader.LoadAsync((uint)synthStream.Size); IBuffer buffer = reader.ReadBuffer((uint)synthStream.Size); await FileIO.WriteBufferAsync(source, buffer); } } catch (Exception ex) { Debug.WriteLine("Couldn't prepare wav for transcoding"); Debug.WriteLine(ex); } // Prepare transcoding files var preparedTranscoderResult = await _transcoder.PrepareFileTranscodeAsync(source, fileTarget, _profile); if (preparedTranscoderResult.CanTranscode) { // Set task for transcoding await preparedTranscoderResult.TranscodeAsync().AsTask(_cts.Token); // Set Music-properties MusicProperties fileProperties = await fileTarget.Properties.GetMusicPropertiesAsync(); fileProperties.Title = fileTarget.DisplayName; fileProperties.Artist = ("Talkinator " + ResourceExtensions.GetLocalized("VoicedBy") + " " + voice.DisplayName); await fileProperties.SavePropertiesAsync(); // #TODO: Add the newly created file to the systems MRU? // Add the file to app MRU and possibly system MRU //RecentStorageItemVisibility visibility = SystemMRUCheckBox.IsChecked.Value ? RecentStorageItemVisibility.AppAndSystem : RecentStorageItemVisibility.AppOnly; //rootPage.mruToken = StorageApplicationPermissions.MostRecentlyUsedList.Add(file, file.Name, visibility); //RecentStorageItemVisibility visibility = RecentStorageItemVisibility.AppOnly; //StorageApplicationPermissions.FutureAccessList.Add(fileTarget, fileTarget.DisplayName); // Report completed success = true; Debug.WriteLine(fileTarget.FileType + " export completed"); } else { Debug.WriteLine(preparedTranscoderResult.FailureReason); } return(success); }
public async Task SaveChangesAsync(MusicFile musicFile) { if (!IsSupported || !musicFile.IsMetadataLoaded || !musicFile.Metadata.HasChanges) { return; } // Manipulating changes must be done synchronously; no await call is allowed before ClearChanges(). var metadata = musicFile.Metadata; var changedProperties = metadata.GetChanges(); metadata.ClearChanges(); var file = await StorageFile.GetFileFromPathAsync(musicFile.FileName); MusicProperties musicProperties = await file.Properties.GetMusicPropertiesAsync(); var customProperties = new Dictionary <string, object>(); if (changedProperties.Contains(nameof(MusicMetadata.Title))) { ApplyTitle(musicProperties, customProperties, metadata.Title); } if (changedProperties.Contains(nameof(MusicMetadata.Artists))) { ApplyArtists(musicProperties, customProperties, metadata.Artists); } if (changedProperties.Contains(nameof(MusicMetadata.Rating))) { ApplyRating(musicProperties, customProperties, metadata.Rating); } if (changedProperties.Contains(nameof(MusicMetadata.Album))) { ApplyAlbum(musicProperties, customProperties, metadata.Album); } if (changedProperties.Contains(nameof(MusicMetadata.TrackNumber))) { ApplyTrackNumber(musicProperties, customProperties, metadata.TrackNumber); } if (changedProperties.Contains(nameof(MusicMetadata.Year))) { ApplyYear(musicProperties, customProperties, metadata.Year); } if (changedProperties.Contains(nameof(MusicMetadata.Genre))) { ApplyGenre(musicProperties, customProperties, metadata.Genre); } if (changedProperties.Contains(nameof(MusicMetadata.AlbumArtist))) { ApplyAlbumArtist(musicProperties, customProperties, metadata.AlbumArtist); } if (changedProperties.Contains(nameof(MusicMetadata.Publisher))) { ApplyPublisher(musicProperties, customProperties, metadata.Publisher); } if (changedProperties.Contains(nameof(MusicMetadata.Subtitle))) { ApplySubtitle(musicProperties, customProperties, metadata.Subtitle); } if (changedProperties.Contains(nameof(MusicMetadata.Composers))) { ApplyComposers(musicProperties, customProperties, metadata.Composers); } if (changedProperties.Contains(nameof(MusicMetadata.Conductors))) { ApplyConductors(musicProperties, customProperties, metadata.Conductors); } Logger.Verbose("SaveMetadata.SaveChangesAsync:Save: {0}", musicFile.FileName); await musicProperties.SavePropertiesAsync(customProperties); }
private async Task <bool> ExportToMusicFormat(StorageFile fileTarget, SpeechSynthesisStream synthStream) { bool success = false; Debug.WriteLine(fileTarget.FileType + " selected"); // Set encoding profiles _profile = null; AudioEncodingQuality audioEncodingProfile = AudioEncodingQuality.High; if (fileTarget.FileType == ".wma") { _profile = MediaEncodingProfile.CreateWma(audioEncodingProfile); } else if (fileTarget.FileType == ".mp3") { _profile = MediaEncodingProfile.CreateMp3(audioEncodingProfile); } else if (fileTarget.FileType == ".m4a") { _profile = MediaEncodingProfile.CreateM4a(audioEncodingProfile); } else { Debug.WriteLine("Can't select a media encoding profile"); return(success); } // Write temporary Wav to Temp-storage ApplicationData appData = ApplicationData.Current; StorageFile source = await appData.TemporaryFolder.CreateFileAsync("temporary.wav", CreationCollisionOption.ReplaceExisting); try { using (var reader = new DataReader(synthStream)) { await reader.LoadAsync((uint)synthStream.Size); IBuffer buffer = reader.ReadBuffer((uint)synthStream.Size); await FileIO.WriteBufferAsync(source, buffer); } } catch (Exception ex) { Debug.WriteLine("Couldn't prepare wav for transcoding"); Debug.WriteLine(ex); } // Prepare transcoding files var preparedTranscoderResult = await _transcoder.PrepareFileTranscodeAsync(source, fileTarget, _profile); if (preparedTranscoderResult.CanTranscode) { // Set task for transcoding await preparedTranscoderResult.TranscodeAsync().AsTask(_cts.Token); // Set Music-properties MusicProperties fileProperties = await fileTarget.Properties.GetMusicPropertiesAsync(); fileProperties.Title = fileTarget.DisplayName; fileProperties.Artist = "Talkinator"; await fileProperties.SavePropertiesAsync(); // Prepare notification // Add the file to app MRU and possibly system MRU //RecentStorageItemVisibility visibility = SystemMRUCheckBox.IsChecked.Value ? RecentStorageItemVisibility.AppAndSystem : RecentStorageItemVisibility.AppOnly; //rootPage.mruToken = StorageApplicationPermissions.MostRecentlyUsedList.Add(file, file.Name, visibility); //RecentStorageItemVisibility visibility = RecentStorageItemVisibility.AppOnly; //StorageApplicationPermissions.FutureAccessList.Add(fileTarget, fileTarget.DisplayName); StorageFolder parentFolder = await fileTarget.GetParentAsync(); FolderLauncherOptions launcherOptions = new FolderLauncherOptions(); launcherOptions.ItemsToSelect.Add(fileTarget); await Launcher.LaunchFolderAsync(parentFolder, launcherOptions); // Report completed success = true; Debug.WriteLine(fileTarget.FileType + " export completed"); } else { Debug.WriteLine(preparedTranscoderResult.FailureReason); } return(success); }