/* HTS_Audio_close: close audio device */ void HTS_Audio_close(HTS_Audio * as) { MMRESULT error; if (as->buff_size != 0) HTS_Audio_write_buffer(as); while (as->now_buff_1 == TRUE) Sleep(AUDIO_WAIT_BUFF_MS); while (as->now_buff_2 == TRUE) Sleep(AUDIO_WAIT_BUFF_MS); /* stop audio */ error = waveOutReset(as->hwaveout); if (error != MMSYSERR_NOERROR) HTS_error(0, "hts_engine: Cannot stop and reset your output audio device.\n"); /* unprepare */ error = waveOutUnprepareHeader(as->hwaveout, &(as->buff_1), sizeof(WAVEHDR)); if (error != MMSYSERR_NOERROR) HTS_error(0, "hts_engine: Cannot cleanup the audio datablocks to play waveform.\n"); error = waveOutUnprepareHeader(as->hwaveout, &(as->buff_2), sizeof(WAVEHDR)); if (error != MMSYSERR_NOERROR) HTS_error(0, "hts_engine: Cannot cleanup the audio datablocks to play waveform.\n"); /* close */ error = waveOutClose(as->hwaveout); if (error != MMSYSERR_NOERROR) HTS_error(0, "hts_engine: Failed to close your output audio device.\n"); HTS_free(as->buff_1.lpData); HTS_free(as->buff_2.lpData); HTS_free(as->buff); }
/* HTS_Audio_write: send data to audio */ void HTS_Audio_write(HTS_Audio * audio, short data) { audio->buff[audio->buff_size++] = data; if (audio->buff_size == audio->max_buff_size) { HTS_Audio_write_buffer(audio); audio->buff_size = 0; } }
/* HTS_Audio_write: send data to audio device */ void HTS_Audio_write(HTS_Audio * as, short data) { as->buff[as->buff_size] = data; as->buff_size++; if (as->buff_size == as->max_buff_size) { HTS_Audio_write_buffer(as); as->buff_size = 0; } }
/* HTS_Audio_flush: flush remain data */ void HTS_Audio_flush(HTS_Audio * audio) { if (audio->buff_size > 0) { HTS_Audio_write_buffer(audio); audio->buff_size = 0; } while (audio->now_buff_1 == TRUE) Sleep(AUDIO_WAIT_BUFF_MS); while (audio->now_buff_2 == TRUE) Sleep(AUDIO_WAIT_BUFF_MS); }