diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2008-12-31 01:38:44 +0000 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2008-12-31 01:38:44 +0000 |
commit | 2e99b3d9318dbc98c242c9ddbbf23d2fcc5bf2bd (patch) | |
tree | 53587fff24b5da8c717cf2e052e16942501a78c4 /apps | |
parent | 9ac7af749bceb67916b3179a3b7c7eee6ee6443a (diff) | |
download | rockbox-2e99b3d9318dbc98c242c9ddbbf23d2fcc5bf2bd.tar.gz rockbox-2e99b3d9318dbc98c242c9ddbbf23d2fcc5bf2bd.zip |
Gigabeat S: Allow recording from FM. Give FM the same volume range as playback. NOTE: This bumps the si4700 output volume to -0dB so other players with that may need a minor adjustment.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19619 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/keymaps/keymap-gigabeat-s.c | 21 | ||||
-rw-r--r-- | apps/recorder/recording.c | 46 |
2 files changed, 60 insertions, 7 deletions
diff --git a/apps/keymaps/keymap-gigabeat-s.c b/apps/keymaps/keymap-gigabeat-s.c index b0cc87011f..32c4f22b5b 100644 --- a/apps/keymaps/keymap-gigabeat-s.c +++ b/apps/keymaps/keymap-gigabeat-s.c | |||
@@ -251,6 +251,23 @@ static const struct button_mapping button_context_pitchscreen[] = { | |||
251 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | 251 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) |
252 | }; /* button_context_pitchcreen */ | 252 | }; /* button_context_pitchcreen */ |
253 | 253 | ||
254 | /** Recording Screen **/ | ||
255 | static const struct button_mapping button_context_recscreen[] = { | ||
256 | { ACTION_REC_PAUSE, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, | ||
257 | { ACTION_STD_CANCEL, BUTTON_BACK|BUTTON_REL, BUTTON_BACK }, | ||
258 | { ACTION_REC_NEWFILE, BUTTON_NEXT|BUTTON_REL, BUTTON_NEXT }, | ||
259 | { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE }, | ||
260 | { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, | ||
261 | { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
262 | { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, | ||
263 | { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
264 | { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, | ||
265 | { ACTION_STD_PREV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
266 | { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, | ||
267 | { ACTION_STD_NEXT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
268 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
269 | }; /* button_context_recscreen */ | ||
270 | |||
254 | static const struct button_mapping button_context_keyboard[] = { | 271 | static const struct button_mapping button_context_keyboard[] = { |
255 | { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, | 272 | { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, |
256 | { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | 273 | { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, |
@@ -333,6 +350,10 @@ const struct button_mapping* get_context_mapping(int context) | |||
333 | return button_context_quickscreen; | 350 | return button_context_quickscreen; |
334 | case CONTEXT_PITCHSCREEN: | 351 | case CONTEXT_PITCHSCREEN: |
335 | return button_context_pitchscreen; | 352 | return button_context_pitchscreen; |
353 | case CONTEXT_RECSCREEN: | ||
354 | return button_context_recscreen; | ||
355 | case CONTEXT_SETTINGS_RECTRIGGER: | ||
356 | return button_context_settings_right_is_inc; | ||
336 | case CONTEXT_KEYBOARD: | 357 | case CONTEXT_KEYBOARD: |
337 | return button_context_keyboard; | 358 | return button_context_keyboard; |
338 | case CONTEXT_FM: | 359 | case CONTEXT_FM: |
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c index b2c81cd21b..a8586b9735 100644 --- a/apps/recorder/recording.c +++ b/apps/recorder/recording.c | |||
@@ -274,12 +274,14 @@ static short agc_maxgain; | |||
274 | 274 | ||
275 | static void set_gain(void) | 275 | static void set_gain(void) |
276 | { | 276 | { |
277 | #ifdef HAVE_MIC_REC | ||
277 | if(global_settings.rec_source == AUDIO_SRC_MIC) | 278 | if(global_settings.rec_source == AUDIO_SRC_MIC) |
278 | { | 279 | { |
279 | audio_set_recording_gain(global_settings.rec_mic_gain, | 280 | audio_set_recording_gain(global_settings.rec_mic_gain, |
280 | 0, AUDIO_GAIN_MIC); | 281 | 0, AUDIO_GAIN_MIC); |
281 | } | 282 | } |
282 | else | 283 | else |
284 | #endif /* MIC */ | ||
283 | { | 285 | { |
284 | /* AUDIO_SRC_LINEIN, AUDIO_SRC_FMRADIO, AUDIO_SRC_SPDIF */ | 286 | /* AUDIO_SRC_LINEIN, AUDIO_SRC_FMRADIO, AUDIO_SRC_SPDIF */ |
285 | audio_set_recording_gain(global_settings.rec_left_gain, | 287 | audio_set_recording_gain(global_settings.rec_left_gain, |
@@ -332,15 +334,19 @@ static bool agc_gain_is_max(bool left, bool right) | |||
332 | 334 | ||
333 | switch (global_settings.rec_source) | 335 | switch (global_settings.rec_source) |
334 | { | 336 | { |
337 | #if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC) | ||
335 | HAVE_LINE_REC_(case AUDIO_SRC_LINEIN:) | 338 | HAVE_LINE_REC_(case AUDIO_SRC_LINEIN:) |
336 | HAVE_FMRADIO_REC_(case AUDIO_SRC_FMRADIO:) | 339 | HAVE_FMRADIO_REC_(case AUDIO_SRC_FMRADIO:) |
337 | gain_current_l = global_settings.rec_left_gain; | 340 | gain_current_l = global_settings.rec_left_gain; |
338 | gain_current_r = global_settings.rec_right_gain; | 341 | gain_current_r = global_settings.rec_right_gain; |
339 | break; | 342 | break; |
343 | #endif /* LINE, FMRADIO */ | ||
344 | #if defined(HAVE_MIC_REC) | ||
340 | case AUDIO_SRC_MIC: | 345 | case AUDIO_SRC_MIC: |
341 | default: | 346 | default: |
342 | gain_current_l = global_settings.rec_mic_gain; | 347 | gain_current_l = global_settings.rec_mic_gain; |
343 | gain_current_r = global_settings.rec_mic_gain; | 348 | gain_current_r = global_settings.rec_mic_gain; |
349 | #endif /* MIC */ | ||
344 | } | 350 | } |
345 | 351 | ||
346 | return ((left && (gain_current_l >= agc_maxgain)) || | 352 | return ((left && (gain_current_l >= agc_maxgain)) || |
@@ -353,13 +359,17 @@ static void change_recording_gain(bool increment, bool left, bool right) | |||
353 | 359 | ||
354 | switch (global_settings.rec_source) | 360 | switch (global_settings.rec_source) |
355 | { | 361 | { |
362 | #if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC) | ||
356 | HAVE_LINE_REC_(case AUDIO_SRC_LINEIN:) | 363 | HAVE_LINE_REC_(case AUDIO_SRC_LINEIN:) |
357 | HAVE_FMRADIO_REC_(case AUDIO_SRC_FMRADIO:) | 364 | HAVE_FMRADIO_REC_(case AUDIO_SRC_FMRADIO:) |
358 | if (left) global_settings.rec_left_gain += factor; | 365 | if (left) global_settings.rec_left_gain += factor; |
359 | if (right) global_settings.rec_right_gain += factor; | 366 | if (right) global_settings.rec_right_gain += factor; |
360 | break; | 367 | break; |
368 | #endif /* LINE, FMRADIO */ | ||
369 | #if defined(HAVE_MIC_REC) | ||
361 | case AUDIO_SRC_MIC: | 370 | case AUDIO_SRC_MIC: |
362 | global_settings.rec_mic_gain += factor; | 371 | global_settings.rec_mic_gain += factor; |
372 | #endif | ||
363 | } | 373 | } |
364 | } | 374 | } |
365 | 375 | ||
@@ -858,6 +868,7 @@ static char * reclist_get_name(int selected_item, void * data, | |||
858 | buf2, sizeof(buf2))); | 868 | buf2, sizeof(buf2))); |
859 | break; | 869 | break; |
860 | case ITEM_GAIN: | 870 | case ITEM_GAIN: |
871 | #ifdef HAVE_MIC_REC | ||
861 | if(global_settings.rec_source == AUDIO_SRC_MIC) | 872 | if(global_settings.rec_source == AUDIO_SRC_MIC) |
862 | { | 873 | { |
863 | /* Draw MIC recording gain */ | 874 | /* Draw MIC recording gain */ |
@@ -867,6 +878,7 @@ static char * reclist_get_name(int selected_item, void * data, | |||
867 | buf2, sizeof(buf2))); | 878 | buf2, sizeof(buf2))); |
868 | } | 879 | } |
869 | else | 880 | else |
881 | #endif /* MIC */ | ||
870 | { | 882 | { |
871 | int avg_gain = (global_settings.rec_left_gain + | 883 | int avg_gain = (global_settings.rec_left_gain + |
872 | global_settings.rec_right_gain) / 2; | 884 | global_settings.rec_right_gain) / 2; |
@@ -902,6 +914,7 @@ static char * reclist_get_name(int selected_item, void * data, | |||
902 | str(LANG_RECORDING_AGC_MAXGAIN), | 914 | str(LANG_RECORDING_AGC_MAXGAIN), |
903 | fmt_gain(SOUND_LEFT_GAIN, | 915 | fmt_gain(SOUND_LEFT_GAIN, |
904 | agc_maxgain, buf2, sizeof(buf2))); | 916 | agc_maxgain, buf2, sizeof(buf2))); |
917 | #ifdef HAVE_MIC_REC | ||
905 | else if (global_settings.rec_source == AUDIO_SRC_MIC) | 918 | else if (global_settings.rec_source == AUDIO_SRC_MIC) |
906 | snprintf(buffer, buffer_len, "%s: %s (%s)", | 919 | snprintf(buffer, buffer_len, "%s: %s (%s)", |
907 | str(LANG_RECORDING_AGC_MAXGAIN), | 920 | str(LANG_RECORDING_AGC_MAXGAIN), |
@@ -911,6 +924,7 @@ static char * reclist_get_name(int selected_item, void * data, | |||
911 | agc_maxgain - global_settings.rec_mic_gain, | 924 | agc_maxgain - global_settings.rec_mic_gain, |
912 | buf3, sizeof(buf3))); | 925 | buf3, sizeof(buf3))); |
913 | else | 926 | else |
927 | #endif /* MIC */ | ||
914 | snprintf(buffer, buffer_len, "%s: %s (%s)", | 928 | snprintf(buffer, buffer_len, "%s: %s (%s)", |
915 | str(LANG_RECORDING_AGC_MAXGAIN), | 929 | str(LANG_RECORDING_AGC_MAXGAIN), |
916 | fmt_gain(SOUND_LEFT_GAIN, | 930 | fmt_gain(SOUND_LEFT_GAIN, |
@@ -1180,15 +1194,18 @@ bool recording_screen(bool no_source) | |||
1180 | #endif | 1194 | #endif |
1181 | 1195 | ||
1182 | #ifdef HAVE_AGC | 1196 | #ifdef HAVE_AGC |
1197 | #ifdef HAVE_MIC_REC | ||
1183 | if (global_settings.rec_source == AUDIO_SRC_MIC) { | 1198 | if (global_settings.rec_source == AUDIO_SRC_MIC) { |
1184 | agc_preset = global_settings.rec_agc_preset_mic; | 1199 | agc_preset = global_settings.rec_agc_preset_mic; |
1185 | agc_maxgain = global_settings.rec_agc_maxgain_mic; | 1200 | agc_maxgain = global_settings.rec_agc_maxgain_mic; |
1186 | } | 1201 | } |
1187 | else { | 1202 | else |
1203 | #endif /* MIC */ | ||
1204 | { | ||
1188 | agc_preset = global_settings.rec_agc_preset_line; | 1205 | agc_preset = global_settings.rec_agc_preset_line; |
1189 | agc_maxgain = global_settings.rec_agc_maxgain_line; | 1206 | agc_maxgain = global_settings.rec_agc_maxgain_line; |
1190 | } | 1207 | } |
1191 | #endif | 1208 | #endif /* HAVE_AGC */ |
1192 | 1209 | ||
1193 | set_gain(); | 1210 | set_gain(); |
1194 | update_countdown = 0; /* Update immediately */ | 1211 | update_countdown = 0; /* Update immediately */ |
@@ -1209,7 +1226,7 @@ bool recording_screen(bool no_source) | |||
1209 | } | 1226 | } |
1210 | else | 1227 | else |
1211 | #endif | 1228 | #endif |
1212 | if((global_settings.rec_source == AUDIO_SRC_MIC) || | 1229 | if(HAVE_MIC_REC_((global_settings.rec_source == AUDIO_SRC_MIC) || ) |
1213 | (global_settings.rec_channels == 1)) | 1230 | (global_settings.rec_channels == 1)) |
1214 | { | 1231 | { |
1215 | listid_to_enum[0] = ITEM_VOLUME_M; | 1232 | listid_to_enum[0] = ITEM_VOLUME_M; |
@@ -1335,6 +1352,7 @@ bool recording_screen(bool no_source) | |||
1335 | setvol(); | 1352 | setvol(); |
1336 | break; | 1353 | break; |
1337 | case ITEM_GAIN: | 1354 | case ITEM_GAIN: |
1355 | #ifdef HAVE_MIC_REC | ||
1338 | if(global_settings.rec_source == AUDIO_SRC_MIC) | 1356 | if(global_settings.rec_source == AUDIO_SRC_MIC) |
1339 | { | 1357 | { |
1340 | if(global_settings.rec_mic_gain < | 1358 | if(global_settings.rec_mic_gain < |
@@ -1342,6 +1360,7 @@ bool recording_screen(bool no_source) | |||
1342 | global_settings.rec_mic_gain++; | 1360 | global_settings.rec_mic_gain++; |
1343 | } | 1361 | } |
1344 | else | 1362 | else |
1363 | #endif /* MIC */ | ||
1345 | { | 1364 | { |
1346 | if(global_settings.rec_left_gain < | 1365 | if(global_settings.rec_left_gain < |
1347 | sound_max(SOUND_LEFT_GAIN)) | 1366 | sound_max(SOUND_LEFT_GAIN)) |
@@ -1365,15 +1384,19 @@ bool recording_screen(bool no_source) | |||
1365 | case ITEM_AGC_MODE: | 1384 | case ITEM_AGC_MODE: |
1366 | agc_preset = MIN(agc_preset + 1, AGC_MODE_SIZE); | 1385 | agc_preset = MIN(agc_preset + 1, AGC_MODE_SIZE); |
1367 | agc_enable = (agc_preset != 0); | 1386 | agc_enable = (agc_preset != 0); |
1387 | #ifdef HAVE_MIC_REC | ||
1368 | if (global_settings.rec_source == AUDIO_SRC_MIC) { | 1388 | if (global_settings.rec_source == AUDIO_SRC_MIC) { |
1369 | global_settings.rec_agc_preset_mic = agc_preset; | 1389 | global_settings.rec_agc_preset_mic = agc_preset; |
1370 | agc_maxgain = global_settings.rec_agc_maxgain_mic; | 1390 | agc_maxgain = global_settings.rec_agc_maxgain_mic; |
1371 | } else { | 1391 | } else |
1392 | #endif /* MIC */ | ||
1393 | { | ||
1372 | global_settings.rec_agc_preset_line = agc_preset; | 1394 | global_settings.rec_agc_preset_line = agc_preset; |
1373 | agc_maxgain = global_settings.rec_agc_maxgain_line; | 1395 | agc_maxgain = global_settings.rec_agc_maxgain_line; |
1374 | } | 1396 | } |
1375 | break; | 1397 | break; |
1376 | case ITEM_AGC_MAXDB: | 1398 | case ITEM_AGC_MAXDB: |
1399 | #ifdef HAVE_MIC_REC | ||
1377 | if (global_settings.rec_source == AUDIO_SRC_MIC) | 1400 | if (global_settings.rec_source == AUDIO_SRC_MIC) |
1378 | { | 1401 | { |
1379 | agc_maxgain = MIN(agc_maxgain + 1, | 1402 | agc_maxgain = MIN(agc_maxgain + 1, |
@@ -1381,6 +1404,7 @@ bool recording_screen(bool no_source) | |||
1381 | global_settings.rec_agc_maxgain_mic = agc_maxgain; | 1404 | global_settings.rec_agc_maxgain_mic = agc_maxgain; |
1382 | } | 1405 | } |
1383 | else | 1406 | else |
1407 | #endif /* MIC */ | ||
1384 | { | 1408 | { |
1385 | agc_maxgain = MIN(agc_maxgain + 1, | 1409 | agc_maxgain = MIN(agc_maxgain + 1, |
1386 | sound_max(SOUND_LEFT_GAIN)); | 1410 | sound_max(SOUND_LEFT_GAIN)); |
@@ -1401,6 +1425,7 @@ bool recording_screen(bool no_source) | |||
1401 | setvol(); | 1425 | setvol(); |
1402 | break; | 1426 | break; |
1403 | case ITEM_GAIN: | 1427 | case ITEM_GAIN: |
1428 | #ifdef HAVE_MIC_REC | ||
1404 | if(global_settings.rec_source == AUDIO_SRC_MIC) | 1429 | if(global_settings.rec_source == AUDIO_SRC_MIC) |
1405 | { | 1430 | { |
1406 | if(global_settings.rec_mic_gain > | 1431 | if(global_settings.rec_mic_gain > |
@@ -1408,6 +1433,7 @@ bool recording_screen(bool no_source) | |||
1408 | global_settings.rec_mic_gain--; | 1433 | global_settings.rec_mic_gain--; |
1409 | } | 1434 | } |
1410 | else | 1435 | else |
1436 | #endif /* MIC */ | ||
1411 | { | 1437 | { |
1412 | if(global_settings.rec_left_gain > | 1438 | if(global_settings.rec_left_gain > |
1413 | sound_min(SOUND_LEFT_GAIN)) | 1439 | sound_min(SOUND_LEFT_GAIN)) |
@@ -1431,22 +1457,26 @@ bool recording_screen(bool no_source) | |||
1431 | case ITEM_AGC_MODE: | 1457 | case ITEM_AGC_MODE: |
1432 | agc_preset = MAX(agc_preset - 1, 0); | 1458 | agc_preset = MAX(agc_preset - 1, 0); |
1433 | agc_enable = (agc_preset != 0); | 1459 | agc_enable = (agc_preset != 0); |
1460 | #ifdef HAVE_MIC_REC | ||
1434 | if (global_settings.rec_source == AUDIO_SRC_MIC) { | 1461 | if (global_settings.rec_source == AUDIO_SRC_MIC) { |
1435 | global_settings.rec_agc_preset_mic = agc_preset; | 1462 | global_settings.rec_agc_preset_mic = agc_preset; |
1436 | agc_maxgain = global_settings.rec_agc_maxgain_mic; | 1463 | agc_maxgain = global_settings.rec_agc_maxgain_mic; |
1437 | } else { | 1464 | } else |
1465 | #endif /* MIC */ | ||
1466 | { | ||
1438 | global_settings.rec_agc_preset_line = agc_preset; | 1467 | global_settings.rec_agc_preset_line = agc_preset; |
1439 | agc_maxgain = global_settings.rec_agc_maxgain_line; | 1468 | agc_maxgain = global_settings.rec_agc_maxgain_line; |
1440 | } | 1469 | } |
1441 | break; | 1470 | break; |
1442 | case ITEM_AGC_MAXDB: | 1471 | case ITEM_AGC_MAXDB: |
1472 | #ifdef HAVE_MIC_REC | ||
1443 | if (global_settings.rec_source == AUDIO_SRC_MIC) | 1473 | if (global_settings.rec_source == AUDIO_SRC_MIC) |
1444 | { | 1474 | { |
1445 | agc_maxgain = MAX(agc_maxgain - 1, | 1475 | agc_maxgain = MAX(agc_maxgain - 1, |
1446 | sound_min(SOUND_MIC_GAIN)); | 1476 | sound_min(SOUND_MIC_GAIN)); |
1447 | global_settings.rec_agc_maxgain_mic = agc_maxgain; | 1477 | global_settings.rec_agc_maxgain_mic = agc_maxgain; |
1448 | } | 1478 | } else |
1449 | else | 1479 | #endif /* MIC */ |
1450 | { | 1480 | { |
1451 | agc_maxgain = MAX(agc_maxgain - 1, | 1481 | agc_maxgain = MAX(agc_maxgain - 1, |
1452 | sound_min(SOUND_LEFT_GAIN)); | 1482 | sound_min(SOUND_LEFT_GAIN)); |
@@ -1796,12 +1826,14 @@ bool recording_screen(bool no_source) | |||
1796 | } | 1826 | } |
1797 | 1827 | ||
1798 | #ifdef HAVE_AGC | 1828 | #ifdef HAVE_AGC |
1829 | #ifdef HAVE_MIC_REC | ||
1799 | if (global_settings.rec_source == AUDIO_SRC_MIC) | 1830 | if (global_settings.rec_source == AUDIO_SRC_MIC) |
1800 | { | 1831 | { |
1801 | if(agc_maxgain < (global_settings.rec_mic_gain)) | 1832 | if(agc_maxgain < (global_settings.rec_mic_gain)) |
1802 | change_recording_gain(false, true, true); | 1833 | change_recording_gain(false, true, true); |
1803 | } | 1834 | } |
1804 | else | 1835 | else |
1836 | #endif /* MIC */ | ||
1805 | { | 1837 | { |
1806 | if(agc_maxgain < (global_settings.rec_left_gain)) | 1838 | if(agc_maxgain < (global_settings.rec_left_gain)) |
1807 | change_recording_gain(false, true, false); | 1839 | change_recording_gain(false, true, false); |