Skip to content
Snippets Groups Projects
Commit a6aec737 authored by moon2's avatar moon2 :speech_balloon:
Browse files

audio: made output api nicer

parent 366841a3
No related branches found
No related tags found
No related merge requests found
...@@ -24,22 +24,39 @@ static void audio_player_task(void* arg); ...@@ -24,22 +24,39 @@ static void audio_player_task(void* arg);
#define DMA_BUFFER_COUNT 2 #define DMA_BUFFER_COUNT 2
#define I2S_PORT 0 #define I2S_PORT 0
// used for exp(vol_dB * NAT_LOG_DB)
#define NAT_LOG_DB 0.1151292546497023 #define NAT_LOG_DB 0.1151292546497023
// placeholder for "fake mute" -inf dB (we know floats can do that but we have trust issues when using NAN)
#define SILLY_LOW_VOLUME_DB (-10000.)
static bool headphones_connected = 0; static bool headphones_connected = 0;
static bool headset_connected = 0; static bool headset_connected = 0;
static bool line_in_connected = 0; static bool line_in_connected = 0;
static bool headphones_detection_override = 0;
static int32_t software_volume = 0; static int32_t software_volume = 0;
// maybe struct these someday but eh it works
static float headphones_volume_dB = 0; static float headphones_volume_dB = 0;
static bool headphones_mute = 0; static bool headphones_mute = 0;
const static float headphones_maximum_volume_system_dB = 3;
static float headphones_maximum_volume_user_dB = headphones_maximum_volume_system_dB;
static float headphones_minimum_volume_user_dB = headphones_maximum_volume_system_dB - 70;
static float speaker_volume_dB = 0; static float speaker_volume_dB = 0;
static bool speaker_mute = 0; static bool speaker_mute = 0;
static bool headphones_detection_override = 0; const static float speaker_maximum_volume_system_dB = 14;
static float speaker_maximum_volume_user_dB = speaker_maximum_volume_system_dB;
static float speaker_minimum_volume_user_dB = speaker_maximum_volume_system_dB - 60;
uint8_t audio_headset_is_connected(){ return headset_connected; } uint8_t audio_headset_is_connected(){ return headset_connected; }
uint8_t audio_headphones_are_connected(){ return headphones_connected || headphones_detection_override; } uint8_t audio_headphones_are_connected(){ return headphones_connected || headphones_detection_override; }
float audio_headphones_get_volume_dB(){ return headphones_volume_dB; } float audio_headphones_get_volume_dB(){ return headphones_volume_dB; }
float audio_speaker_get_volume_dB(){ return speaker_volume_dB; } float audio_speaker_get_volume_dB(){ return speaker_volume_dB; }
float audio_headphones_get_minimum_volume_dB(){ return headphones_minimum_volume_user_dB; }
float audio_speaker_get_minimum_volume_dB(){ return speaker_minimum_volume_user_dB; }
float audio_headphones_get_maximum_volume_dB(){ return headphones_maximum_volume_user_dB; }
float audio_speaker_get_maximum_volume_dB(){ return speaker_maximum_volume_user_dB; }
uint8_t audio_headphones_get_mute(){ return headphones_mute ? 1 : 0; } uint8_t audio_headphones_get_mute(){ return headphones_mute ? 1 : 0; }
uint8_t audio_speaker_get_mute(){ return speaker_mute ? 1 : 0; } uint8_t audio_speaker_get_mute(){ return speaker_mute ? 1 : 0; }
...@@ -187,14 +204,13 @@ const vol_map_t speaker_map[] = {{0x3F, +14}, {0x3E, +13.5}, {0x3D, +13}, {0x3C, ...@@ -187,14 +204,13 @@ const vol_map_t speaker_map[] = {{0x3F, +14}, {0x3E, +13.5}, {0x3D, +13}, {0x3C,
const uint8_t headphones_map_len = 32; const uint8_t headphones_map_len = 32;
const vol_map_t headphones_map[] = {{0x1F, +3}, {0x1E, +2.5}, {0x1D, +2}, {0x1C, +1.5}, {0x1B, +1}, {0x1A, +0}, {0x19, -1}, {0x18, -2}, {0x17, -3}, {0x16, -4}, {0x15, -5}, {0x14, -7}, {0x13, -9}, {0x12, -11}, {0x11, -13}, {0x10, -15}, {0x0F, -17}, {0x0E, -19}, {0x0D, -22}, {0x0C, -25}, {0x0B, -28}, {0x0A, -31}, {0x09, -34}, {0x08, -37}, {0x07, -40}, {0x06, -43}, {0x06, -47}, {0x04, -51}, {0x03, -55}, {0x02, -59}, {0x01, -63}, {0x00, -67}}; const vol_map_t headphones_map[] = {{0x1F, +3}, {0x1E, +2.5}, {0x1D, +2}, {0x1C, +1.5}, {0x1B, +1}, {0x1A, +0}, {0x19, -1}, {0x18, -2}, {0x17, -3}, {0x16, -4}, {0x15, -5}, {0x14, -7}, {0x13, -9}, {0x12, -11}, {0x11, -13}, {0x10, -15}, {0x0F, -17}, {0x0E, -19}, {0x0D, -22}, {0x0C, -25}, {0x0B, -28}, {0x0A, -31}, {0x09, -34}, {0x08, -37}, {0x07, -40}, {0x06, -43}, {0x06, -47}, {0x04, -51}, {0x03, -55}, {0x02, -59}, {0x01, -63}, {0x00, -67}};
float audio_headphones_set_volume_dB(float vol_dB){ void _audio_headphones_set_volume_dB(float vol_dB, bool mute){
uint8_t map_index = headphones_map_len - 1; uint8_t map_index = headphones_map_len - 1;
for(; map_index; map_index--){ for(; map_index; map_index--){
if(headphones_map[map_index].volume_dB >= vol_dB) break; if(headphones_map[map_index].volume_dB >= vol_dB) break;
} }
uint8_t reg = headphones_map[map_index].register_value; uint8_t reg = headphones_map[map_index].register_value;
uint8_t headphones_on = (!headphones_mute) && audio_headphones_are_connected(); reg = (mute ? (1 << 7) : 0) | reg;
reg = (headphones_on ? 0 : (1 << 7)) | reg;
max98091_i2c_write(0x2C, reg); //left chan max98091_i2c_write(0x2C, reg); //left chan
max98091_i2c_write(0x2D, reg); //right chan max98091_i2c_write(0x2D, reg); //right chan
// note: didn't check if chan physically mapped to l/r or flipped. // note: didn't check if chan physically mapped to l/r or flipped.
...@@ -207,18 +223,16 @@ float audio_headphones_set_volume_dB(float vol_dB){ ...@@ -207,18 +223,16 @@ float audio_headphones_set_volume_dB(float vol_dB){
//if(!software_volume_enabled) software_volume_dB = 0; // breaks p1, might add option once it is retired //if(!software_volume_enabled) software_volume_dB = 0; // breaks p1, might add option once it is retired
software_volume = (int32_t) (32768 * exp(software_volume_dB * NAT_LOG_DB)); software_volume = (int32_t) (32768 * exp(software_volume_dB * NAT_LOG_DB));
headphones_volume_dB = hardware_volume_dB + software_volume_dB; headphones_volume_dB = hardware_volume_dB + software_volume_dB;
return headphones_volume_dB;
} }
float audio_speaker_set_volume_dB(float vol_dB){ void _audio_speaker_set_volume_dB(float vol_dB, bool mute){
uint8_t map_index = speaker_map_len - 1; uint8_t map_index = speaker_map_len - 1;
for(; map_index; map_index--){ for(; map_index; map_index--){
if(speaker_map[map_index].volume_dB >= vol_dB) break; if(speaker_map[map_index].volume_dB >= vol_dB) break;
} }
uint8_t reg = speaker_map[map_index].register_value; uint8_t reg = speaker_map[map_index].register_value;
uint8_t speaker_on = (!speaker_mute) && (!audio_headphones_are_connected()); reg = (mute ? (1 << 7) : 0) | reg;
reg = (speaker_on ? 0 : (1 << 7)) | reg;
max98091_i2c_write(0x31, reg); //left chan max98091_i2c_write(0x31, reg); //left chan
max98091_i2c_write(0x32, reg); //right chan max98091_i2c_write(0x32, reg); //right chan
//note: didn't check if chan physically mapped to l/r or flipped. //note: didn't check if chan physically mapped to l/r or flipped.
...@@ -231,7 +245,6 @@ float audio_speaker_set_volume_dB(float vol_dB){ ...@@ -231,7 +245,6 @@ float audio_speaker_set_volume_dB(float vol_dB){
//if(!software_volume_enabled) software_volume_dB = 0; // breaks p1, might add option once it is retired //if(!software_volume_enabled) software_volume_dB = 0; // breaks p1, might add option once it is retired
software_volume = (int32_t) (32768. * exp(software_volume_dB * NAT_LOG_DB)); software_volume = (int32_t) (32768. * exp(software_volume_dB * NAT_LOG_DB));
speaker_volume_dB = hardware_volume_dB + software_volume_dB; speaker_volume_dB = hardware_volume_dB + software_volume_dB;
return speaker_volume_dB;
} }
void audio_headphones_set_mute(uint8_t mute){ void audio_headphones_set_mute(uint8_t mute){
...@@ -278,27 +291,21 @@ static void i2s_init(void){ ...@@ -278,27 +291,21 @@ static void i2s_init(void){
i2s_set_pin(I2S_PORT, &pin_config); i2s_set_pin(I2S_PORT, &pin_config);
} }
float audio_speaker_set_volume_dB(float vol_dB){ void _audio_speaker_set_volume_dB(float vol_dB, bool mute){
if(vol_dB < (MIN_VOLUME_DB)) vol_dB = MIN_VOLUME_DB;
if(vol_dB > (MAX_VOLUME_DB)) vol_dB = MAX_VOLUME_DB;
int32_t buf = 32767 * exp(vol_dB * NAT_LOG_DB); int32_t buf = 32767 * exp(vol_dB * NAT_LOG_DB);
software_volume_premute = buf; software_volume_premute = buf;
if(speaker_mute || headphones_detection_override){ if(mute){
software_volume = 0; software_volume = 0;
} else { } else {
software_volume = software_volume_premute; software_volume = software_volume_premute;
} }
speaker_volume_dB = vol_dB; speaker_volume_dB = vol_dB;
return speaker_volume_dB;
} }
float audio_headphones_set_volume_dB(float vol_dB){ void _audio_headphones_set_volume_dB(float vol_dB, bool mute){
return vol_dB; // no headphones, should never be called ideally
} }
void audio_headphones_set_mute(uint8_t mute){ void_audio_headphones_set_mute(uint8_t mute){
headphones_mute = 1; headphones_mute = 1;
}; };
...@@ -315,6 +322,28 @@ void audio_speaker_set_mute(uint8_t mute){ ...@@ -315,6 +322,28 @@ void audio_speaker_set_mute(uint8_t mute){
#error "audio not implemented for this badge generation" #error "audio not implemented for this badge generation"
#endif #endif
float audio_speaker_set_volume_dB(float vol_dB){
bool mute = speaker_mute || audio_headphones_are_connected();
if(vol_dB > speaker_maximum_volume_user_dB) vol_dB = speaker_maximum_volume_user_dB;
if(vol_dB < speaker_minimum_volume_user_dB){
vol_dB = SILLY_LOW_VOLUME_DB; // fake mute
mute = 1;
}
_audio_speaker_set_volume_dB(vol_dB, mute);
return speaker_volume_dB;
}
float audio_headphones_set_volume_dB(float vol_dB){
bool mute = headphones_mute || (!audio_headphones_are_connected());
if(vol_dB > headphones_maximum_volume_user_dB) vol_dB = headphones_maximum_volume_user_dB;
if(vol_dB < headphones_minimum_volume_user_dB){
vol_dB = SILLY_LOW_VOLUME_DB; // fake mute
mute = 1;
}
_audio_headphones_set_volume_dB(vol_dB, mute);
return headphones_volume_dB;
}
void audio_headphones_detection_override(uint8_t enable){ void audio_headphones_detection_override(uint8_t enable){
headphones_detection_override = enable; headphones_detection_override = enable;
audio_headphones_set_volume_dB(headphones_volume_dB); audio_headphones_set_volume_dB(headphones_volume_dB);
...@@ -322,18 +351,35 @@ void audio_headphones_detection_override(uint8_t enable){ ...@@ -322,18 +351,35 @@ void audio_headphones_detection_override(uint8_t enable){
} }
float audio_headphones_adjust_volume_dB(float vol_dB){ float audio_headphones_adjust_volume_dB(float vol_dB){
if(audio_headphones_get_volume_dB() < headphones_minimum_volume_user_dB){ //fake mute
if(vol_dB > 0){
return audio_headphones_set_volume_dB(headphones_minimum_volume_user_dB);
} else {
return audio_headphones_get_volume_dB();
}
} else {
return audio_headphones_set_volume_dB(headphones_volume_dB + vol_dB); return audio_headphones_set_volume_dB(headphones_volume_dB + vol_dB);
} }
}
float audio_speaker_adjust_volume_dB(float vol_dB){ float audio_speaker_adjust_volume_dB(float vol_dB){
if(audio_speaker_get_volume_dB() < speaker_minimum_volume_user_dB){ //fake mute
if(vol_dB > 0){
return audio_speaker_set_volume_dB(speaker_minimum_volume_user_dB);
printf("hi");
} else {
return audio_speaker_get_volume_dB();
}
} else {
return audio_speaker_set_volume_dB(speaker_volume_dB + vol_dB); return audio_speaker_set_volume_dB(speaker_volume_dB + vol_dB);
} }
}
float audio_adjust_volume_dB(float vol_dB){ float audio_adjust_volume_dB(float vol_dB){
if(audio_headphones_are_connected()){ if(audio_headphones_are_connected()){
return audio_headphones_set_volume_dB(headphones_volume_dB + vol_dB); return audio_headphones_adjust_volume_dB(vol_dB);
} else { } else {
return audio_speaker_set_volume_dB(speaker_volume_dB + vol_dB); return audio_speaker_adjust_volume_dB(vol_dB);
} }
} }
...@@ -369,6 +415,60 @@ uint8_t audio_get_mute(){ ...@@ -369,6 +415,60 @@ uint8_t audio_get_mute(){
} }
} }
float audio_headphones_set_maximum_volume_dB(float vol_dB){
if(vol_dB > headphones_maximum_volume_system_dB) vol_dB = headphones_maximum_volume_system_dB;
if(vol_dB < headphones_minimum_volume_user_dB) vol_dB = headphones_minimum_volume_user_dB;
headphones_maximum_volume_user_dB = vol_dB;
return headphones_maximum_volume_user_dB;
}
float audio_headphones_set_minimum_volume_dB(float vol_dB){
if(vol_dB > headphones_maximum_volume_user_dB) vol_dB = headphones_maximum_volume_user_dB;
if((vol_dB + 1) < SILLY_LOW_VOLUME_DB) vol_dB = SILLY_LOW_VOLUME_DB + 1.;
headphones_minimum_volume_user_dB = vol_dB;
return headphones_minimum_volume_user_dB;
}
float audio_speaker_set_maximum_volume_dB(float vol_dB){
if(vol_dB > speaker_maximum_volume_system_dB) vol_dB = speaker_maximum_volume_system_dB;
if(vol_dB < speaker_minimum_volume_user_dB) vol_dB = speaker_minimum_volume_user_dB;
speaker_maximum_volume_user_dB = vol_dB;
return speaker_maximum_volume_user_dB;
}
float audio_speaker_set_minimum_volume_dB(float vol_dB){
if(vol_dB > speaker_maximum_volume_user_dB) vol_dB = speaker_maximum_volume_user_dB;
if((vol_dB + 1) < SILLY_LOW_VOLUME_DB) vol_dB = SILLY_LOW_VOLUME_DB + 1.;
speaker_minimum_volume_user_dB = vol_dB;
return speaker_minimum_volume_user_dB;
}
float audio_speaker_get_volume_relative(){
float ret = audio_speaker_get_volume_dB();
if(ret < speaker_minimum_volume_user_dB) return 0; // fake mute
float vol_range = speaker_maximum_volume_user_dB - speaker_minimum_volume_user_dB;
ret -= speaker_minimum_volume_user_dB; // shift to above zero
ret /= vol_range; // restrict to 0..1 range
return (ret*0.99) + 0.01; // shift to 0.01 to 0.99 range to distinguish from fake mute
}
float audio_headphones_get_volume_relative(){
float ret = audio_headphones_get_volume_dB();
if(ret < headphones_minimum_volume_user_dB) return 0; // fake mute
float vol_range = headphones_maximum_volume_user_dB - headphones_minimum_volume_user_dB;
ret -= headphones_minimum_volume_user_dB; // shift to above zero
ret /= vol_range; // restrict to 0..1 range
return (ret*0.99) + 0.01; // shift to 0.01 to 0.99 range to distinguish from fake mute
}
float audio_get_volume_relative(){
if(audio_headphones_are_connected()){
return audio_headphones_get_volume_relative();
} else {
return audio_speaker_get_volume_relative();
}
}
void audio_update_jacksense(){ void audio_update_jacksense(){
#if defined(CONFIG_BADGE23_HW_GEN_P1) #if defined(CONFIG_BADGE23_HW_GEN_P1)
line_in_connected = 0; line_in_connected = 0;
......
...@@ -43,6 +43,8 @@ void audio_headphones_detection_override(uint8_t enable); ...@@ -43,6 +43,8 @@ void audio_headphones_detection_override(uint8_t enable);
* respectively, clamps/rounds if necessary and returns the actual volume. * respectively, clamps/rounds if necessary and returns the actual volume.
* Absolute reference arbitrary. * Absolute reference arbitrary.
* Does not unmute, use audio_{headphones_/speaker_/}set_mute as needed. * Does not unmute, use audio_{headphones_/speaker_/}set_mute as needed.
* Enters fake mute if requested volume is below the value set by
* audio_{headphones/speaker}_set_minimum_volume_user.
* *
* Note: This function uses a hardware PGA for the coarse value and software * Note: This function uses a hardware PGA for the coarse value and software
* for the fine value. These two methods are as of yet not synced so that there * for the fine value. These two methods are as of yet not synced so that there
...@@ -85,6 +87,34 @@ uint8_t audio_headphones_get_mute(); ...@@ -85,6 +87,34 @@ uint8_t audio_headphones_get_mute();
uint8_t audio_speaker_get_mute(); uint8_t audio_speaker_get_mute();
uint8_t audio_get_mute(); uint8_t audio_get_mute();
/* Set the minimum and maximum allowed volume levels for speakers and headphones
* respectively. Clamps with hardware limitations. Maximum clamps below the minimum
* value, minimum clamps above the maximum. Returns clamped value.
*/
float audio_headphones_set_minimum_volume_dB(float vol_dB);
float audio_headphones_set_maximum_volume_dB(float vol_dB);
float audio_speaker_set_minimum_volume_dB(float vol_dB);
float audio_speaker_set_maximum_volume_dB(float vol_dB);
/* Returns the minimum and maximum allowed volume levels for speakers and headphones
* respectively. Change with audio_{headphones/speaker}_set_{minimum/maximum}_volume_dB.
*/
float audio_headphones_get_minimum_volume_dB();
float audio_headphones_get_maximum_volume_dB();
float audio_speaker_get_minimum_volume_dB();
float audio_speaker_get_maximum_volume_dB();
/* Syntactic sugar for drawing UI: Returns channel volume in a 0..1 range,
* scaled into a 0.01..1 range according to the values set with
* audio_{headphones_/speaker_/}set_{maximum/minimum}_volume_ and 0 if in a
* fake mute condition.
*
* The unspecified variant automatically chooses the adequate channel (**).
*/
float audio_headphones_get_volume_relative();
float audio_speaker_get_volume_relative();
float audio_get_volume_relative();
/* (**) if audio_headphones_are_connected returns 1 the "headphone" variant /* (**) if audio_headphones_are_connected returns 1 the "headphone" variant
* is chosen, else the "speaker" variant is chosen. * is chosen, else the "speaker" variant is chosen.
*/ */
......
import time import time
from hardware import * from hardware import *
import audio
RED = 0b1111100000000000 RED = 0b1111100000000000
GREEN = 0b0000011111100000 GREEN = 0b0000011111100000
...@@ -24,16 +25,7 @@ def long_bottom_petal_captouch_blocking(num, ms): ...@@ -24,16 +25,7 @@ def long_bottom_petal_captouch_blocking(num, ms):
return False return False
def draw_volume_slider(ctx, volume): def draw_volume_slider(ctx, volume):
if(volume > 20): length = int(96*volume)
volume = 20
if(volume < -60):
volume = -60
length = 96 + ((volume - 20) * 1.6)
if length > 96:
length = 96
if length < 0:
length = 0
length = int(length)
ctx.rgb(0,0,0)#dummy ctx.rgb(0,0,0)#dummy
ctx.round_rectangle(-49,41,98,8,3).fill()#dummy idk ctx.round_rectangle(-49,41,98,8,3).fill()#dummy idk
......
...@@ -32,6 +32,8 @@ STATIC mp_obj_t mp_headphones_detection_override(mp_obj_t enable) { ...@@ -32,6 +32,8 @@ STATIC mp_obj_t mp_headphones_detection_override(mp_obj_t enable) {
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_headphones_detection_override_obj, mp_headphones_detection_override); STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_headphones_detection_override_obj, mp_headphones_detection_override);
STATIC mp_obj_t mp_headphones_set_volume_dB(mp_obj_t vol_dB) { STATIC mp_obj_t mp_headphones_set_volume_dB(mp_obj_t vol_dB) {
return mp_obj_new_float(audio_headphones_set_volume_dB(mp_obj_get_float(vol_dB))); return mp_obj_new_float(audio_headphones_set_volume_dB(mp_obj_get_float(vol_dB)));
} }
...@@ -47,6 +49,8 @@ STATIC mp_obj_t mp_set_volume_dB(mp_obj_t vol_dB) { ...@@ -47,6 +49,8 @@ STATIC mp_obj_t mp_set_volume_dB(mp_obj_t vol_dB) {
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_set_volume_dB_obj, mp_set_volume_dB); STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_set_volume_dB_obj, mp_set_volume_dB);
STATIC mp_obj_t mp_headphones_adjust_volume_dB(mp_obj_t vol_dB) { STATIC mp_obj_t mp_headphones_adjust_volume_dB(mp_obj_t vol_dB) {
return mp_obj_new_float(audio_headphones_adjust_volume_dB(mp_obj_get_float(vol_dB))); return mp_obj_new_float(audio_headphones_adjust_volume_dB(mp_obj_get_float(vol_dB)));
} }
...@@ -62,6 +66,8 @@ STATIC mp_obj_t mp_adjust_volume_dB(mp_obj_t vol_dB) { ...@@ -62,6 +66,8 @@ STATIC mp_obj_t mp_adjust_volume_dB(mp_obj_t vol_dB) {
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_adjust_volume_dB_obj, mp_adjust_volume_dB); STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_adjust_volume_dB_obj, mp_adjust_volume_dB);
STATIC mp_obj_t mp_headphones_get_volume_dB() { STATIC mp_obj_t mp_headphones_get_volume_dB() {
return mp_obj_new_float(audio_headphones_get_volume_dB()); return mp_obj_new_float(audio_headphones_get_volume_dB());
} }
...@@ -77,6 +83,8 @@ STATIC mp_obj_t mp_get_volume_dB() { ...@@ -77,6 +83,8 @@ STATIC mp_obj_t mp_get_volume_dB() {
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_get_volume_dB_obj, mp_get_volume_dB); STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_get_volume_dB_obj, mp_get_volume_dB);
STATIC mp_obj_t mp_headphones_get_mute() { STATIC mp_obj_t mp_headphones_get_mute() {
return mp_obj_new_int(audio_headphones_get_mute()); return mp_obj_new_int(audio_headphones_get_mute());
} }
...@@ -92,6 +100,8 @@ STATIC mp_obj_t mp_get_mute() { ...@@ -92,6 +100,8 @@ STATIC mp_obj_t mp_get_mute() {
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_get_mute_obj, mp_get_mute); STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_get_mute_obj, mp_get_mute);
STATIC mp_obj_t mp_headphones_set_mute(mp_obj_t mute) { STATIC mp_obj_t mp_headphones_set_mute(mp_obj_t mute) {
audio_headphones_set_mute(mp_obj_get_int(mute)); audio_headphones_set_mute(mp_obj_get_int(mute));
return mp_const_none; return mp_const_none;
...@@ -110,26 +120,107 @@ STATIC mp_obj_t mp_set_mute(mp_obj_t mute) { ...@@ -110,26 +120,107 @@ STATIC mp_obj_t mp_set_mute(mp_obj_t mute) {
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_set_mute_obj, mp_set_mute); STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_set_mute_obj, mp_set_mute);
STATIC mp_obj_t mp_headphones_set_minimum_volume_dB(mp_obj_t vol_dB) {
return mp_obj_new_float(audio_headphones_set_minimum_volume_dB(mp_obj_get_float(vol_dB)));
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_headphones_set_minimum_volume_dB_obj, mp_headphones_set_minimum_volume_dB);
STATIC mp_obj_t mp_speaker_set_minimum_volume_dB(mp_obj_t vol_dB) {
return mp_obj_new_float(audio_speaker_set_minimum_volume_dB(mp_obj_get_float(vol_dB)));
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_speaker_set_minimum_volume_dB_obj, mp_speaker_set_minimum_volume_dB);
STATIC mp_obj_t mp_headphones_set_maximum_volume_dB(mp_obj_t vol_dB) {
return mp_obj_new_float(audio_headphones_set_maximum_volume_dB(mp_obj_get_float(vol_dB)));
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_headphones_set_maximum_volume_dB_obj, mp_headphones_set_maximum_volume_dB);
STATIC mp_obj_t mp_speaker_set_maximum_volume_dB(mp_obj_t vol_dB) {
return mp_obj_new_float(audio_speaker_set_maximum_volume_dB(mp_obj_get_float(vol_dB)));
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_speaker_set_maximum_volume_dB_obj, mp_speaker_set_maximum_volume_dB);
STATIC mp_obj_t mp_headphones_get_minimum_volume_dB() {
return mp_obj_new_float(audio_headphones_get_minimum_volume_dB());
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_headphones_get_minimum_volume_dB_obj, mp_headphones_get_minimum_volume_dB);
STATIC mp_obj_t mp_speaker_get_minimum_volume_dB() {
return mp_obj_new_float(audio_speaker_get_minimum_volume_dB());
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_speaker_get_minimum_volume_dB_obj, mp_speaker_get_minimum_volume_dB);
STATIC mp_obj_t mp_headphones_get_maximum_volume_dB() {
return mp_obj_new_float(audio_headphones_get_maximum_volume_dB());
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_headphones_get_maximum_volume_dB_obj, mp_headphones_get_maximum_volume_dB);
STATIC mp_obj_t mp_speaker_get_maximum_volume_dB() {
return mp_obj_new_float(audio_speaker_get_maximum_volume_dB());
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_speaker_get_maximum_volume_dB_obj, mp_speaker_get_maximum_volume_dB);
STATIC mp_obj_t mp_headphones_get_volume_relative() {
return mp_obj_new_float(audio_headphones_get_volume_relative());
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_headphones_get_volume_relative_obj, mp_headphones_get_volume_relative);
STATIC mp_obj_t mp_speaker_get_volume_relative() {
return mp_obj_new_float(audio_speaker_get_volume_relative());
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_speaker_get_volume_relative_obj, mp_speaker_get_volume_relative);
STATIC mp_obj_t mp_get_volume_relative() {
return mp_obj_new_float(audio_get_volume_relative());
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_get_volume_relative_obj, mp_get_volume_relative);
STATIC const mp_rom_map_elem_t mp_module_audio_globals_table[] = { STATIC const mp_rom_map_elem_t mp_module_audio_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_audio) }, { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_audio) },
{ MP_ROM_QSTR(MP_QSTR_headset_is_connected), MP_ROM_PTR(&mp_headset_is_connected_obj) }, { MP_ROM_QSTR(MP_QSTR_headset_is_connected), MP_ROM_PTR(&mp_headset_is_connected_obj) },
{ MP_ROM_QSTR(MP_QSTR_headphones_are_connected), MP_ROM_PTR(&mp_headphones_are_connected_obj) }, { MP_ROM_QSTR(MP_QSTR_headphones_are_connected), MP_ROM_PTR(&mp_headphones_are_connected_obj) },
{ MP_ROM_QSTR(MP_QSTR_headphones_detection_override), MP_ROM_PTR(&mp_headphones_detection_override_obj) }, { MP_ROM_QSTR(MP_QSTR_headphones_detection_override), MP_ROM_PTR(&mp_headphones_detection_override_obj) },
{ MP_ROM_QSTR(MP_QSTR_headphones_set_volume_dB), MP_ROM_PTR(&mp_headphones_set_volume_dB_obj) }, { MP_ROM_QSTR(MP_QSTR_headphones_set_volume_dB), MP_ROM_PTR(&mp_headphones_set_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_speaker_set_volume_dB), MP_ROM_PTR(&mp_speaker_set_volume_dB_obj) }, { MP_ROM_QSTR(MP_QSTR_speaker_set_volume_dB), MP_ROM_PTR(&mp_speaker_set_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_set_volume_dB), MP_ROM_PTR(&mp_set_volume_dB_obj) }, { MP_ROM_QSTR(MP_QSTR_set_volume_dB), MP_ROM_PTR(&mp_set_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_headphones_adjust_volume_dB), MP_ROM_PTR(&mp_headphones_adjust_volume_dB_obj) }, { MP_ROM_QSTR(MP_QSTR_headphones_adjust_volume_dB), MP_ROM_PTR(&mp_headphones_adjust_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_speaker_adjust_volume_dB), MP_ROM_PTR(&mp_speaker_adjust_volume_dB_obj) }, { MP_ROM_QSTR(MP_QSTR_speaker_adjust_volume_dB), MP_ROM_PTR(&mp_speaker_adjust_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_adjust_volume_dB), MP_ROM_PTR(&mp_adjust_volume_dB_obj) }, { MP_ROM_QSTR(MP_QSTR_adjust_volume_dB), MP_ROM_PTR(&mp_adjust_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_headphones_get_volume_dB), MP_ROM_PTR(&mp_headphones_get_volume_dB_obj) }, { MP_ROM_QSTR(MP_QSTR_headphones_get_volume_dB), MP_ROM_PTR(&mp_headphones_get_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_speaker_get_volume_dB), MP_ROM_PTR(&mp_speaker_get_volume_dB_obj) }, { MP_ROM_QSTR(MP_QSTR_speaker_get_volume_dB), MP_ROM_PTR(&mp_speaker_get_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_get_volume_dB), MP_ROM_PTR(&mp_get_volume_dB_obj) }, { MP_ROM_QSTR(MP_QSTR_get_volume_dB), MP_ROM_PTR(&mp_get_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_headphones_get_mute), MP_ROM_PTR(&mp_headphones_get_mute_obj) }, { MP_ROM_QSTR(MP_QSTR_headphones_get_mute), MP_ROM_PTR(&mp_headphones_get_mute_obj) },
{ MP_ROM_QSTR(MP_QSTR_speaker_get_mute), MP_ROM_PTR(&mp_speaker_get_mute_obj) }, { MP_ROM_QSTR(MP_QSTR_speaker_get_mute), MP_ROM_PTR(&mp_speaker_get_mute_obj) },
{ MP_ROM_QSTR(MP_QSTR_get_mute), MP_ROM_PTR(&mp_get_mute_obj) }, { MP_ROM_QSTR(MP_QSTR_get_mute), MP_ROM_PTR(&mp_get_mute_obj) },
{ MP_ROM_QSTR(MP_QSTR_headphones_set_mute), MP_ROM_PTR(&mp_headphones_set_mute_obj) }, { MP_ROM_QSTR(MP_QSTR_headphones_set_mute), MP_ROM_PTR(&mp_headphones_set_mute_obj) },
{ MP_ROM_QSTR(MP_QSTR_speaker_set_mute), MP_ROM_PTR(&mp_speaker_set_mute_obj) }, { MP_ROM_QSTR(MP_QSTR_speaker_set_mute), MP_ROM_PTR(&mp_speaker_set_mute_obj) },
{ MP_ROM_QSTR(MP_QSTR_set_mute), MP_ROM_PTR(&mp_set_mute_obj) }, { MP_ROM_QSTR(MP_QSTR_set_mute), MP_ROM_PTR(&mp_set_mute_obj) },
{ MP_ROM_QSTR(MP_QSTR_headphones_set_minimum_volume_dB), MP_ROM_PTR(&mp_headphones_set_minimum_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_speaker_set_minimum_volume_dB), MP_ROM_PTR(&mp_speaker_set_minimum_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_headphones_set_maximum_volume_dB), MP_ROM_PTR(&mp_headphones_set_maximum_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_speaker_set_maximum_volume_dB), MP_ROM_PTR(&mp_speaker_set_maximum_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_headphones_get_minimum_volume_dB), MP_ROM_PTR(&mp_headphones_get_minimum_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_speaker_get_minimum_volume_dB), MP_ROM_PTR(&mp_speaker_get_minimum_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_headphones_get_maximum_volume_dB), MP_ROM_PTR(&mp_headphones_get_maximum_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_speaker_get_maximum_volume_dB), MP_ROM_PTR(&mp_speaker_get_maximum_volume_dB_obj) },
{ MP_ROM_QSTR(MP_QSTR_headphones_get_volume_relative), MP_ROM_PTR(&mp_headphones_get_volume_relative_obj) },
{ MP_ROM_QSTR(MP_QSTR_speaker_get_volume_relative), MP_ROM_PTR(&mp_speaker_get_volume_relative_obj) },
{ MP_ROM_QSTR(MP_QSTR_get_volume_relative), MP_ROM_PTR(&mp_get_volume_relative_obj) },
}; };
STATIC MP_DEFINE_CONST_DICT(mp_module_audio_globals, mp_module_audio_globals_table); STATIC MP_DEFINE_CONST_DICT(mp_module_audio_globals, mp_module_audio_globals_table);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment