1
0
Fork 0
forked from len0rd/rockbox

Added pitch setting screen for recorders. Hold ON in wps to see it. Pitch range is 50-200%

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2290 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Björn Stenberg 2002-09-13 13:14:06 +00:00
parent 4ede925c8d
commit 8ce651efa0
2 changed files with 150 additions and 14 deletions

View file

@ -45,7 +45,7 @@
/* 3% of 30min file == 54s step size */ /* 3% of 30min file == 54s step size */
#ifdef HAVE_RECORDER_KEYPAD #ifdef HAVE_RECORDER_KEYPAD
#define RELEASE_MASK (BUTTON_F1 | BUTTON_F2 | BUTTON_F3 | BUTTON_DOWN | BUTTON_LEFT | BUTTON_RIGHT | BUTTON_UP) #define RELEASE_MASK (BUTTON_F1 | BUTTON_F2 | BUTTON_F3 | BUTTON_DOWN | BUTTON_LEFT | BUTTON_RIGHT | BUTTON_UP | BUTTON_ON | BUTTON_PLAY )
#else #else
#define RELEASE_MASK (BUTTON_MENU | BUTTON_STOP | BUTTON_LEFT | BUTTON_RIGHT | BUTTON_PLAY) #define RELEASE_MASK (BUTTON_MENU | BUTTON_STOP | BUTTON_LEFT | BUTTON_RIGHT | BUTTON_PLAY)
#endif #endif
@ -624,6 +624,120 @@ static bool menu(void)
} }
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
/* 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 = 100;
bool exit = false;
bool used = false;
#ifdef SIMULATOR
bool draw = true;
#else
bool draw = false;
#endif
while (!exit) {
if ( draw ) {
char* ptr;
char buf[32];
int w, h;
lcd_scroll_pause();
lcd_clear_display();
ptr = "Pitch up";
lcd_getstringsize(ptr,FONT_UI,&w,&h);
lcd_putsxy((LCD_WIDTH-w)/2, 0, ptr, FONT_UI);
lcd_bitmap(bitmap_icons_7x8[Icon_UpArrow],
LCD_WIDTH/2 - 3, h*2, 7, 8, true);
snprintf(buf, sizeof buf, "%d%%", pitch);
lcd_getstringsize(buf,FONT_UI,&w,&h);
lcd_putsxy((LCD_WIDTH-w)/2, h, buf, FONT_UI);
ptr = "Pitch down";
lcd_getstringsize(ptr,FONT_UI,&w,&h);
lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr, FONT_UI);
lcd_bitmap(bitmap_icons_7x8[Icon_DownArrow],
LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8, true);
ptr = "Pause";
lcd_getstringsize(ptr,FONT_UI,&w,&h);
lcd_putsxy((LCD_WIDTH-(w/2))/2, LCD_HEIGHT/2 - h/2, ptr, FONT_UI);
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 > 200 )
pitch = 200;
#ifdef HAVE_MAS3587F
mpeg_set_pitch(pitch);
#endif
break;
case BUTTON_DOWN:
case BUTTON_ON | BUTTON_DOWN:
case BUTTON_ON | BUTTON_DOWN | BUTTON_REPEAT:
used = true;
pitch--;
if ( pitch < 50 )
pitch = 50;
#ifdef HAVE_MAS3587F
mpeg_set_pitch(pitch);
#endif
break;
case BUTTON_ON | BUTTON_PLAY:
mpeg_pause();
used = true;
break;
case BUTTON_PLAY | BUTTON_REL:
mpeg_resume();
used = true;
break;
#ifdef SIMULATOR
case BUTTON_ON:
#else
case BUTTON_ON | BUTTON_REL:
#endif
exit = true;
break;
case BUTTON_ON | BUTTON_REPEAT:
draw = true;
used = true;
break;
#ifndef SIMULATOR
case SYS_USB_CONNECTED:
handle_usb();
return 2;
#endif
}
}
if ( used )
return 1;
else
return 0;
}
bool f2_screen(void) bool f2_screen(void)
{ {
bool exit = false; bool exit = false;
@ -764,12 +878,14 @@ bool f3_screen(void)
int wps_show(void) int wps_show(void)
{ {
int button, lastbutton = 0; int button, lastbutton = 0;
int old_repeat_mask;
bool ignore_keyup = true; bool ignore_keyup = true;
bool restore = false; bool restore = false;
id3 = NULL; id3 = NULL;
old_release_mask = button_set_release(RELEASE_MASK); old_release_mask = button_set_release(RELEASE_MASK);
old_repeat_mask = button_set_repeat(~0);
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_LCD_CHARCELLS
lcd_icon(ICON_AUDIO, true); lcd_icon(ICON_AUDIO, true);
@ -807,19 +923,36 @@ int wps_show(void)
switch(button) switch(button)
{ {
/* exit to dir browser */
case BUTTON_ON: case BUTTON_ON:
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_RECORDER_KEYPAD
lcd_icon(ICON_RECORD, false); switch (on_screen()) {
lcd_icon(ICON_AUDIO, false); case 2:
#endif /* usb connected? */
/* set dir browser to current playing song */ return SYS_USB_CONNECTED;
if (global_settings.browse_current && id3)
set_current_file(id3->path);
button_set_release(old_release_mask);
return 0;
case 1:
/* was on_screen used? */
restore = true;
break;
case 0:
/* otherwise, exit to browser */
#else
lcd_icon(ICON_RECORD, false);
lcd_icon(ICON_AUDIO, false);
#endif
/* set dir browser to current playing song */
if (global_settings.browse_current && id3)
set_current_file(id3->path);
button_set_release(old_release_mask);
button_set_repeat(old_repeat_mask);
return 0;
#ifdef HAVE_RECORDER_KEYPAD
}
break;
#endif
/* play/pause */ /* play/pause */
case BUTTON_PLAY: case BUTTON_PLAY:
if ( paused ) if ( paused )
@ -937,7 +1070,7 @@ int wps_show(void)
#else #else
case BUTTON_STOP | BUTTON_REL: case BUTTON_STOP | BUTTON_REL:
if ( lastbutton != BUTTON_STOP ) if ( lastbutton != BUTTON_STOP )
break; break;
#endif #endif
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_LCD_CHARCELLS
lcd_icon(ICON_RECORD, false); lcd_icon(ICON_RECORD, false);

View file

@ -1795,8 +1795,11 @@ void mpeg_set_pitch(int percent)
{ {
unsigned long val; unsigned long val;
/* invert percent value */
percent = 10000/percent;
/* Calculate the new (bogus) frequency */ /* Calculate the new (bogus) frequency */
val = 18432 - (18432*percent/100); val = 18432*percent/100;
mas_writemem(MAS_BANK_D0,0x7f3,&val,1); mas_writemem(MAS_BANK_D0,0x7f3,&val,1);