diff --git a/src/record/RecorderManager.java b/src/record/RecorderManager.java index b9941926..949ac241 100644 --- a/src/record/RecorderManager.java +++ b/src/record/RecorderManager.java @@ -17,10 +17,10 @@ ******************************************************************************/ package record; - import java.io.File; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,6 +33,7 @@ import audio.AudioPacket; import audio.metadata.Metadata; import audio.metadata.MetadataType; import controller.ThreadPoolManager; +import controller.ThreadPoolManager.ThreadType; public class RecorderManager implements Listener { @@ -43,6 +44,8 @@ public class RecorderManager implements Listener private Map mRecorders = new HashMap<>(); private ThreadPoolManager mThreadPoolManager; + + private boolean mCanStartNewRecorders = true; public RecorderManager( ThreadPoolManager threadPoolManager ) { @@ -78,16 +81,29 @@ public class RecorderManager implements Listener } else if( audioPacket.getType() == AudioPacket.Type.AUDIO ) { - String filePrefix = getFilePrefix( audioPacket ); - - RealBufferWaveRecorder recorder = - new RealBufferWaveRecorder( mThreadPoolManager, - AUDIO_SAMPLE_RATE, filePrefix ); - - recorder.start(); + if( mCanStartNewRecorders ) + { + String filePrefix = getFilePrefix( audioPacket ); - recorder.receive( audioPacket.getAudioBuffer() ); - mRecorders.put( identifier, recorder ); + try + { + RealBufferWaveRecorder recorder = + new RealBufferWaveRecorder( mThreadPoolManager, + AUDIO_SAMPLE_RATE, filePrefix ); + + recorder.start(); + + recorder.receive( audioPacket.getAudioBuffer() ); + mRecorders.put( identifier, recorder ); + } + catch( Exception ioe ) + { + mCanStartNewRecorders = false; + + mLog.error( "Error attempting to start new audio wave recorder." + + " All (future) audio recording is disabled", ioe ); + } + } } } }