diff options
| author | Stepan Moskovchenko <stevenm@rockbox.org> | 2008-01-02 06:35:59 +0000 |
|---|---|---|
| committer | Stepan Moskovchenko <stevenm@rockbox.org> | 2008-01-02 06:35:59 +0000 |
| commit | 59acdc336b4e7856b32c374f8caec2d5b5b6fa74 (patch) | |
| tree | 752dd39a8b268bbe4cfcf7bb82752aed56136b9d /apps | |
| parent | a39039d80b2896e69cb5d12ab7c1e17bdf43700f (diff) | |
| download | rockbox-59acdc336b4e7856b32c374f8caec2d5b5b6fa74.zip rockbox-59acdc336b4e7856b32c374f8caec2d5b5b6fa74.tar.gz rockbox-59acdc336b4e7856b32c374f8caec2d5b5b6fa74.tar.bz2 rockbox-59acdc336b4e7856b32c374f8caec2d5b5b6fa74.tar.xz | |
MIDI player: Allow pause and seeking during pause. Print out the play/pause/seek position in seconds.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15985 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/plugins/midi/midiplay.c | 42 | ||||
| -rw-r--r-- | apps/plugins/midi/midiutil.c | 45 |
2 files changed, 65 insertions, 22 deletions
diff --git a/apps/plugins/midi/midiplay.c b/apps/plugins/midi/midiplay.c index 934cea7..88fbf11 100644 --- a/apps/plugins/midi/midiplay.c +++ b/apps/plugins/midi/midiplay.c @@ -33,6 +33,7 @@ PLUGIN_IRAM_DECLARE #define BTN_UP BUTTON_UP #define BTN_DOWN BUTTON_DOWN #define BTN_LEFT BUTTON_LEFT +#define BTN_PLAY BUTTON_PLAY #elif CONFIG_KEYPAD == ONDIO_PAD #define BTN_QUIT BUTTON_OFF @@ -40,6 +41,8 @@ PLUGIN_IRAM_DECLARE #define BTN_UP BUTTON_UP #define BTN_DOWN BUTTON_DOWN #define BTN_LEFT BUTTON_LEFT +#define BTN_PLAY (BUTTON_MENU | BUTTON_OFF) + #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) #define BTN_QUIT BUTTON_OFF @@ -47,8 +50,8 @@ PLUGIN_IRAM_DECLARE #define BTN_UP BUTTON_UP #define BTN_DOWN BUTTON_DOWN #define BTN_LEFT BUTTON_LEFT - #define BTN_RC_QUIT BUTTON_RC_STOP +#define BTN_PLAY BUTTON_ON #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ (CONFIG_KEYPAD == IPOD_1G2G_PAD) @@ -57,6 +60,8 @@ PLUGIN_IRAM_DECLARE #define BTN_LEFT BUTTON_LEFT #define BTN_UP BUTTON_SCROLL_FWD #define BTN_DOWN BUTTON_SCROLL_BACK +#define BTN_PLAY BUTTON_PLAY + #elif (CONFIG_KEYPAD == GIGABEAT_PAD) #define BTN_QUIT BUTTON_POWER @@ -64,6 +69,8 @@ PLUGIN_IRAM_DECLARE #define BTN_LEFT BUTTON_LEFT #define BTN_UP BUTTON_UP #define BTN_DOWN BUTTON_DOWN +#define BTN_PAUSE BUTTON_A + #elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \ (CONFIG_KEYPAD == SANSA_C200_PAD) @@ -72,6 +79,8 @@ PLUGIN_IRAM_DECLARE #define BTN_LEFT BUTTON_LEFT #define BTN_UP BUTTON_UP #define BTN_DOWN BUTTON_DOWN +#define BTN_PLAY BUTTON_REC + #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD #define BTN_QUIT BUTTON_POWER @@ -79,6 +88,8 @@ PLUGIN_IRAM_DECLARE #define BTN_LEFT BUTTON_LEFT #define BTN_UP BUTTON_UP #define BTN_DOWN BUTTON_DOWN +#define BTN_PLAY BUTTON_PLAY + #elif CONFIG_KEYPAD == IRIVER_H10_PAD #define BTN_QUIT BUTTON_POWER @@ -86,6 +97,8 @@ PLUGIN_IRAM_DECLARE #define BTN_LEFT BUTTON_LEFT #define BTN_UP BUTTON_SCROLL_UP #define BTN_DOWN BUTTON_SCROLL_DOWN +#define BTN_PLAY BUTTON_PLAY + #elif CONFIG_KEYPAD == MROBE500_PAD #define BTN_QUIT BUTTON_POWER @@ -93,6 +106,8 @@ PLUGIN_IRAM_DECLARE #define BTN_LEFT BUTTON_LEFT #define BTN_UP BUTTON_RC_PLAY #define BTN_DOWN BUTTON_RC_DOWN +#define BTN_PLAY BUTTON_RC_HEART + #endif @@ -274,6 +289,7 @@ static int midimain(void * filename) synthbuf(); rb->pcm_play_data(&get_more, NULL, 0); + int isPlaying = 1; /* 0 = paused */ int vol=0; while(!quit) @@ -318,8 +334,10 @@ static int midimain(void * filename) /* but run through the tracks without the synth running */ rb->pcm_play_stop(); seekBackward(5); - rb->pcm_play_data(&get_more, NULL, 0); + printf("Rewind to %d:%02d\n", playingTime/60, playingTime%60); + if(isPlaying) + rb->pcm_play_data(&get_more, NULL, 0); break; } @@ -327,10 +345,28 @@ static int midimain(void * filename) { rb->pcm_play_stop(); seekForward(5); - rb->pcm_play_data(&get_more, NULL, 0); + printf("Skip to %d:%02d\n", playingTime/60, playingTime%60); + + if(isPlaying) + rb->pcm_play_data(&get_more, NULL, 0); break; } + case BTN_PLAY: + { + if(isPlaying == 1) + { + printf("Paused at %d:%02d\n", playingTime/60, playingTime%60); + isPlaying = 0; + rb->pcm_play_stop(); + } else + { + printf("Playing from %d:%02d\n", playingTime/60, playingTime%60); + isPlaying = 1; + rb->pcm_play_data(&get_more, NULL, 0); + } + break; + } #ifdef BTN_RC_QUIT case BTN_RC_QUIT: diff --git a/apps/plugins/midi/midiutil.c b/apps/plugins/midi/midiutil.c index 65ba9c8..3cb4a9e 100644 --- a/apps/plugins/midi/midiutil.c +++ b/apps/plugins/midi/midiutil.c @@ -135,25 +135,32 @@ int eof(int fd) // Here is a hacked up printf command to get the output from the game. int printf(const char *fmt, ...) { - static int p_xtpt = 0; - char p_buf[50]; - bool ok; - va_list ap; - - va_start(ap, fmt); - ok = rb->vsnprintf(p_buf,sizeof(p_buf), fmt, ap); - va_end(ap); - - rb->lcd_putsxy(1,p_xtpt, (unsigned char *)p_buf); - rb->lcd_update(); - - p_xtpt+=8; - if(p_xtpt>LCD_HEIGHT-8) - { - p_xtpt=0; - rb->lcd_clear_display(); - } - return 1; + static int p_xtpt = 0; + char p_buf[50]; + bool ok; + va_list ap; + + va_start(ap, fmt); + ok = rb->vsnprintf(p_buf,sizeof(p_buf), fmt, ap); + va_end(ap); + + int i=0; + + /* Device LCDs display newlines funny. */ + for(i=0; p_buf[i]!=0; i++) + if(p_buf[i] == '\n') + p_buf[i] = ' '; + + rb->lcd_putsxy(1,p_xtpt, (unsigned char *)p_buf); + rb->lcd_update(); + + p_xtpt+=8; + if(p_xtpt>LCD_HEIGHT-8) + { + p_xtpt=0; + rb->lcd_clear_display(); + } + return 1; } void exit(int code) |