@@ -322,6 +322,10 @@ class AudioDriver {
322
322
DriverPins *p_pins = nullptr ;
323
323
int i2c_default_address = -1 ;
324
324
325
+ int mapVolume (int x, int in_min, int in_max, int out_min, int out_max) {
326
+ return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
327
+ }
328
+
325
329
// / Determine the TwoWire object from the I2C config or use Wire
326
330
virtual i2c_bus_handle_t getI2C () {
327
331
if (p_pins == nullptr ) return DEFAULT_WIRE;
@@ -557,7 +561,7 @@ class AudioDriverCS42448Class : public AudioDriver {
557
561
558
562
int getVolume () override { return volume; }
559
563
bool setInputVolume (int volume) override {
560
- int vol = map (volume, 0 , 100 , -128 , 127 );
564
+ int vol = mapVolume (volume, 0 , 100 , -128 , 127 );
561
565
return cs42448.setVolumeADC (vol);
562
566
}
563
567
bool isVolumeSupported () override { return true ; }
@@ -834,7 +838,7 @@ class AudioDriverES8388Class : public AudioDriver {
834
838
}
835
839
836
840
bool setInputVolume (int volume) {
837
- // map values from 0 - 100 to 0 to 8
841
+ // mapVolume values from 0 - 100 to 0 to 8
838
842
839
843
// es_mic_gain_t: MIC_GAIN_MIN = -1, 0,3,6,9,12,15,18,21,24 MIC_GAIN_MAX =
840
844
// 25
@@ -861,7 +865,7 @@ class AudioDriverES8388Class : public AudioDriver {
861
865
MIC_GAIN_18DB, MIC_GAIN_21DB, MIC_GAIN_24DB};
862
866
863
867
int vol = limitValue (volume, 0 , 100 );
864
- int idx = map (vol, 0 , 100 , 0 , 8 );
868
+ int idx = mapVolume (vol, 0 , 100 , 0 , 8 );
865
869
866
870
es_mic_gain_t gain = gains[idx];
867
871
AD_LOGD (" input volume: %d -> gain %d [dB] (idx: %d of 0..8)" , volume, gain,
@@ -964,15 +968,15 @@ class AudioDriverWM8960Class : public AudioDriver {
964
968
// / Defines the Volume (in %) if volume is 0, mute is enabled,range is 0-100.
965
969
bool setVolume (int volume) {
966
970
volume_out = limitValue (volume, 0 , 100 );
967
- int vol_int = volume_out == 0.0 ? 0 : map (volume_out, 0 , 100 , 30 , 0x7F );
971
+ int vol_int = volume_out == 0.0 ? 0 : mapVolume (volume_out, 0 , 100 , 30 , 0x7F );
968
972
return mtb_wm8960_set_output_volume (vol_int);
969
973
}
970
974
971
975
int getVolume () { return volume_out; }
972
976
973
977
bool setInputVolume (int volume) {
974
978
volume_in = limitValue (volume, 0 , 100 );
975
- int vol_int = map (volume_in, 0 , 100 , 0 , 30 );
979
+ int vol_int = mapVolume (volume_in, 0 , 100 , 0 , 30 );
976
980
return mtb_wm8960_adjust_input_volume (vol_int);
977
981
}
978
982
bool isVolumeSupported () { return true ; }
@@ -1147,7 +1151,7 @@ class AudioDriverWM8978Class : public AudioDriver {
1147
1151
1148
1152
// / Mute line 0 = speaker, line 1 = headphones
1149
1153
bool setMute (bool mute, int line) override {
1150
- int scaled = mute ? 0 : map (volume, 0 , 100 , 0 , 63 );
1154
+ int scaled = mute ? 0 : mapVolume (volume, 0 , 100 , 0 , 63 );
1151
1155
switch (line) {
1152
1156
case 0 :
1153
1157
wm8078.setSPKvol (scaled);
@@ -1175,7 +1179,7 @@ class AudioDriverWM8978Class : public AudioDriver {
1175
1179
1176
1180
bool setVolume (int volume) override {
1177
1181
this ->volume = volume;
1178
- int scaled = map (volume, 0 , 100 , 0 , 63 );
1182
+ int scaled = mapVolume (volume, 0 , 100 , 0 , 63 );
1179
1183
wm8078.setSPKvol (scaled);
1180
1184
wm8078.setHPvol (scaled, scaled);
1181
1185
return true ;
@@ -1184,7 +1188,7 @@ class AudioDriverWM8978Class : public AudioDriver {
1184
1188
int getVolume () override { return volume; }
1185
1189
1186
1190
bool setInputVolume (int volume) override {
1187
- int scaled = map (volume, 0 , 100 , 0 , 63 );
1191
+ int scaled = mapVolume (volume, 0 , 100 , 0 , 63 );
1188
1192
wm8078.setMICgain (scaled);
1189
1193
wm8078.setAUXgain (scaled);
1190
1194
wm8078.setLINEINgain (scaled);
@@ -1254,7 +1258,7 @@ class AudioDriverWM8994Class : public AudioDriver {
1254
1258
setPAPower (true );
1255
1259
delay (10 );
1256
1260
p_pins = &pins;
1257
- int vol = map (volume, 0 , 100 , DEFAULT_VOLMIN, DEFAULT_VOLMAX);
1261
+ int vol = mapVolume (volume, 0 , 100 , DEFAULT_VOLMIN, DEFAULT_VOLMAX);
1258
1262
uint32_t freq = codecCfg.getRateNumeric ();
1259
1263
uint16_t outputDevice = getOutput (codec_cfg.output_device );
1260
1264
@@ -1269,7 +1273,7 @@ class AudioDriverWM8994Class : public AudioDriver {
1269
1273
1270
1274
bool setVolume (int volume) {
1271
1275
this ->volume = volume;
1272
- int vol = map (volume, 0 , 100 , DEFAULT_VOLMIN, DEFAULT_VOLMAX);
1276
+ int vol = mapVolume (volume, 0 , 100 , DEFAULT_VOLMIN, DEFAULT_VOLMAX);
1273
1277
return wm8994_SetVolume (getI2CAddress (), vol) == 0 ;
1274
1278
}
1275
1279
int getVolume () { return volume; }
0 commit comments