From 82a6e3cfe8afc3f3f897d7926f7b42c3e9455ba1 Mon Sep 17 00:00:00 2001
From: Florent Berthaut <florent.berthaut@univ-lille.fr>
Date: Mon, 3 Apr 2023 19:09:14 +0200
Subject: [PATCH] Fixed crash when jack is not started

---
 src/audio/AudioManager.cpp | 42 +++++++++++++++++++++++---------------
 1 file changed, 25 insertions(+), 17 deletions(-)

diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp
index 96a1c70..9c8812e 100644
--- a/src/audio/AudioManager.cpp
+++ b/src/audio/AudioManager.cpp
@@ -111,28 +111,36 @@ void AudioManager::init() {
 
 	m_rtBufSize = 1024;
 
-    m_rtAudio->openStream(param, NULL, RTAUDIO_FLOAT32, data.nRate, 
+	bool init=true;
+    try{
+		m_rtAudio->openStream(param, NULL, RTAUDIO_FLOAT32, data.nRate, 
 					&m_rtBufSize, 
-					AudioManager::rtaudio_callback, &data, options);
+					AudioManager::rtaudio_callback, &data, options); 
+	}
+	catch(const exception& e) {
+		init=false;
+	}
 
-	int nbBufs = 5;
-    m_bufSize = m_rtBufSize*nbBufs;
+	if(init) {
+		int nbBufs = 5;
+		m_bufSize = m_rtBufSize*nbBufs;
 
-    data.ringBuffer = ringbuffer_create(m_bufSize*3);
+		data.ringBuffer = ringbuffer_create(m_bufSize*3);
 
-    data.nChannel = param->nChannels;
-	data.bufSize = m_bufSize;
-    data.buffer = new float[m_bufSize];
-	data.nbBufs = nbBufs;
-	data.bufCounter = 0;
-    memset(&data.buffer[0], 0, data.bufSize*sizeof(float));
+		data.nChannel = param->nChannels;
+		data.bufSize = m_bufSize;
+		data.buffer = new float[m_bufSize];
+		data.nbBufs = nbBufs;
+		data.bufCounter = 0;
+		memset(&data.buffer[0], 0, data.bufSize*sizeof(float));
 
-	data.mixSize = m_rtBufSize;
-    data.mixBuffer = new float[data.mixSize];
-    memset(&data.mixBuffer[0], 0, data.mixSize*sizeof(float));
+		data.mixSize = m_rtBufSize;
+		data.mixBuffer = new float[data.mixSize];
+		memset(&data.mixBuffer[0], 0, data.mixSize*sizeof(float));
 
-    m_thread = new std::thread(audioThreadFunction, this);
-	m_init = true;
+		m_thread = new std::thread(audioThreadFunction, this);
+		m_init = true;
+	}
 }
 
 
@@ -147,9 +155,9 @@ bool AudioManager::changeBuf(float* outputBuf, float maxSinValue) {
 		}
 		else {
 			//cout<<"AudioManager : Could not write buffer"<<endl;
-			return false;
 		}
 	}
+	return false;
 }
 
 
-- 
GitLab