| @@ -1338,8 +1338,14 @@ void AudioPlaySDcardWAV::stop(void) | |||
| { | |||
| __disable_irq(); | |||
| if (state != STATE_STOP) { | |||
| audio_block_t *b1 = block_left; | |||
| block_left = NULL; | |||
| audio_block_t *b2 = block_right; | |||
| block_right = NULL; | |||
| state = STATE_STOP; | |||
| __enable_irq(); | |||
| if (b1) release(b1); | |||
| if (b2) release(b2); | |||
| wavfile.close(); | |||
| } else { | |||
| __enable_irq(); | |||
| @@ -1402,8 +1408,14 @@ void AudioPlaySDcardWAV::update(void) | |||
| } else { | |||
| // not good, no audio was transmitted | |||
| buffer_remaining = 0; | |||
| if (block_left) release(block_left); | |||
| if (block_right) release(block_right); | |||
| if (block_left) { | |||
| release(block_left); | |||
| block_left = NULL; | |||
| } | |||
| if (block_right) { | |||
| release(block_right); | |||
| block_right = NULL; | |||
| } | |||
| // if we're still playing, well, there's going to | |||
| // be a gap in output, but we can't keep burning | |||
| // time trying to read more data. Hopefully things | |||
| @@ -1413,6 +1425,14 @@ void AudioPlaySDcardWAV::update(void) | |||
| } | |||
| // end of file reached or other reason to stop | |||
| wavfile.close(); | |||
| if (block_left) { | |||
| release(block_left); | |||
| block_left = NULL; | |||
| } | |||
| if (block_right) { | |||
| release(block_right); | |||
| block_right = NULL; | |||
| } | |||
| state_play = STATE_STOP; | |||
| state = STATE_STOP; | |||
| } | |||