Resolves #680 Audio Do Not Monitor is not working. Adds audio segment drop tone to indicate that an audio playback is dropped because the do not monitor setting was applied after the audio segment started. (#681)

Co-authored-by: Denny <denny@denny-desktop>
This commit is contained in:
Denny Sheirer
2020-03-20 12:31:35 +00:00
committed by GitHub
parent 23a3ee39cc
commit 604c8ab6e5
6 changed files with 299 additions and 25 deletions

View File

@@ -38,12 +38,18 @@ import java.util.prefs.Preferences;
*/
public class PlaybackPreference extends Preference
{
private static final String PREFERENCE_KEY_USE_AUDIO_SEGMENT_DROP_TONE = "audio.playback.segment.drop.tone";
private static final String PREFERENCE_KEY_DROP_TONE_FREQUENCY = "audio.playback.segment.drop.frequency";
private static final String PREFERENCE_KEY_DROP_TONE_VOLUME = "audio.playback.segment.drop.volume";
private static final String PREFERENCE_KEY_USE_AUDIO_SEGMENT_PREEMPT_TONE = "audio.playback.segment.preempt.tone";
private static final String PREFERENCE_KEY_PREEMPT_TONE_FREQUENCY = "audio.playback.segment.preempt.frequency";
private static final String PREFERENCE_KEY_PREEMPT_TONE_VOLUME = "audio.playback.segment.preempt.volume";
private static final String PREFERENCE_KEY_USE_AUDIO_SEGMENT_START_TONE = "audio.playback.segment.start.tone";
private static final String PREFERENCE_KEY_START_TONE_FREQUENCY = "audio.playback.segment.start.frequency";
private static final String PREFERENCE_KEY_START_TONE_VOLUME = "audio.playback.segment.start.volume";
private static final String PREFERENCE_KEY_PREEMPT_TONE_FREQUENCY = "audio.playback.segment.preempt.frequency";
private static final String PREFERENCE_KEY_PREEMPT_TONE_VOLUME = "audio.playback.segment.preempt.volume";
private static final String PREFERENCE_KEY_MIXER_CHANNEL_CONFIG = "audio.playback.mixer.channel.configuration";
private static final int TONE_LENGTH_SAMPLES = 180;
@@ -51,10 +57,13 @@ public class PlaybackPreference extends Preference
private Preferences mPreferences = Preferences.userNodeForPackage(PlaybackPreference.class);
private Boolean mUseAudioSegmentStartTone;
private Boolean mUseAudioSegmentPreemptTone;
private Boolean mUseAudioSegmentDropTone;
private ToneFrequency mStartToneFrequency;
private ToneVolume mStartToneVolume;
private ToneFrequency mPreemptToneFrequency;
private ToneVolume mPreemptToneVolume;
private ToneFrequency mDropToneFrequency;
private ToneVolume mDropToneVolume;
private MixerChannelConfiguration mMixerChannelConfiguration;
/**
@@ -72,6 +81,29 @@ public class PlaybackPreference extends Preference
return PreferenceType.PLAYBACK;
}
/**
* Indicates if an audio segment drop tone should be used.
*/
public boolean getUseAudioSegmentDropTone()
{
if(mUseAudioSegmentDropTone == null)
{
mUseAudioSegmentDropTone = mPreferences.getBoolean(PREFERENCE_KEY_USE_AUDIO_SEGMENT_DROP_TONE, true);
}
return mUseAudioSegmentDropTone;
}
/**
* Sets the preference for using an audio segment drop tone
*/
public void setUseAudioSegmentDropTone(boolean use)
{
mUseAudioSegmentDropTone = use;
mPreferences.putBoolean(PREFERENCE_KEY_USE_AUDIO_SEGMENT_DROP_TONE, use);
notifyPreferenceUpdated();
}
/**
* Indicates if an audio segment start tone should be used.
*/
@@ -118,6 +150,30 @@ public class PlaybackPreference extends Preference
notifyPreferenceUpdated();
}
/**
* Frequency for the drop tone
*/
public ToneFrequency getDropToneFrequency()
{
if(mDropToneFrequency == null)
{
int frequency = mPreferences.getInt(PREFERENCE_KEY_DROP_TONE_FREQUENCY, ToneFrequency.F500.getValue());
mDropToneFrequency = ToneFrequency.fromValue(frequency);
}
return mDropToneFrequency;
}
/**
* Sets the frequency for the drop tone
*/
public void setDropToneFrequency(ToneFrequency toneFrequency)
{
mDropToneFrequency = toneFrequency;
mPreferences.putInt(PREFERENCE_KEY_DROP_TONE_FREQUENCY, toneFrequency.getValue());
notifyPreferenceUpdated();
}
/**
* Frequency for the start tone
*/
@@ -166,6 +222,30 @@ public class PlaybackPreference extends Preference
notifyPreferenceUpdated();
}
/**
* Drop tone volume
*/
public ToneVolume getDropToneVolume()
{
if(mDropToneVolume == null)
{
int volume = mPreferences.getInt(PREFERENCE_KEY_DROP_TONE_VOLUME, ToneVolume.V3.getValue());
mDropToneVolume = ToneVolume.fromValue(volume);
}
return mDropToneVolume;
}
/**
* Sets the drop tone volume
*/
public void setDropToneVolume(ToneVolume toneVolume)
{
mDropToneVolume = toneVolume;
mPreferences.putInt(PREFERENCE_KEY_DROP_TONE_VOLUME, toneVolume.getValue());
notifyPreferenceUpdated();
}
/**
* Start tone volume
*/
@@ -240,6 +320,19 @@ public class PlaybackPreference extends Preference
return null;
}
/**
* Buffer with samples for the audio segment drop tone
*/
public float[] getDropTone()
{
if(getUseAudioSegmentDropTone())
{
return ToneUtil.getTone(getDropToneFrequency(), getDropToneVolume(), TONE_LENGTH_SAMPLES);
}
return null;
}
/**
* Test tone to use for testing the currently selected mixer output
*/