From 41df207bb963ea1f29b72ae132ac3f79b0ea38c6 Mon Sep 17 00:00:00 2001 From: Denny Sheirer Date: Mon, 23 Mar 2020 08:45:06 +0000 Subject: [PATCH] Resolves #694. Address null pointer when no system audio devices are available. (#695) Co-authored-by: Denny --- .../audio/playback/AudioPlaybackManager.java | 20 +++++++++++----- .../playback/PlaybackPreference.java | 23 ++++++++++++------- .../record/AudioRecordingManager.java | 13 +++++++++++ 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/github/dsheirer/audio/playback/AudioPlaybackManager.java b/src/main/java/io/github/dsheirer/audio/playback/AudioPlaybackManager.java index b849263c..35d2af58 100644 --- a/src/main/java/io/github/dsheirer/audio/playback/AudioPlaybackManager.java +++ b/src/main/java/io/github/dsheirer/audio/playback/AudioPlaybackManager.java @@ -81,15 +81,23 @@ public class AudioPlaybackManager implements Listener, IAudioContr MyEventBus.getEventBus().register(this); MixerChannelConfiguration configuration = mUserPreferences.getPlaybackPreference().getMixerChannelConfiguration(); - try + + if(configuration != null) { - setMixerChannelConfiguration(configuration); + try + { + setMixerChannelConfiguration(configuration); + } + catch(AudioException ae) + { + mLog.error("Error during setup of audio playback configuration. Attempted to use audio mixer [" + + (configuration != null ? configuration.getMixer().toString() : "null") + "] and channel [" + + (configuration != null ? configuration.getMixerChannel().name() : "null") + "]", ae); + } } - catch(AudioException ae) + else { - mLog.error("Error during setup of audio playback configuration. Attempted to use audio mixer [" + - (configuration != null ? configuration.getMixer().toString() : "null") + "] and channel [" + - (configuration != null ? configuration.getMixerChannel().name() : "null") + "]", ae); + mLog.warn("No audio output devices available"); } } diff --git a/src/main/java/io/github/dsheirer/preference/playback/PlaybackPreference.java b/src/main/java/io/github/dsheirer/preference/playback/PlaybackPreference.java index dd2d8726..aceeae12 100644 --- a/src/main/java/io/github/dsheirer/preference/playback/PlaybackPreference.java +++ b/src/main/java/io/github/dsheirer/preference/playback/PlaybackPreference.java @@ -350,19 +350,26 @@ public class PlaybackPreference extends Preference { MixerChannelConfiguration defaultConfig = MixerManager.getDefaultOutputMixer(); - String configName = mPreferences.get(PREFERENCE_KEY_MIXER_CHANNEL_CONFIG, defaultConfig.toString()); - - for(MixerChannelConfiguration config: MixerManager.getOutputMixers()) + if(defaultConfig != null) { - if(config.toString().contentEquals(configName)) + String configName = mPreferences.get(PREFERENCE_KEY_MIXER_CHANNEL_CONFIG, defaultConfig.toString()); + + for(MixerChannelConfiguration config: MixerManager.getOutputMixers()) { - mMixerChannelConfiguration = config; + if(config.toString().contentEquals(configName)) + { + mMixerChannelConfiguration = config; + } + } + + if(mMixerChannelConfiguration == null) + { + mMixerChannelConfiguration = defaultConfig; } } - - if(mMixerChannelConfiguration == null) + else { - mMixerChannelConfiguration = defaultConfig; + mLog.error("Error - no system audio devices available"); } } diff --git a/src/main/java/io/github/dsheirer/record/AudioRecordingManager.java b/src/main/java/io/github/dsheirer/record/AudioRecordingManager.java index 11018131..90100242 100644 --- a/src/main/java/io/github/dsheirer/record/AudioRecordingManager.java +++ b/src/main/java/io/github/dsheirer/record/AudioRecordingManager.java @@ -105,6 +105,19 @@ public class AudioRecordingManager implements Listener */ public void processCompletedAudioSegment(AudioSegment audioSegment) { + //Debug + if(audioSegment.getAudioBufferCount() == 0) + { + mLog.debug("Audio Segment detected with 0 audio buffers"); + } + + List toIdentifiers = audioSegment.getIdentifierCollection().getIdentifiers(Role.TO); + + if(toIdentifiers.isEmpty()) + { + mLog.debug("Audio Segment detected with NO TO identifiers"); + } + if(audioSegment.recordAudioProperty().get()) { mCompletedAudioSegmentQueue.add(audioSegment);