diff options
| author | Tim E. Real <termtech@rogers.com> | 2013-05-08 08:52:52 +0000 | 
|---|---|---|
| committer | Tim E. Real <termtech@rogers.com> | 2013-05-08 08:52:52 +0000 | 
| commit | 2c1f2f49d2ac878c13f9c59d86166a62bbd7573d (patch) | |
| tree | 96bb20b3f43823fa51cf49cfa25fae49f73882ce /muse2/muse/driver | |
| parent | 8a491e19e6520f2680bf51aec1ca7e2070ccaec7 (diff) | |
Yet another MAJOR audio engine and plugin/synth process chain re-write. 
And much more, see ChangeLog, May 8 2013.
Diffstat (limited to 'muse2/muse/driver')
| -rw-r--r-- | muse2/muse/driver/audiodev.h | 1 | ||||
| -rw-r--r-- | muse2/muse/driver/dummyaudio.cpp | 21 | ||||
| -rw-r--r-- | muse2/muse/driver/jack.cpp | 45 | ||||
| -rw-r--r-- | muse2/muse/driver/jackaudio.h | 1 | 
4 files changed, 60 insertions, 8 deletions
diff --git a/muse2/muse/driver/audiodev.h b/muse2/muse/driver/audiodev.h index 08d6a9f0..d060b138 100644 --- a/muse2/muse/driver/audiodev.h +++ b/muse2/muse/driver/audiodev.h @@ -75,6 +75,7 @@ class AudioDevice {        virtual void setPortName(void* p, const char* n) = 0;        virtual void* findPort(const char* name) = 0;        virtual QString portName(void* port) = 0; +      virtual unsigned int portLatency(void* port, bool capture) const = 0;        virtual int getState() = 0;        virtual unsigned getCurFrame() const = 0;        virtual bool isRealtime() = 0; diff --git a/muse2/muse/driver/dummyaudio.cpp b/muse2/muse/driver/dummyaudio.cpp index 172638b4..4e37bc33 100644 --- a/muse2/muse/driver/dummyaudio.cpp +++ b/muse2/muse/driver/dummyaudio.cpp @@ -135,6 +135,7 @@ class DummyAudioDevice : public AudioDevice {        virtual QString portName(void*) {              return QString("mops");              } +      virtual unsigned int portLatency(void* /*port*/, bool /*capture*/) const { return 0; }        virtual int getState() {   //            if(DEBUG_DUMMY)  //                printf("DummyAudioDevice::getState %d\n", state); @@ -224,17 +225,22 @@ DummyAudioDevice* dummyAudio = 0;  DummyAudioDevice::DummyAudioDevice()         { -      // Added by Tim. p3.3.15 -      // p3.3.30 -      //posix_memalign((void**)&buffer, 16, sizeof(float) * dummyFrames); - -      int rv = posix_memalign((void**)&buffer, 16, sizeof(float) * MusEGlobal::config.dummyAudioBufSize); +      MusEGlobal::sampleRate = MusEGlobal::config.dummyAudioSampleRate; +      MusEGlobal::segmentSize = MusEGlobal::config.dummyAudioBufSize; +      int rv = posix_memalign((void**)&buffer, 16, sizeof(float) * MusEGlobal::segmentSize);        if(rv != 0)        {          fprintf(stderr, "ERROR: DummyAudioDevice ctor: posix_memalign returned error:%d. Aborting!\n", rv);          abort();        } -       +      if(MusEGlobal::config.useDenormalBias) +      { +        for(unsigned q = 0; q < MusEGlobal::segmentSize; ++q) +          buffer[q] = MusEGlobal::denormalBias; +      } +      else +        memset(buffer, 0, sizeof(float) * MusEGlobal::segmentSize); +        dummyThread = 0;        realtimeFlag = false;        seekflag = false; @@ -310,9 +316,8 @@ static void* dummyLoop(void* ptr)        // p3.3.30        //MusEGlobal::sampleRate = 25600; -      MusEGlobal::sampleRate = MusEGlobal::config.dummyAudioSampleRate;        //MusEGlobal::segmentSize = dummyFrames; -      MusEGlobal::segmentSize = MusEGlobal::config.dummyAudioBufSize; +//       MusEGlobal::segmentSize = MusEGlobal::config.dummyAudioBufSize;  #if 0              //unsigned int tickRate = MusEGlobal::sampleRate / dummyFrames;        unsigned int tickRate = MusEGlobal::sampleRate / MusEGlobal::segmentSize; diff --git a/muse2/muse/driver/jack.cpp b/muse2/muse/driver/jack.cpp index 3deaf160..b1321cbc 100644 --- a/muse2/muse/driver/jack.cpp +++ b/muse2/muse/driver/jack.cpp @@ -1557,6 +1557,51 @@ QString JackAudioDevice::portName(void* port)        }  //--------------------------------------------------------- +//   portLatency +//   If capture is true get the capture latency, +//    otherwise get the playback latency. +//--------------------------------------------------------- + +unsigned int JackAudioDevice::portLatency(void* port, bool capture) const +{ +  // TODO: Experimental code... Finish it... +   +  if(!checkJackClient(_client) || !port) +    return 0; + +  QString s(jack_port_name((jack_port_t*)port)); +  //fprintf(stderr, "Jack::portName %p %s\n", port, s.toLatin1().constData());   +   +  jack_latency_range_t p_range; +  jack_port_get_latency_range((jack_port_t*)port, JackPlaybackLatency, &p_range); +  //fprintf(stderr, "JackAudioDevice::portLatency playback min:%u max:%u\n", p_range.min, p_range.max);   +  if(p_range.max != p_range.min) +  { +    //fprintf(stderr, "JackAudioDevice::portLatency min:%u != max:%u\n", p_range.min, p_range.max);   +    //return (p_range.max - p_range.min) / 2; +  } +   +  jack_latency_range_t c_range; +  jack_port_get_latency_range((jack_port_t*)port, JackCaptureLatency, &c_range); +  //fprintf(stderr, "JackAudioDevice::portLatency capture min:%u max:%u\n", c_range.min, c_range.max);   +  if(c_range.max != c_range.min) +  { +    //fprintf(stderr, "JackAudioDevice::portLatency capture min:%u != max:%u\n", c_range.min, c_range.max);   + +    // TODO TEST Decide which method to use. Although, it is arbitrary. +    //return (c_range.max - c_range.min) / 2;   +    //return c_range.max; +  } + +  if(capture) +    //return (c_range.max - c_range.min) / 2; +    return c_range.max; +   +  //return (p_range.max - p_range.min) / 2; +  return p_range.max; +} + +//---------------------------------------------------------  //   unregisterPort  //--------------------------------------------------------- diff --git a/muse2/muse/driver/jackaudio.h b/muse2/muse/driver/jackaudio.h index aab60d88..fd47de07 100644 --- a/muse2/muse/driver/jackaudio.h +++ b/muse2/muse/driver/jackaudio.h @@ -96,6 +96,7 @@ class JackAudioDevice : public AudioDevice {        virtual void setPortName(void* p, const char* n) { jack_port_set_name((jack_port_t*)p, n); }        virtual void* findPort(const char* name);        virtual QString portName(void* port); +      virtual unsigned int portLatency(void* port, bool capture) const;        virtual int getState();        virtual unsigned int getCurFrame() const;        virtual bool isRealtime()          { return jack_is_realtime(_client); }  | 
