diff -ubrN -x CVS rockbox/apps/lang/english.lang rockbox.dev/apps/lang/english.lang --- rockbox/apps/lang/english.lang 2004-01-26 09:05:21.000000000 -0800 +++ rockbox.dev/apps/lang/english.lang 2004-03-02 21:58:00.000000000 -0800 @@ -1701,3 +1701,9 @@ desc: in playlist viewer on+play menu eng: "File Options" new: + +id: LANG_SET_PITCH +desc: in sound menu settings +eng: "Pitch" +new: + diff -ubrN -x CVS rockbox/apps/screens.c rockbox.dev/apps/screens.c --- rockbox/apps/screens.c 2004-01-26 09:05:21.000000000 -0800 +++ rockbox.dev/apps/screens.c 2004-03-02 21:52:55.000000000 -0800 @@ -288,145 +288,6 @@ #ifdef HAVE_RECORDER_KEYPAD -/* returns: - 0 if no key was pressed - 1 if a key was pressed (or if ON was held down long enough to repeat) - 2 if USB was connected */ -int on_screen(void) -{ - static int pitch = 1000; - bool exit = false; - bool used = false; - - while (!exit) { - - if ( used ) { - char* ptr; - char buf[32]; - int w, h; - - lcd_clear_display(); - lcd_setfont(FONT_SYSFIXED); - - ptr = str(LANG_PITCH_UP); - lcd_getstringsize(ptr,&w,&h); - lcd_putsxy((LCD_WIDTH-w)/2, 0, ptr); - lcd_bitmap(bitmap_icons_7x8[Icon_UpArrow], - LCD_WIDTH/2 - 3, h*2, 7, 8, true); - - snprintf(buf, sizeof buf, "%d.%d%%", pitch / 10, pitch % 10 ); - lcd_getstringsize(buf,&w,&h); - lcd_putsxy((LCD_WIDTH-w)/2, h, buf); - - ptr = str(LANG_PITCH_DOWN); - lcd_getstringsize(ptr,&w,&h); - lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr); - lcd_bitmap(bitmap_icons_7x8[Icon_DownArrow], - LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8, true); - - ptr = str(LANG_PAUSE); - lcd_getstringsize(ptr,&w,&h); - lcd_putsxy((LCD_WIDTH-(w/2))/2, LCD_HEIGHT/2 - h/2, ptr); - lcd_bitmap(bitmap_icons_7x8[Icon_Pause], - (LCD_WIDTH-(w/2))/2-10, LCD_HEIGHT/2 - h/2, 7, 8, true); - - lcd_update(); - } - - /* use lastbutton, so the main loop can decide whether to - exit to browser or not */ - switch (button_get(true)) { - case BUTTON_UP: - case BUTTON_ON | BUTTON_UP: - case BUTTON_ON | BUTTON_UP | BUTTON_REPEAT: - used = true; - pitch++; - if ( pitch > 2000 ) - pitch = 2000; - mpeg_set_pitch(pitch); - break; - - case BUTTON_DOWN: - case BUTTON_ON | BUTTON_DOWN: - case BUTTON_ON | BUTTON_DOWN | BUTTON_REPEAT: - used = true; - pitch--; - if ( pitch < 500 ) - pitch = 500; - mpeg_set_pitch(pitch); - break; - - case BUTTON_ON | BUTTON_PLAY: - mpeg_pause(); - used = true; - break; - - case BUTTON_PLAY | BUTTON_REL: - mpeg_resume(); - used = true; - break; - - case BUTTON_ON | BUTTON_PLAY | BUTTON_REL: - mpeg_resume(); - exit = true; - break; - - case BUTTON_ON | BUTTON_RIGHT: - if ( pitch < 2000 ) { - pitch += 20; - mpeg_set_pitch(pitch); - } - break; - - case BUTTON_RIGHT | BUTTON_REL: - if ( pitch > 500 ) { - pitch -= 20; - mpeg_set_pitch(pitch); - } - break; - - case BUTTON_ON | BUTTON_LEFT: - if ( pitch > 500 ) { - pitch -= 20; - mpeg_set_pitch(pitch); - } - break; - - case BUTTON_LEFT | BUTTON_REL: - if ( pitch < 2000 ) { - pitch += 20; - mpeg_set_pitch(pitch); - } - break; - -#ifdef SIMULATOR - case BUTTON_ON: -#else - case BUTTON_ON | BUTTON_REL: - case BUTTON_ON | BUTTON_UP | BUTTON_REL: - case BUTTON_ON | BUTTON_DOWN | BUTTON_REL: -#endif - exit = true; - break; - - case BUTTON_ON | BUTTON_REPEAT: - used = true; - break; - - case SYS_USB_CONNECTED: - usb_screen(); - return 2; - } - } - - lcd_setfont(FONT_UI); - - if ( used ) - return 1; - else - return 0; -} - bool f2_screen(void) { bool exit = false; diff -ubrN -x CVS rockbox/apps/sound_menu.c rockbox.dev/apps/sound_menu.c --- rockbox/apps/sound_menu.c 2004-01-21 06:58:40.000000000 -0800 +++ rockbox.dev/apps/sound_menu.c 2004-03-02 21:53:24.000000000 -0800 @@ -27,11 +27,17 @@ #include "settings.h" #include "status.h" #include "screens.h" +#include "sprintf.h" #ifdef HAVE_LCD_BITMAP #include "icons.h" #endif #include "lang.h" #include "sprintf.h" +#include "font.h" +#include "mpeg.h" +#ifdef HAVE_RECORDER_KEYPAD +static bool set_pitch(void); +#endif static char *fmt[] = { @@ -296,6 +302,9 @@ bool result; struct menu_items items[] = { { str(LANG_VOLUME), volume }, +#ifdef HAVE_RECORDER_KEYPAD + { str(LANG_SET_PITCH), set_pitch }, +#endif { str(LANG_BASS), bass }, { str(LANG_TREBLE), treble }, { str(LANG_BALANCE), balance }, @@ -348,3 +357,80 @@ return result; } #endif +#ifdef HAVE_RECORDER_KEYPAD +bool set_pitch(void) +{ + static int pitch = 1000; + + while (true) { + + char* ptr; + char buf[32]; + int w, h; + + lcd_clear_display(); + lcd_setfont(FONT_SYSFIXED); + + ptr = str(LANG_SET_PITCH); + lcd_getstringsize(ptr,&w,&h); + lcd_putsxy(0, 0, ptr); + + snprintf(buf, sizeof buf, "%d.%d%%", pitch / 10, pitch % 10 ); + lcd_getstringsize(buf,&w,&h); + lcd_putsxy(0, h, buf); + + lcd_update(); + + switch (button_get(true)) { + case BUTTON_UP: + case BUTTON_UP | BUTTON_REPEAT: + pitch++; + if ( pitch > 2000 ) + pitch = 2000; + + break; + + case BUTTON_DOWN: + case BUTTON_DOWN | BUTTON_REPEAT: + pitch--; + if ( pitch < 500 ) + pitch = 500; + break; + + case BUTTON_PLAY: + if ((mpeg_status() & MPEG_STATUS_PLAY) && + !(mpeg_status() & MPEG_STATUS_PAUSE)) + mpeg_pause(); + else + mpeg_resume(); + break; + + case BUTTON_ON | BUTTON_UP: + if ( pitch < 2000 ) { + pitch += 20; + } + break; + + case BUTTON_ON | BUTTON_DOWN: + if ( pitch > 500 ) { + pitch -= 20; + } + break; + + case BUTTON_OFF | BUTTON_REL: + case BUTTON_LEFT | BUTTON_REL: + lcd_setfont(FONT_UI); + return 0; + break; + + case SYS_USB_CONNECTED: + usb_screen(); + return 1; + break; + } + mpeg_set_pitch(pitch); + } + + return 0; +} +#endif diff -ubrN -x CVS rockbox/apps/wps.c rockbox.dev/apps/wps.c --- rockbox/apps/wps.c 2004-01-15 15:05:13.000000000 -0800 +++ rockbox.dev/apps/wps.c 2004-03-02 21:58:51.000000000 -0800 @@ -55,6 +55,13 @@ static struct mp3entry* id3 = NULL; static char current_track_path[MAX_PATH+1]; +static int ff_rew_steps[] = { + 1000, 2000, 3000, 4000, + 5000, 6000, 8000, 10000, + 15000, 20000, 25000, 30000, + 45000, 60000 + }; + #if defined(HAVE_PLAYER_KEYPAD) || defined(HAVE_NEO_KEYPAD) void player_change_volume(int button) { @@ -304,12 +311,6 @@ static bool ffwd_rew(int button) { - static int ff_rew_steps[] = { - 1000, 2000, 3000, 4000, - 5000, 6000, 8000, 10000, - 15000, 20000, 25000, 30000, - 45000, 60000 - }; unsigned int step = 0; /* current ff/rewind step */ unsigned int max_step = 0; /* maximum ff/rewind step */ @@ -766,44 +767,6 @@ switch(button) { -#ifdef BUTTON_ON - case BUTTON_ON: -#ifdef HAVE_RECORDER_KEYPAD - switch (on_screen()) { - case 2: - /* usb connected? */ - return SYS_USB_CONNECTED; - - case 1: - /* was on_screen used? */ - restore = true; - - /* pause may have been turned off by pitch screen */ - if (paused && !(mpeg_status() & MPEG_STATUS_PAUSE)) { - paused = false; - status_set_playmode(STATUS_PLAY); - } - break; - - case 0: - /* otherwise, exit to browser */ -#else - status_set_record(false); - status_set_audio(false); -#endif - lcd_stop_scroll(); - - /* set dir browser to current playing song */ - if (global_settings.browse_current && - current_track_path[0] != '\0') - set_current_file(current_track_path); - - return 0; -#ifdef HAVE_RECORDER_KEYPAD - } - break; -#endif -#endif /* BUTTON_ON */ /* play/pause */ case BUTTON_PLAY: #ifdef BUTTON_RC_PLAY @@ -874,15 +837,7 @@ break; /* prev / restart */ -#ifdef BUTTON_RC_LEFT - case BUTTON_RC_LEFT: -#endif - case BUTTON_LEFT | BUTTON_REL: -#ifdef HAVE_RECORDER_KEYPAD - if ((button == (BUTTON_LEFT | BUTTON_REL)) && - (lastbutton != BUTTON_LEFT )) - break; -#endif + case BUTTON_ON | BUTTON_LEFT: if (!id3 || (id3->elapsed < 3*1000)) { mpeg_prev(); } @@ -897,7 +852,34 @@ } break; + /* next */ + case BUTTON_ON | BUTTON_RIGHT: + mpeg_next(); + break; + + + /* Instant Replay */ +#ifdef BUTTON_RC_LEFT + case BUTTON_RC_LEFT: +#endif + case BUTTON_LEFT | BUTTON_REL: +#ifdef HAVE_RECORDER_KEYPAD + if ((button == (BUTTON_LEFT | BUTTON_REL)) && + (lastbutton != BUTTON_LEFT )) + break; +#endif + mpeg_pause(); + int temp = id3->elapsed - (ff_rew_steps[global_settings.ff_rewind_min_step]); + if(temp <= 0) + mpeg_ff_rewind(0); + else + mpeg_ff_rewind(id3->elapsed - (ff_rew_steps[global_settings.ff_rewind_min_step])); + mpeg_resume(); + wps_refresh(id3, 0, WPS_REFRESH_ALL); + break; + + /* Quick Skip */ #ifdef BUTTON_RC_RIGHT case BUTTON_RC_RIGHT: #endif @@ -907,7 +889,13 @@ (lastbutton != BUTTON_RIGHT)) break; #endif + mpeg_pause(); + if(id3->elapsed + (ff_rew_steps[global_settings.ff_rewind_min_step]) > id3->length) mpeg_next(); + else + mpeg_ff_rewind(id3->elapsed + (ff_rew_steps[global_settings.ff_rewind_min_step])); + mpeg_resume(); + wps_refresh(id3, 0, WPS_REFRESH_ALL); break; /* menu key functions */