zynaddsubfx

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

commit 5340acef85c8a1e25c54365b0021435aac5f3491
parent 5392de0a2979968c217d79c0eaec84e0a690803c
Author: fundamental <mark.d.mccurry@gmail.com>
Date:   Wed, 16 Dec 2009 12:02:37 -0500

ALSA: fixed reinitialization of superclasses data

Diffstat:
Msrc/Misc/Atomic.cpp | 3++-
Msrc/Nio/AlsaEngine.cpp | 14+++++++-------
Msrc/Nio/AudioOut.cpp | 3++-
3 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/src/Misc/Atomic.cpp b/src/Misc/Atomic.cpp @@ -51,7 +51,8 @@ T Atomic<T>::operator()() const } template<class T> -T Atomic<T>::operator++(){ +T Atomic<T>::operator++() +{ T tmp; pthread_mutex_lock(&mutex); tmp = ++value; diff --git a/src/Nio/AlsaEngine.cpp b/src/Nio/AlsaEngine.cpp @@ -43,10 +43,6 @@ AlsaEngine::AlsaEngine(OutMgr *out) // midi.pThread = 0; threadStop = true; - pthread_mutex_init(&outBuf_mutex, NULL); - pthread_cond_init (&outBuf_cv, NULL); - manager = sysOut; - } //bool AlsaEngine::openMidi() @@ -196,6 +192,8 @@ bool AlsaEngine::xrunRecover() bool AlsaEngine::Start() { + if(enabled()) + return; OpenStuff(); int chk; pthread_attr_t attr; @@ -226,6 +224,8 @@ bail_out: void AlsaEngine::Stop() { + if(!enabled()) + return; threadStop = true; enabled = false; @@ -355,7 +355,7 @@ void AlsaEngine::OpenStuff() { /* Open PCM device for playback. */ handle=NULL; - rc = snd_pcm_open(&handle, "default", + rc = snd_pcm_open(&handle, "hw:0", SND_PCM_STREAM_PLAYBACK, 0); if (rc < 0) { fprintf(stderr, @@ -425,7 +425,7 @@ void AlsaEngine::RunStuff() } else if (rc < 0) cerr << "error from writei: " << snd_strerror(rc) << endl; - else if (rc != (int)frames) - cerr << "short write, write " << rc << "frames" << endl; + //else if (rc != (int)frames) + // cerr << "short write, write " << rc << "frames" << endl; } } diff --git a/src/Nio/AudioOut.cpp b/src/Nio/AudioOut.cpp @@ -48,9 +48,10 @@ const Stereo<Sample> AudioOut::getNext() pthread_mutex_lock(&outBuf_mutex); bool isEmpty = outBuf.empty(); pthread_mutex_unlock(&outBuf_mutex); + if(isEmpty)//fetch samples if possible { - if(manager->getRunning()<BUFF_SIZE) + if(manager->getRunning() < BUFF_SIZE) manager->requestSamples(BUFF_SIZE-manager->getRunning()); if(true) cout << "-----------------Starvation------------------"<< endl;