// ---------------------------------------------------------------------------- void player::play_from_queue() { if ( play_queue_.size() > 0 ) { auto track = play_queue_.front(); auto src = track.find_source(); if ( !src.is_null() ) { std::cerr << "play_from_queue id=" << track.id() << ", title='" << track.title() << "', source=" << src.name() << std::endl; state_.state = playing; state_.track = std::move(track); state_.source = src.name(); std::cout << "player state=" << state_.state << std::endl; if ( !audio_output_ ) { audio_output_open(); } play_source(src); play_queue_.pop(); } else { std::cerr << "play_from_queue id=" << track.id() << ", title='" << track.title() << "', NO SOURCE!" << std::endl; play_queue_.pop(); play_from_queue(); } } else if ( continuous_playback_ ) { play_queue_.push(ctpb_selector_.next()); play_from_queue(); } else { play_stop(); } }
int play_sound_internal(Notification what, _Bool loop) { uint32_t source; uint32_t buffer; alGenSources(1, &source); alGenBuffers(1, &buffer); buffer = alutCreateBufferFromFile(Control.sounds[what]); alSourcei(source, AL_BUFFER, buffer); alSourcei(source, AL_LOOPING, loop); int rc = play_source(source, buffer, loop); if (rc < 0) { alSourceStop(source); alDeleteSources(1, &source); alDeleteBuffers(1,&buffer); return -1; } return rc; }