/** Callback called when we finish playing music. */ void musicFinished() { Mix_HaltMusic(); Mix_FreeMusic( current_music ); current_music = nullptr; const auto iter = playlists.find( current_playlist ); if( iter == playlists.end() ) { return; } const music_playlist &list = iter->second; if( list.entries.empty() ) { return; } // Load the next file to play. absolute_playlist_at++; // Wrap around if we reached the end of the playlist. if( absolute_playlist_at >= list.entries.size() ) { absolute_playlist_at = 0; } current_playlist_at = playlist_indexes.at( absolute_playlist_at ); const auto &next = list.entries[current_playlist_at]; play_music_file( next.file, next.volume ); }
void play_music( const std::string &playlist ) { const auto iter = playlists.find( playlist ); if( iter == playlists.end() ) { return; } const music_playlist &list = iter->second; if( list.entries.empty() ) { return; } // Don't interrupt playlist that's already playing. if( playlist == current_playlist ) { return; } for( size_t i = 0; i < list.entries.size(); i++ ) { playlist_indexes.push_back( i ); } if( list.shuffle ) { static auto eng = std::default_random_engine( std::chrono::system_clock::now().time_since_epoch().count() ); std::shuffle( playlist_indexes.begin(), playlist_indexes.end(), eng ); } current_playlist = playlist; current_playlist_at = playlist_indexes.at( absolute_playlist_at ); const auto &next = list.entries[current_playlist_at]; play_music_file( next.file, next.volume ); }
void play_music( std::string playlist ) { const auto iter = playlists.find( playlist ); if( iter == playlists.end() ) { return; } const music_playlist &list = iter->second; if( list.entries.empty() ) { return; } // Don't interrupt playlist that's already playing. if( playlist == current_playlist ) { return; } for( size_t i = 0; i < list.entries.size(); i++ ) { playlist_indexes.push_back( i ); } if( list.shuffle ) { std::random_shuffle( playlist_indexes.begin(), playlist_indexes.end() ); } current_playlist = playlist; current_playlist_at = playlist_indexes.at( absolute_playlist_at ); const auto &next = list.entries[current_playlist_at]; play_music_file( next.file, next.volume ); }