mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:57:35 +00:00
SoundPlayer: Optionally allow playback to loop indefinitely
This commit is contained in:
parent
75dec15b43
commit
90a30f694d
3 changed files with 19 additions and 1 deletions
|
@ -73,6 +73,11 @@ void PlaybackManager::play()
|
||||||
set_paused(false);
|
set_paused(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PlaybackManager::loop(bool loop)
|
||||||
|
{
|
||||||
|
m_loop = loop;
|
||||||
|
}
|
||||||
|
|
||||||
void PlaybackManager::seek(const int position)
|
void PlaybackManager::seek(const int position)
|
||||||
{
|
{
|
||||||
if (!m_loader)
|
if (!m_loader)
|
||||||
|
@ -166,7 +171,10 @@ void PlaybackManager::next_buffer()
|
||||||
if (!m_next_buffer) {
|
if (!m_next_buffer) {
|
||||||
if (!m_connection->get_remaining_samples() && !m_paused) {
|
if (!m_connection->get_remaining_samples() && !m_paused) {
|
||||||
dbgln("Exhausted samples :^)");
|
dbgln("Exhausted samples :^)");
|
||||||
stop();
|
if (m_loop)
|
||||||
|
seek(0);
|
||||||
|
else
|
||||||
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -43,6 +43,7 @@ public:
|
||||||
void stop();
|
void stop();
|
||||||
void pause();
|
void pause();
|
||||||
void seek(const int position);
|
void seek(const int position);
|
||||||
|
void loop(bool);
|
||||||
bool toggle_pause();
|
bool toggle_pause();
|
||||||
void set_loader(OwnPtr<Audio::WavLoader>&&);
|
void set_loader(OwnPtr<Audio::WavLoader>&&);
|
||||||
|
|
||||||
|
@ -62,6 +63,7 @@ private:
|
||||||
void remove_dead_buffers();
|
void remove_dead_buffers();
|
||||||
|
|
||||||
bool m_paused { true };
|
bool m_paused { true };
|
||||||
|
bool m_loop = { false };
|
||||||
size_t m_next_ptr { 0 };
|
size_t m_next_ptr { 0 };
|
||||||
size_t m_last_seek { 0 };
|
size_t m_last_seek { 0 };
|
||||||
float m_total_length { 0 };
|
float m_total_length { 0 };
|
||||||
|
|
|
@ -90,6 +90,14 @@ int main(int argc, char** argv)
|
||||||
app->quit();
|
app->quit();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
auto& playback_menu = menubar->add_menu("Playback");
|
||||||
|
|
||||||
|
auto loop = GUI::Action::create_checkable("Loop", { Mod_Ctrl, Key_R }, [&](auto& action) {
|
||||||
|
player.manager().loop(action.is_checked());
|
||||||
|
});
|
||||||
|
|
||||||
|
playback_menu.add_action(move(loop));
|
||||||
|
|
||||||
auto& help_menu = menubar->add_menu("Help");
|
auto& help_menu = menubar->add_menu("Help");
|
||||||
help_menu.add_action(GUI::Action::create("About", [&](auto&) {
|
help_menu.add_action(GUI::Action::create("About", [&](auto&) {
|
||||||
GUI::AboutDialog::show("SoundPlayer", Gfx::Bitmap::load_from_file("/res/icons/32x32/app-sound-player.png"), window);
|
GUI::AboutDialog::show("SoundPlayer", Gfx::Bitmap::load_from_file("/res/icons/32x32/app-sound-player.png"), window);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue