コード例 #1
0
        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();
            }
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }