From cb8490996375675872a419928fa36427a9f29a7f Mon Sep 17 00:00:00 2001
From: SeeLook <seelook@gmail.com>
Date: Fri, 12 Aug 2016 14:55:30 +0200
Subject: [PATCH] Inline callbacks (too big) moved to implementation, Adjusted
 input callback to new TpitchFinder

---
 src/libs/sound/trtaudio.cpp   | 35 +++++++++++++++++++++++++++++++
 src/libs/sound/trtaudio.h     | 39 +++++------------------------------
 src/libs/sound/trtaudioin.cpp | 29 +++++++++++++++++++-------
 src/libs/sound/trtaudioin.h   | 16 ++------------
 4 files changed, 64 insertions(+), 55 deletions(-)

diff --git a/src/libs/sound/trtaudio.cpp b/src/libs/sound/trtaudio.cpp
index 1757b3f1e..b84b94a4e 100755
--- a/src/libs/sound/trtaudio.cpp
+++ b/src/libs/sound/trtaudio.cpp
@@ -594,9 +594,44 @@ void TrtAudio::restartASIO() {
 }
 #endif
 
+//#################################################################################################
+//###################              PRIVATE             ############################################
+//#################################################################################################
+int TrtAudio::duplexCallBack(void* outBuffer, void* inBuffer, unsigned int nBufferFrames, double, RtAudioStreamStatus status, void*) {
+  if (m_cbOut) {
+    if (m_cbOut(outBuffer, nBufferFrames, status))
+      if (m_cbIn)
+        m_cbIn(inBuffer, nBufferFrames, status);
+  } else
+      if (m_cbIn)
+        m_cbIn(inBuffer, nBufferFrames, status);
+  return 0;
+}
 
 
+int TrtAudio::passInputCallBack(void* outBuffer, void* inBuffer, unsigned int nBufferFrames, double, RtAudioStreamStatus status, void*) {
+  qint16 *in = (qint16*)inBuffer;
+  qint16 *out = (qint16*)outBuffer;
+  if (m_cbOut(outBuffer, nBufferFrames, status)) // none playing is performed
+      for (int i = 0; i < nBufferFrames; i++) { // then forward input
+          *out++ = *(in + i); // left channel
+          *out++ = *(in + i); // right channel
+      }
+  m_cbIn(inBuffer, nBufferFrames, status);
+  return 0;
+}
 
 
+int TrtAudio::playCallBack(void* outBuffer, void*, unsigned int nBufferFrames, double, RtAudioStreamStatus status, void*) {
+  if (m_cbOut(outBuffer, nBufferFrames, status))
+    ao()->emitPlayingFinished();
+  return 0;
+}
+
+
+int TrtAudio::listenCallBack(void*, void* inBuffer, unsigned int nBufferFrames, double, RtAudioStreamStatus status, void*) {
+  m_cbIn(inBuffer, nBufferFrames, status);
+  return 0;
+}
 
 
diff --git a/src/libs/sound/trtaudio.h b/src/libs/sound/trtaudio.h
index 68484a11e..b5cc98769 100755
--- a/src/libs/sound/trtaudio.h
+++ b/src/libs/sound/trtaudio.h
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2013-2015 by Tomasz Bojczuk                             *
+ *   Copyright (C) 2013-2016 by Tomasz Bojczuk                             *
  *   tomaszbojczuk@gmail.com                                               *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -159,39 +159,10 @@ protected:
 #endif
 
 private:
-	static int duplexCallBack(void *outBuffer, void *inBuffer, unsigned int nBufferFrames, double, RtAudioStreamStatus status, void*) {
-    if (m_cbOut) {
-      if (m_cbOut(outBuffer, nBufferFrames, status))
-        if (m_cbIn)
-          m_cbIn(inBuffer, nBufferFrames, status);
-    } else
-        if (m_cbIn)
-          m_cbIn(inBuffer, nBufferFrames, status);
-    return 0;
-  }
-
-	static int passInputCallBack(void *outBuffer, void *inBuffer, unsigned int nBufferFrames, double, RtAudioStreamStatus status, void*) {
-    qint16 *in = (qint16*)inBuffer;
-    qint16 *out = (qint16*)outBuffer;
-    if (m_cbOut(outBuffer, nBufferFrames, status)) // none playing is performed
-        for (int i = 0; i < nBufferFrames; i++) { // then forward input
-            *out++ = *(in + i); // left channel
-            *out++ = *(in + i); // right channel
-        }
-    m_cbIn(inBuffer, nBufferFrames, status);
-    return 0;
-  }
-
-  static int playCallBack(void *outBuffer, void*, unsigned int nBufferFrames, double, RtAudioStreamStatus status, void*) {
-    if (m_cbOut(outBuffer, nBufferFrames, status))
-      ao()->emitPlayingFinished();
-    return 0;
-  }
-
-  static int listenCallBack(void*, void *inBuffer, unsigned int nBufferFrames, double, RtAudioStreamStatus status, void*) {
-    m_cbIn(inBuffer, nBufferFrames, status);
-    return 0;
-  }
+	static int duplexCallBack(void *outBuffer, void *inBuffer, unsigned int nBufferFrames, double, RtAudioStreamStatus status, void*);
+	static int passInputCallBack(void *outBuffer, void *inBuffer, unsigned int nBufferFrames, double, RtAudioStreamStatus status, void*);
+  static int playCallBack(void *outBuffer, void*, unsigned int nBufferFrames, double, RtAudioStreamStatus status, void*);
+  static int listenCallBack(void*, void *inBuffer, unsigned int nBufferFrames, double, RtAudioStreamStatus status, void*);
 	
 private:
 	TaudioParams													*m_audioParams;
