zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit 216b921e61c0bc883a13fc45c439cc0a5cf679cb
parent a8db2ca9d6be2c12b9d6982dce8acca056cc0750
Author: fundamental <mark.d.mccurry@gmail.com>
Date:   Thu, 20 May 2010 08:28:46 -0400

ALSA: misc fixes

Diffstat:
Msrc/Nio/AlsaEngine.cpp | 14++++++++------
Msrc/Nio/AlsaEngine.h | 2+-
2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/Nio/AlsaEngine.cpp b/src/Nio/AlsaEngine.cpp @@ -53,8 +53,7 @@ void *AlsaEngine::_AudioThread(void *arg) void *AlsaEngine::AudioThread() { set_realtime(); - processAudio(); - return NULL; + return processAudio(); } bool AlsaEngine::Start() @@ -68,6 +67,7 @@ void AlsaEngine::Stop() setMidiEn(false); if(getAudioEn()) setAudioEn(false); + snd_config_update_free_global(); } void AlsaEngine::setMidiEn(bool nval) @@ -107,7 +107,7 @@ void *AlsaEngine::MidiThread(void) snd_seq_event_t *event; MidiEvent ev; set_realtime(); - while (snd_seq_event_input(midi.handle, &event) > 0) + while(snd_seq_event_input(midi.handle, &event) > 0) { //ensure ev is empty ev.channel = 0; @@ -311,6 +311,7 @@ bool AlsaEngine::openAudio() //snd_pcm_hw_params_get_period_size(audio.params, &audio.frames, NULL); //snd_pcm_hw_params_get_period_time(audio.params, &val, NULL); + pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); @@ -327,10 +328,11 @@ void AlsaEngine::stopAudio() audio.handle = NULL; pthread_join(audio.pThread, NULL); snd_pcm_drain(handle); - snd_pcm_close(handle); + if(snd_pcm_close(handle)) + cout << "Error: in snd_pcm_close " << __LINE__ << ' ' << __FILE__ << endl; } -void AlsaEngine::processAudio() +void *AlsaEngine::processAudio() { int rc; while (audio.handle) { @@ -347,5 +349,5 @@ void AlsaEngine::processAudio() else if (rc < 0) cerr << "error from writei: " << snd_strerror(rc) << endl; } - pthread_exit(NULL); + return NULL; } diff --git a/src/Nio/AlsaEngine.h b/src/Nio/AlsaEngine.h @@ -76,7 +76,7 @@ class AlsaEngine : public AudioOut, MidiIn pthread_t pThread; } audio; - void processAudio(); + void *processAudio(); }; #endif