private bool AddMusic(string musicName, MusicFile musicFile, bool forceReplace) { var musicNameLower = musicName.ToLowerInvariant(); if (MusicFiles.ContainsKey(musicNameLower)) { if (forceReplace && MusicFiles[musicNameLower].IsStandard) { MusicFiles.Remove(musicNameLower); } else { return(true); } } MusicFiles.Add(musicNameLower, new MusicClip(musicFile)); // TODO: Loading every music increases uned memory size duh //if (!musicFile.ForceLoad()) //{ // Logger.Log(Logger.LogTypes.Warning, $"MusicTrack.cs: File at \"{musicFile.LocalPath}\" is not a valid music file!"); // return false; //} return(true); }
public MainPageViewModel() { _musicFiles = new ObservableCollection <StorageFile>(); CurrentFile = new GroorineFileViewModel(null); //_player = new Player(); InitializeAsync(); DeleteCommand = new DelegateCommand(async(o) => { if (!(o is StorageFile)) { return; } var sf = o as StorageFile; MusicFiles.Remove(sf); await sf.DeleteAsync(); }); ExportCommand = new DelegateCommand(async(o) => { if (!(o is StorageFile)) { return; } var sf = o as StorageFile; var fsp = new FileSavePicker(); fsp.FileTypeChoices.Add("Wave Audio", new List <string> { ".wav" }); fsp.FileTypeChoices.Add("Windows Media Audio", new List <string> { ".wma" }); fsp.FileTypeChoices.Add("MPEG 3 Audio", new List <string> { ".mp3" }); fsp.FileTypeChoices.Add("MPEG 4 Audio", new List <string> { ".m4a" }); fsp.SuggestedFileName = sf.DisplayName; fsp.CommitButtonText = "Bounce"; StorageFile file = await fsp.PickSaveFileAsync(); if (file == null) { return; } MediaEncodingProfile mediaEncodingProfile; switch (file.FileType.ToString().ToLowerInvariant()) { case ".wma": mediaEncodingProfile = MediaEncodingProfile.CreateWma(AudioEncodingQuality.High); break; case ".mp3": mediaEncodingProfile = MediaEncodingProfile.CreateMp3(AudioEncodingQuality.High); break; case ".wav": mediaEncodingProfile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.High); break; case ".m4a": mediaEncodingProfile = MediaEncodingProfile.CreateM4a(AudioEncodingQuality.High); break; default: throw new ArgumentException(); } CreateAudioFileOutputNodeResult result = await _graph.CreateFileOutputNodeAsync(file, mediaEncodingProfile); if (result.Status != AudioFileNodeCreationStatus.Success) { // FileOutputNode creation failed await new MessageDialog("We couldn't create FileOutputNode, so we failed to bounce.").ShowAsync(); return; } AudioFileOutputNode node = result.FileOutputNode; _graph.Stop(); _frameInputNode.AddOutgoingConnection(node); Stop(); _player.Load(SmfParser.Parse(await sf.OpenStreamForReadAsync())); Play(); _graph.Start(); var a = new BouncingDialog(); #pragma warning disable CS4014 // この呼び出しを待たないため、現在のメソッドの実行は、呼び出しが完了する前に続行します a.ShowAsync(); #pragma warning restore CS4014 // この呼び出しを待たないため、現在のメソッドの実行は、呼び出しが完了する前に続行します while (_player.IsPlaying) { await Task.Delay(1); } _graph.Stop(); await node.FinalizeAsync(); _graph.Start(); a.Hide(); await new MessageDialog("Bouncing has successfully finished!").ShowAsync(); }); }