diff options
author | Martin Scarratt <mmmm@rockbox.org> | 2006-07-20 22:44:10 +0000 |
---|---|---|
committer | Martin Scarratt <mmmm@rockbox.org> | 2006-07-20 22:44:10 +0000 |
commit | 76b729c47b8edca000ed93f81e6d6bf62dab1701 (patch) | |
tree | 7ee938d914fb4fe3bd8e73b91f0a4ddff7c8f36d /apps/recorder | |
parent | f28c35effc9ddb624839596180130f151cb97d41 (diff) | |
download | rockbox-76b729c47b8edca000ed93f81e6d6bf62dab1701.tar.gz rockbox-76b729c47b8edca000ed93f81e6d6bf62dab1701.zip |
On-the-fly filesplitting when recording for I-Rivers. Record button starts new file, Play/Pause button pauses/resumes recording. Also, Filename information for all screens > 80 pixels high.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10270 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/recorder')
-rw-r--r-- | apps/recorder/peakmeter.c | 6 | ||||
-rw-r--r-- | apps/recorder/peakmeter.h | 2 | ||||
-rw-r--r-- | apps/recorder/recording.c | 114 |
3 files changed, 89 insertions, 33 deletions
diff --git a/apps/recorder/peakmeter.c b/apps/recorder/peakmeter.c index cb5464f9af..4b8843cff3 100644 --- a/apps/recorder/peakmeter.c +++ b/apps/recorder/peakmeter.c | |||
@@ -1169,7 +1169,7 @@ void peak_meter_draw_trig(int xpos, int ypos) | |||
1169 | } | 1169 | } |
1170 | #endif | 1170 | #endif |
1171 | 1171 | ||
1172 | int peak_meter_draw_get_btn(int x, int y, int height) | 1172 | int peak_meter_draw_get_btn(int x, int y[], int height) |
1173 | { | 1173 | { |
1174 | int button = BUTTON_NONE; | 1174 | int button = BUTTON_NONE; |
1175 | long next_refresh = current_tick; | 1175 | long next_refresh = current_tick; |
@@ -1197,8 +1197,8 @@ int peak_meter_draw_get_btn(int x, int y, int height) | |||
1197 | if (TIME_AFTER(current_tick, next_refresh)) { | 1197 | if (TIME_AFTER(current_tick, next_refresh)) { |
1198 | FOR_NB_SCREENS(i) | 1198 | FOR_NB_SCREENS(i) |
1199 | { | 1199 | { |
1200 | peak_meter_screen(&screens[i], x, y, height); | 1200 | peak_meter_screen(&screens[i], x, y[i], height); |
1201 | screens[i].update_rect(x, y, screens[i].width, height); | 1201 | screens[i].update_rect(x, y[i], screens[i].width, height); |
1202 | } | 1202 | } |
1203 | next_refresh += HZ / PEAK_METER_FPS; | 1203 | next_refresh += HZ / PEAK_METER_FPS; |
1204 | dopeek = true; | 1204 | dopeek = true; |
diff --git a/apps/recorder/peakmeter.h b/apps/recorder/peakmeter.h index 759b4547ca..4f92b14907 100644 --- a/apps/recorder/peakmeter.h +++ b/apps/recorder/peakmeter.h | |||
@@ -29,7 +29,7 @@ extern bool peak_meter_histogram(void); | |||
29 | extern bool peak_meter_enabled; | 29 | extern bool peak_meter_enabled; |
30 | 30 | ||
31 | extern void peak_meter_playback(bool playback); | 31 | extern void peak_meter_playback(bool playback); |
32 | extern int peak_meter_draw_get_btn(int x, int y, int height); | 32 | extern int peak_meter_draw_get_btn(int x, int y[], int height); |
33 | extern void peak_meter_set_clip_hold(int time); | 33 | extern void peak_meter_set_clip_hold(int time); |
34 | extern void peak_meter_peek(void); | 34 | extern void peak_meter_peek(void); |
35 | extern void peak_meter_init_range( bool dbfs, int range_min, int range_max); | 35 | extern void peak_meter_init_range( bool dbfs, int range_min, int range_max); |
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c index 458861c591..09ec0f43f5 100644 --- a/apps/recorder/recording.c +++ b/apps/recorder/recording.c | |||
@@ -91,7 +91,8 @@ | |||
91 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) | 91 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) |
92 | #define REC_SHUTDOWN (BUTTON_OFF | BUTTON_REPEAT) | 92 | #define REC_SHUTDOWN (BUTTON_OFF | BUTTON_REPEAT) |
93 | #define REC_STOPEXIT BUTTON_OFF | 93 | #define REC_STOPEXIT BUTTON_OFF |
94 | #define REC_RECPAUSE BUTTON_REC | 94 | #define REC_RECPAUSE BUTTON_ON |
95 | #define REC_NEWFILE BUTTON_REC | ||
95 | #define REC_INC BUTTON_RIGHT | 96 | #define REC_INC BUTTON_RIGHT |
96 | #define REC_DEC BUTTON_LEFT | 97 | #define REC_DEC BUTTON_LEFT |
97 | #define REC_NEXT BUTTON_DOWN | 98 | #define REC_NEXT BUTTON_DOWN |
@@ -101,6 +102,7 @@ | |||
101 | #define REC_RC_SHUTDOWN (BUTTON_RC_STOP | BUTTON_REPEAT) | 102 | #define REC_RC_SHUTDOWN (BUTTON_RC_STOP | BUTTON_REPEAT) |
102 | #define REC_RC_STOPEXIT BUTTON_RC_STOP | 103 | #define REC_RC_STOPEXIT BUTTON_RC_STOP |
103 | #define REC_RC_RECPAUSE BUTTON_RC_ON | 104 | #define REC_RC_RECPAUSE BUTTON_RC_ON |
105 | #define REC_RC_NEWFILE BUTTON_RC_REC | ||
104 | #define REC_RC_INC BUTTON_RC_BITRATE | 106 | #define REC_RC_INC BUTTON_RC_BITRATE |
105 | #define REC_RC_DEC BUTTON_RC_SOURCE | 107 | #define REC_RC_DEC BUTTON_RC_SOURCE |
106 | #define REC_RC_NEXT BUTTON_RC_FF | 108 | #define REC_RC_NEXT BUTTON_RC_FF |
@@ -324,6 +326,7 @@ bool recording_screen(void) | |||
324 | unsigned int seconds; | 326 | unsigned int seconds; |
325 | int hours, minutes; | 327 | int hours, minutes; |
326 | char path_buffer[MAX_PATH]; | 328 | char path_buffer[MAX_PATH]; |
329 | char filename[13]; | ||
327 | bool been_in_usb_mode = false; | 330 | bool been_in_usb_mode = false; |
328 | int last_audio_stat = -1; | 331 | int last_audio_stat = -1; |
329 | int audio_stat; | 332 | int audio_stat; |
@@ -332,6 +335,8 @@ bool recording_screen(void) | |||
332 | int led_countdown = 2; | 335 | int led_countdown = 2; |
333 | #endif | 336 | #endif |
334 | int i; | 337 | int i; |
338 | int filename_offset[NB_SCREENS]; | ||
339 | int pm_y[NB_SCREENS]; | ||
335 | 340 | ||
336 | const unsigned char *byte_units[] = { | 341 | const unsigned char *byte_units[] = { |
337 | ID2P(LANG_BYTE), | 342 | ID2P(LANG_BYTE), |
@@ -395,6 +400,8 @@ bool recording_screen(void) | |||
395 | screens[i].setfont(FONT_SYSFIXED); | 400 | screens[i].setfont(FONT_SYSFIXED); |
396 | screens[i].getstringsize("M", &w, &h); | 401 | screens[i].getstringsize("M", &w, &h); |
397 | screens[i].setmargins(global_settings.invert_cursor ? 0 : w, 8); | 402 | screens[i].setmargins(global_settings.invert_cursor ? 0 : w, 8); |
403 | filename_offset[i] = ((screens[i].height >= 80) ? 1 : 0); | ||
404 | pm_y[i] = 8 + h * (2 + filename_offset[i]); | ||
398 | } | 405 | } |
399 | 406 | ||
400 | if(rec_create_directory() > 0) | 407 | if(rec_create_directory() > 0) |
@@ -456,7 +463,7 @@ bool recording_screen(void) | |||
456 | #endif /* CONFIG_LED */ | 463 | #endif /* CONFIG_LED */ |
457 | 464 | ||
458 | /* Wait for a button a while (HZ/10) drawing the peak meter */ | 465 | /* Wait for a button a while (HZ/10) drawing the peak meter */ |
459 | button = peak_meter_draw_get_btn(0, 8 + h*2, h * PM_HEIGHT); | 466 | button = peak_meter_draw_get_btn(0, pm_y, h * PM_HEIGHT); |
460 | 467 | ||
461 | if (last_audio_stat != audio_stat) | 468 | if (last_audio_stat != audio_stat) |
462 | { | 469 | { |
@@ -500,6 +507,12 @@ bool recording_screen(void) | |||
500 | #ifdef REC_RC_RECPAUSE | 507 | #ifdef REC_RC_RECPAUSE |
501 | case REC_RC_RECPAUSE: | 508 | case REC_RC_RECPAUSE: |
502 | #endif | 509 | #endif |
510 | #ifdef REC_NEWFILE | ||
511 | case REC_NEWFILE: | ||
512 | #endif | ||
513 | #ifdef REC_RC_NEWFILE | ||
514 | case REC_RC_NEWFILE: | ||
515 | #endif | ||
503 | #ifdef REC_RECPAUSE_PRE | 516 | #ifdef REC_RECPAUSE_PRE |
504 | if (lastbutton != REC_RECPAUSE_PRE) | 517 | if (lastbutton != REC_RECPAUSE_PRE) |
505 | break; | 518 | break; |
@@ -534,17 +547,33 @@ bool recording_screen(void) | |||
534 | } | 547 | } |
535 | else | 548 | else |
536 | { | 549 | { |
537 | if(audio_stat & AUDIO_STATUS_PAUSE) | 550 | #ifdef REC_NEWFILE |
551 | /*if new file button pressed, start new file */ | ||
552 | if ((button == REC_NEWFILE) | ||
553 | #ifdef REC_RC_NEWFILE | ||
554 | || (button == REC_RC_NEWFILE) | ||
555 | #endif | ||
556 | ) | ||
538 | { | 557 | { |
539 | audio_resume_recording(); | 558 | audio_new_file(rec_create_filename(path_buffer)); |
540 | if (global_settings.talk_menu) | 559 | last_seconds = 0; |
541 | { /* no voice possible here, but a beep */ | ||
542 | audio_beep(HZ/4); /* short beep on resume */ | ||
543 | } | ||
544 | } | 560 | } |
545 | else | 561 | else |
562 | #endif | ||
563 | /* if pause button pressed, pause or resume */ | ||
546 | { | 564 | { |
547 | audio_pause_recording(); | 565 | if(audio_stat & AUDIO_STATUS_PAUSE) |
566 | { | ||
567 | audio_resume_recording(); | ||
568 | if (global_settings.talk_menu) | ||
569 | { /* no voice possible here, but a beep */ | ||
570 | audio_beep(HZ/4); /* short beep on resume */ | ||
571 | } | ||
572 | } | ||
573 | else | ||
574 | { | ||
575 | audio_pause_recording(); | ||
576 | } | ||
548 | } | 577 | } |
549 | } | 578 | } |
550 | update_countdown = 1; /* Update immediately */ | 579 | update_countdown = 1; /* Update immediately */ |
@@ -830,6 +859,24 @@ bool recording_screen(void) | |||
830 | FOR_NB_SCREENS(i) | 859 | FOR_NB_SCREENS(i) |
831 | screens[i].puts(0, 1, buf); | 860 | screens[i].puts(0, 1, buf); |
832 | 861 | ||
862 | FOR_NB_SCREENS(i) | ||
863 | { | ||
864 | if (filename_offset[i] > 0) | ||
865 | { | ||
866 | if (audio_stat & AUDIO_STATUS_RECORD) | ||
867 | { | ||
868 | strncpy(filename, path_buffer + | ||
869 | strlen(path_buffer) - 12, 13); | ||
870 | filename[12]='\0'; | ||
871 | } | ||
872 | else | ||
873 | strcpy(filename, ""); | ||
874 | |||
875 | snprintf(buf, 32, "Filename: %s", filename); | ||
876 | screens[i].puts(0, 2, buf); | ||
877 | } | ||
878 | } | ||
879 | |||
833 | /* We will do file splitting regardless, either at the end of | 880 | /* We will do file splitting regardless, either at the end of |
834 | a split interval, or when the filesize approaches the 2GB | 881 | a split interval, or when the filesize approaches the 2GB |
835 | FAT file size (compatibility) limit. */ | 882 | FAT file size (compatibility) limit. */ |
@@ -850,13 +897,13 @@ bool recording_screen(void) | |||
850 | if (global_settings.invert_cursor && (pos++ == cursor)) | 897 | if (global_settings.invert_cursor && (pos++ == cursor)) |
851 | { | 898 | { |
852 | FOR_NB_SCREENS(i) | 899 | FOR_NB_SCREENS(i) |
853 | screens[i].puts_style_offset(0, 2+PM_HEIGHT, buf, | 900 | screens[i].puts_style_offset(0, filename_offset[i] + |
854 | STYLE_INVERT,0); | 901 | PM_HEIGHT + 2, buf, STYLE_INVERT,0); |
855 | } | 902 | } |
856 | else | 903 | else |
857 | { | 904 | { |
858 | FOR_NB_SCREENS(i) | 905 | FOR_NB_SCREENS(i) |
859 | screens[i].puts(0, 2+PM_HEIGHT, buf); | 906 | screens[i].puts(0, filename_offset[i] + PM_HEIGHT + 2, buf); |
860 | } | 907 | } |
861 | 908 | ||
862 | if(global_settings.rec_source == SOURCE_MIC) | 909 | if(global_settings.rec_source == SOURCE_MIC) |
@@ -868,13 +915,14 @@ bool recording_screen(void) | |||
868 | if(global_settings.invert_cursor && ((1==cursor)||(2==cursor))) | 915 | if(global_settings.invert_cursor && ((1==cursor)||(2==cursor))) |
869 | { | 916 | { |
870 | FOR_NB_SCREENS(i) | 917 | FOR_NB_SCREENS(i) |
871 | screens[i].puts_style_offset(0, 3+PM_HEIGHT, buf, | 918 | screens[i].puts_style_offset(0, filename_offset[i] + |
872 | STYLE_INVERT,0); | 919 | PM_HEIGHT + 3, buf, STYLE_INVERT,0); |
873 | } | 920 | } |
874 | else | 921 | else |
875 | { | 922 | { |
876 | FOR_NB_SCREENS(i) | 923 | FOR_NB_SCREENS(i) |
877 | screens[i].puts(0, 3+PM_HEIGHT, buf); | 924 | screens[i].puts(0, filename_offset[i] + |
925 | PM_HEIGHT + 3, buf); | ||
878 | } | 926 | } |
879 | } | 927 | } |
880 | else if(global_settings.rec_source == SOURCE_LINE) | 928 | else if(global_settings.rec_source == SOURCE_LINE) |
@@ -887,13 +935,14 @@ bool recording_screen(void) | |||
887 | if(global_settings.invert_cursor && ((1==cursor)||(2==cursor))) | 935 | if(global_settings.invert_cursor && ((1==cursor)||(2==cursor))) |
888 | { | 936 | { |
889 | FOR_NB_SCREENS(i) | 937 | FOR_NB_SCREENS(i) |
890 | screens[i].puts_style_offset(0, 3+PM_HEIGHT, buf, | 938 | screens[i].puts_style_offset(0, filename_offset[i] + |
891 | STYLE_INVERT,0); | 939 | PM_HEIGHT + 3, buf, STYLE_INVERT,0); |
892 | } | 940 | } |
893 | else | 941 | else |
894 | { | 942 | { |
895 | FOR_NB_SCREENS(i) | 943 | FOR_NB_SCREENS(i) |
896 | screens[i].puts(0, 3+PM_HEIGHT, buf); | 944 | screens[i].puts(0, filename_offset[i] + |
945 | PM_HEIGHT + 3, buf); | ||
897 | } | 946 | } |
898 | 947 | ||
899 | snprintf(buf, 32, "%s:%s", | 948 | snprintf(buf, 32, "%s:%s", |
@@ -904,14 +953,16 @@ bool recording_screen(void) | |||
904 | if(global_settings.invert_cursor && ((1==cursor)||(3==cursor))) | 953 | if(global_settings.invert_cursor && ((1==cursor)||(3==cursor))) |
905 | { | 954 | { |
906 | FOR_NB_SCREENS(i) | 955 | FOR_NB_SCREENS(i) |
907 | screens[i].puts_style_offset(0, 4+PM_HEIGHT, buf, | 956 | screens[i].puts_style_offset(0, filename_offset[i] + |
908 | STYLE_INVERT,0); | 957 | PM_HEIGHT + 4, buf, STYLE_INVERT,0); |
909 | } | 958 | } |
910 | else | 959 | else |
911 | { | 960 | { |
912 | FOR_NB_SCREENS(i) | 961 | FOR_NB_SCREENS(i) |
913 | screens[i].puts(0, 4+PM_HEIGHT, buf); | 962 | screens[i].puts(0, filename_offset[i] + |
963 | PM_HEIGHT + 4, buf); | ||
914 | } | 964 | } |
965 | |||
915 | } | 966 | } |
916 | 967 | ||
917 | if(!global_settings.invert_cursor){ | 968 | if(!global_settings.invert_cursor){ |
@@ -919,30 +970,35 @@ bool recording_screen(void) | |||
919 | { | 970 | { |
920 | case 1: | 971 | case 1: |
921 | FOR_NB_SCREENS(i) | 972 | FOR_NB_SCREENS(i) |
922 | screen_put_cursorxy(&screens[i], 0, | 973 | screen_put_cursorxy(&screens[i], 0, |
923 | 3+PM_HEIGHT, true); | 974 | filename_offset[i] + |
975 | PM_HEIGHT + 3, true); | ||
924 | 976 | ||
925 | if(global_settings.rec_source != SOURCE_MIC) | 977 | if(global_settings.rec_source != SOURCE_MIC) |
926 | { | 978 | { |
927 | FOR_NB_SCREENS(i) | 979 | FOR_NB_SCREENS(i) |
928 | screen_put_cursorxy(&screens[i], 0, | 980 | screen_put_cursorxy(&screens[i], 0, |
929 | 4+PM_HEIGHT, true); | 981 | filename_offset[i] + |
982 | PM_HEIGHT + 4, true); | ||
930 | } | 983 | } |
931 | break; | 984 | break; |
932 | case 2: | 985 | case 2: |
933 | FOR_NB_SCREENS(i) | 986 | FOR_NB_SCREENS(i) |
934 | screen_put_cursorxy(&screens[i], 0, | 987 | screen_put_cursorxy(&screens[i], 0, |
935 | 3+PM_HEIGHT, true); | 988 | filename_offset[i] + |
989 | PM_HEIGHT + 3, true); | ||
936 | break; | 990 | break; |
937 | case 3: | 991 | case 3: |
938 | FOR_NB_SCREENS(i) | 992 | FOR_NB_SCREENS(i) |
939 | screen_put_cursorxy(&screens[i], 0, | 993 | screen_put_cursorxy(&screens[i], 0, |
940 | 4+PM_HEIGHT, true); | 994 | filename_offset[i] + |
995 | PM_HEIGHT + 4, true); | ||
941 | break; | 996 | break; |
942 | default: | 997 | default: |
943 | FOR_NB_SCREENS(i) | 998 | FOR_NB_SCREENS(i) |
944 | screen_put_cursorxy(&screens[i], 0, | 999 | screen_put_cursorxy(&screens[i], 0, |
945 | 2+PM_HEIGHT, true); | 1000 | filename_offset[i] + |
1001 | PM_HEIGHT + 2, true); | ||
946 | } | 1002 | } |
947 | } | 1003 | } |
948 | /* Can't measure S/PDIF sample rate on Archos yet */ | 1004 | /* Can't measure S/PDIF sample rate on Archos yet */ |
@@ -961,13 +1017,13 @@ bool recording_screen(void) | |||
961 | global_settings.rec_channels ? | 1017 | global_settings.rec_channels ? |
962 | str(LANG_CHANNEL_MONO) : str(LANG_CHANNEL_STEREO)); | 1018 | str(LANG_CHANNEL_MONO) : str(LANG_CHANNEL_STEREO)); |
963 | FOR_NB_SCREENS(i) | 1019 | FOR_NB_SCREENS(i) |
964 | screens[i].puts(0, 5+PM_HEIGHT, buf); | 1020 | screens[i].puts(0, filename_offset[i] + PM_HEIGHT + 5, buf); |
965 | 1021 | ||
966 | gui_syncstatusbar_draw(&statusbars, true); | 1022 | gui_syncstatusbar_draw(&statusbars, true); |
967 | 1023 | ||
968 | FOR_NB_SCREENS(i) | 1024 | FOR_NB_SCREENS(i) |
969 | { | 1025 | { |
970 | peak_meter_screen(&screens[i], 0, 8 + h*2, h*PM_HEIGHT); | 1026 | peak_meter_screen(&screens[i], 0, pm_y[i], h*PM_HEIGHT); |
971 | screens[i].update(); | 1027 | screens[i].update(); |
972 | } | 1028 | } |
973 | 1029 | ||