feat(lua): Add API for overriding speaker volume (#3784)
This commit is contained in:
+18
-12
@@ -556,6 +556,9 @@ int WavContext::mixBuffer(AudioBuffer *buffer, int volume, unsigned int fade)
|
||||
FRESULT result = FR_OK;
|
||||
UINT read = 0;
|
||||
|
||||
if(fragment.fragmentVolume != USE_SETTINGS_VOLUME)
|
||||
volume = fragment.fragmentVolume;
|
||||
|
||||
if (fragment.file[1]) {
|
||||
result = f_open(&state.file, fragment.file, FA_OPEN_EXISTING | FA_READ);
|
||||
fragment.file[1] = 0;
|
||||
@@ -652,6 +655,9 @@ int ToneContext::mixBuffer(AudioBuffer * buffer, int volume, unsigned int fade)
|
||||
int duration = 0;
|
||||
int result = 0;
|
||||
|
||||
if(fragment.fragmentVolume != USE_SETTINGS_VOLUME)
|
||||
volume = fragment.fragmentVolume;
|
||||
|
||||
int remainingDuration = fragment.tone.duration - state.duration;
|
||||
if (remainingDuration > 0) {
|
||||
int points;
|
||||
@@ -837,7 +843,7 @@ bool AudioQueue::isPlaying(uint8_t id)
|
||||
fragmentsFifo.hasPromptId(id);
|
||||
}
|
||||
|
||||
void AudioQueue::playTone(uint16_t freq, uint16_t len, uint16_t pause, uint8_t flags, int8_t freqIncr)
|
||||
void AudioQueue::playTone(uint16_t freq, uint16_t len, uint16_t pause, uint8_t flags, int8_t freqIncr, int8_t fragmentVolume)
|
||||
{
|
||||
#if defined(SIMU) && !defined(SIMU_AUDIO)
|
||||
return;
|
||||
@@ -848,7 +854,7 @@ void AudioQueue::playTone(uint16_t freq, uint16_t len, uint16_t pause, uint8_t f
|
||||
freq = limit<uint16_t>(BEEP_MIN_FREQ, freq, BEEP_MAX_FREQ);
|
||||
|
||||
if (flags & PLAY_BACKGROUND) {
|
||||
varioContext.setFragment(freq, len, pause, 0, 0, (flags & PLAY_NOW));
|
||||
varioContext.setFragment(freq, len, pause, 0, 0, (flags & PLAY_NOW), fragmentVolume);
|
||||
}
|
||||
else {
|
||||
// adjust frequency and length according to the user preferences
|
||||
@@ -858,11 +864,11 @@ void AudioQueue::playTone(uint16_t freq, uint16_t len, uint16_t pause, uint8_t f
|
||||
if (flags & PLAY_NOW) {
|
||||
if (priorityContext.isFree()) {
|
||||
priorityContext.clear();
|
||||
priorityContext.setFragment(freq, len, pause, flags & 0x0f, freqIncr, false);
|
||||
priorityContext.setFragment(freq, len, pause, flags & 0x0f, freqIncr, false, fragmentVolume);
|
||||
}
|
||||
}
|
||||
else {
|
||||
fragmentsFifo.push(AudioFragment(freq, len, pause, flags & 0x0f, freqIncr, false));
|
||||
fragmentsFifo.push(AudioFragment(freq, len, pause, flags & 0x0f, freqIncr, false, fragmentVolume));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -870,10 +876,10 @@ void AudioQueue::playTone(uint16_t freq, uint16_t len, uint16_t pause, uint8_t f
|
||||
}
|
||||
|
||||
#if defined(SDCARD)
|
||||
void AudioQueue::playFile(const char * filename, uint8_t flags, uint8_t id)
|
||||
void AudioQueue::playFile(const char * filename, uint8_t flags, uint8_t id, int8_t fragmentVolume)
|
||||
{
|
||||
#if defined(SIMU)
|
||||
TRACE("playFile(\"%s\", flags=%x, id=%d)", filename, flags, id);
|
||||
TRACE("playFile(\"%s\", flags=%x, id=%d fragmentVolume=%d ee_general=%d)", filename, flags, id, fragmentVolume, g_eeGeneral.wavVolume);
|
||||
if (strlen(filename) > AUDIO_FILENAME_MAXLEN) {
|
||||
TRACE("file name too long! maximum length is %d characters", AUDIO_FILENAME_MAXLEN);
|
||||
return;
|
||||
@@ -898,10 +904,10 @@ void AudioQueue::playFile(const char * filename, uint8_t flags, uint8_t id)
|
||||
|
||||
if (flags & PLAY_BACKGROUND) {
|
||||
backgroundContext.clear();
|
||||
backgroundContext.setFragment(filename, 0, id);
|
||||
backgroundContext.setFragment(filename, 0, fragmentVolume, id);
|
||||
}
|
||||
else {
|
||||
fragmentsFifo.push(AudioFragment(filename, flags & 0x0f, id));
|
||||
fragmentsFifo.push(AudioFragment(filename, flags & 0x0f, fragmentVolume, id));
|
||||
}
|
||||
|
||||
RTOS_UNLOCK_MUTEX(audioMutex);
|
||||
@@ -1223,14 +1229,14 @@ void audioEvent(unsigned int index)
|
||||
}
|
||||
|
||||
#if defined(SDCARD)
|
||||
void pushUnit(uint8_t unit, uint8_t idx, uint8_t id)
|
||||
void pushUnit(uint8_t unit, uint8_t idx, uint8_t id, uint8_t fragmentVolume)
|
||||
{
|
||||
if (unit < DIM(unitsFilenames)) {
|
||||
char path[AUDIO_FILENAME_MAXLEN+1];
|
||||
char * tmp = strAppendSystemAudioPath(path);
|
||||
tmp = strAppendStringWithIndex(tmp, unitsFilenames[unit], idx);
|
||||
strcpy(tmp, SOUNDS_EXT);
|
||||
audioQueue.playFile(path, 0, id);
|
||||
audioQueue.playFile(path, 0, id, fragmentVolume);
|
||||
}
|
||||
else {
|
||||
TRACE("pushUnit: out of bounds unit : %d", unit); // We should never get here, but given the nature of TTS files, this prevent segfault in case of bug there.
|
||||
@@ -1238,7 +1244,7 @@ void pushUnit(uint8_t unit, uint8_t idx, uint8_t id)
|
||||
}
|
||||
#endif
|
||||
|
||||
void pushPrompt(uint16_t prompt, uint8_t id)
|
||||
void pushPrompt(uint16_t prompt, uint8_t id, uint8_t fragmentVolume)
|
||||
{
|
||||
#if defined(SDCARD)
|
||||
char filename[AUDIO_FILENAME_MAXLEN+1];
|
||||
@@ -1248,7 +1254,7 @@ void pushPrompt(uint16_t prompt, uint8_t id)
|
||||
str[i] = '0' + (prompt%10);
|
||||
prompt /= 10;
|
||||
}
|
||||
audioQueue.playFile(filename, 0, id);
|
||||
audioQueue.playFile(filename, 0, id, fragmentVolume);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user