diff --git a/src/libs/sound/trtaudioin.cpp b/src/libs/sound/trtaudioin.cpp
index bb27a97da..1601e7d3f 100755
--- a/src/libs/sound/trtaudioin.cpp
+++ b/src/libs/sound/trtaudioin.cpp
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2011-2015 by Tomasz Bojczuk                             *
+ *   Copyright (C) 2011-2016 by Tomasz Bojczuk                             *
  *   tomaszbojczuk@gmail.com                                               *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -59,11 +59,11 @@ TaudioIN::TaudioIN(TaudioParams* params, QObject* parent) :
   TrtAudio(params, e_input, inCallBack),
   m_pitch(0),
   m_volume(0.0),
-  m_state(e_stopped),
   m_stoppedByUser(false),
   m_loPitch(15), m_hiPitch(140),
   m_noteWasStarted(false),
-  m_currentRange(1)
+  m_currentRange(1),
+  m_state(e_stopped)
 {
   if (m_instance) {
     qDebug() << "Nothing of this kind... TaudioIN already exist!";
@@ -85,10 +85,12 @@ TaudioIN::TaudioIN(TaudioParams* params, QObject* parent) :
 
 TaudioIN::~TaudioIN()
 {
+  stopListening();
 	m_goingDelete = true;
   closeStream();
 	m_pitch->blockSignals(true);
-	m_pitch->deleteLater();
+// 	m_pitch->deleteLater();
+  delete m_pitch;
   m_instance = 0;
   deleteInParams();
   resetCallBack();
@@ -187,7 +189,7 @@ void TaudioIN::startListening() {
         openStream();
       if (startStream())
         setState(e_listening);
-// 			qDebug() << "start listening";
+			qDebug() << "start listening";
 		}
   }
 }
@@ -195,13 +197,13 @@ void TaudioIN::startListening() {
 
 void TaudioIN::stopListening() {
   if (state() != e_stopped) {
-//     qDebug() << "stop listening";
+    qDebug() << "stop listening";
     m_volume = 0.0;
     m_LastChunkPitch = 0.0;
 		if (areStreamsSplit() || rtDevice()->getCurrentApi() != RtAudio::LINUX_PULSE)
 			abortStream();
     setState(e_stopped);
-    m_pitch->resetFinder();
+    m_pitch->stop(true);
   }
 }
 
@@ -240,6 +242,19 @@ void TaudioIN::noteFinishedSlot(TnoteStruct* lastNote) {
 			m_lastNote.set(); // reset last detected note structure
 }
 
+//#################################################################################################
+//###################              PROTECTED           ############################################
+//#################################################################################################
+bool TaudioIN::inCallBack(void* inBuff, unsigned int nBufferFrames, const RtAudioStreamStatus& st) {
+  if (m_goingDelete || instance()->isStoped())
+    return true;
+  if (st)
+    qDebug() << "input buffer underflow";
+
+  instance()->m_pitch->copyToBuffer(inBuff, nBufferFrames);
+  return false;
+}
+
 //#################################################################################################
 //###################               PRIVATE SLOTS      ############################################
 //#################################################################################################
diff --git a/src/libs/sound/trtaudioin.h b/src/libs/sound/trtaudioin.h
index 87d5c00ff..cbac576fd 100755
--- a/src/libs/sound/trtaudioin.h
+++ b/src/libs/sound/trtaudioin.h
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2011-2015 by Tomasz Bojczuk                             *
+ *   Copyright (C) 2011-2016 by Tomasz Bojczuk                             *
  *   tomaszbojczuk@gmail.com                                               *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -129,19 +129,7 @@ public slots:
 	void stopListening();
   
 protected:
-	static bool inCallBack(void* inBuff, unsigned int nBufferFrames, const RtAudioStreamStatus& st) {
-    if (m_goingDelete || instance()->isStoped())
-      return true;
-    if (st)
-      qDebug() << "input buffer underflow";
-    qint16 *in = (qint16*)inBuff;
-    qint16 value;
-    for (int i = 0; i < nBufferFrames; i++) {
-          value = *(in + i);
-          instance()->m_pitch->fillBuffer(float(double(value) / 32760.0f));
-    }
-    return false;
-	}
+	static bool inCallBack(void* inBuff, unsigned int nBufferFrames, const RtAudioStreamStatus& st);
   
 
 private slots:
-- 
GitLab