Skip to content
Snippets Groups Projects
Commit cb849099 authored by SeeLook's avatar SeeLook :musical_note:
Browse files

Inline callbacks (too big) moved to implementation, Adjusted input callback to new TpitchFinder

parent 66798a81
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
/***************************************************************************
* 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;
......
/***************************************************************************
* 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 ############################################
//#################################################################################################
......
/***************************************************************************
* 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:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment