diff options
Diffstat (limited to 'dgedit/player.cc')
-rw-r--r-- | dgedit/player.cc | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/dgedit/player.cc b/dgedit/player.cc index b916920..5f5c344 100644 --- a/dgedit/player.cc +++ b/dgedit/player.cc @@ -46,8 +46,8 @@ Player::Player() Player::~Player() { - ao_close(dev); - ao_shutdown(); + running = false; // Signal player thread to stop + wait(); // Wait for player thread to stop. } void Player::run() @@ -62,8 +62,10 @@ void Player::run() dev = ao_open_live(ao_default_driver_id(), &sf, 0); + running = true; + short s[BUFSZ]; - while(true) { + while(running) { if(playing) { for(size_t i = 0; i < BUFSZ; i++) { double sample = 0.0; @@ -84,6 +86,9 @@ void Player::run() msleep(22); } } + + ao_close(dev); + ao_shutdown(); } void Player::setGainScalar(double g) |