summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStepan Moskovchenko <stevenm@rockbox.org>2008-01-02 06:35:59 +0000
committerStepan Moskovchenko <stevenm@rockbox.org>2008-01-02 06:35:59 +0000
commit59acdc336b4e7856b32c374f8caec2d5b5b6fa74 (patch)
tree752dd39a8b268bbe4cfcf7bb82752aed56136b9d
parenta39039d80b2896e69cb5d12ab7c1e17bdf43700f (diff)
downloadrockbox-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
-rw-r--r--apps/plugins/midi/midiplay.c42
-rw-r--r--apps/plugins/midi/midiutil.c45
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)