void LoadSong(object sender, EventArgs e) { APlaylist mainPlaylist = ROM.Instance.Game.Playlists[0]; List <ASong> songs = mainPlaylist.Songs.ToList(); ASong song = songs.SingleOrDefault(s => s.Index == songNumerical.Value); if (song != null) { Text = "GBA Music Studio - " + song.Name; songsComboBox.SelectedIndex = songs.IndexOf(song) + 1; // + 1 for the Playlist index } else { Text = "GBA Music Studio"; songsComboBox.SelectedIndex = 0; } bool playing = SongPlayer.Instance.State == PlayerState.Playing; // Play new song if one is already playing bool paused = SongPlayer.Instance.State == PlayerState.Paused; Stop(null, null); try { // Pause which stops the thread inside from processing during loading, which would increase the stream latency if (!paused) { SongPlayer.Instance.Pause(); } var loadedSong = ROM.Instance.SongTables[(int)tableNumerical.Value][(int)songNumerical.Value]; SongPlayer.Instance.SetSong(loadedSong); // Then "un pause" it, setting it to the stopped state if (!paused) { SongPlayer.Instance.Stop(); } UpdateTrackInfo(playing); MIDIKeyboard.Instance.Start(); } catch (Exception ex) { FlexibleMessageBox.Show(ex.Message, "Error Loading Song " + songNumerical.Value); return; } }
void LoadSong(object sender, EventArgs e) { APlaylist mainPlaylist = ROM.Instance.Game.Playlists[0]; List <ASong> songs = mainPlaylist.Songs.ToList(); ASong song = songs.SingleOrDefault(s => s.Index == songNumerical.Value); if (song != null) { Text = "GBA Music Studio - " + song.Name; songsComboBox.SelectedIndex = songs.IndexOf(song) + 1; // + 1 for the Playlist index } else { Text = "GBA Music Studio"; songsComboBox.SelectedIndex = 0; } bool playing = SongPlayer.State == PlayerState.Playing; // Play new song if one is already playing Stop(null, null); SongPlayer.SetSong(ROM.Instance.SongTables[(int)tableNumerical.Value][(int)songNumerical.Value]); UpdateTrackInfo(playing); MIDIKeyboard.Start(); }