From 68af7bae87b0fa4f0da080752a73e638f2ecdf21 Mon Sep 17 00:00:00 2001 From: Stepan Moskovchenko Date: Sun, 7 May 2006 07:12:07 +0000 Subject: Added ability to adjust the volume during playback. Gracefully fail if no soundset installed. Yet more messing with the ramping code. I swear, that will be the end of me. Basic skipping support- skip foreward a bit if Right is pressed. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9883 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/midiplay.c | 68 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 60 insertions(+), 8 deletions(-) (limited to 'apps/plugins/midiplay.c') diff --git a/apps/plugins/midiplay.c b/apps/plugins/midiplay.c index d420508..70ffaa7 100644 --- a/apps/plugins/midiplay.c +++ b/apps/plugins/midiplay.c @@ -22,7 +22,7 @@ PLUGIN_HEADER #define FRACTSIZE 10 #define SAMPLE_RATE 22050 // 44100 22050 11025 -#define MAX_VOICES 13 // Note: 24 midi channels is the minimum general midi +#define MAX_VOICES 14 // Note: 24 midi channels is the minimum general midi // spec implementation #define BUF_SIZE 512 #define NBUF 2 @@ -161,13 +161,12 @@ void get_more(unsigned char** start, size_t* size) int midimain(void * filename) { - int button; - - /* rb->splash(HZ/5, true, "LOADING MIDI"); */ + int notesUsed = 0; + int a=0; printf("\nLoading file"); mf= loadFile(filename); - /* rb->splash(HZ/5, true, "LOADING PATCHES"); */ + if (initSynth(mf, "/.rockbox/patchset/patchset.cfg", "/.rockbox/patchset/drums.cfg") == -1) return -1; @@ -191,14 +190,25 @@ int midimain(void * filename) bpm=mf->div*1000000/tempo; numberOfSamples=SAMPLE_RATE/bpm; - tick(); + + + /* Skip over any junk in the beginning of the file, so start playing */ + /* after the first note event */ + do + { + notesUsed = 0; + for(a=0; apcm_play_data(&get_more, NULL, 0); #endif - button=rb->button_status(); + int vol=0; while(!quit) { @@ -206,7 +216,49 @@ int midimain(void * filename) synthbuf(); #endif rb->yield(); - if(rb->button_status()!=button) quit=1; + + /* Code taken from Oscilloscope plugin */ + switch(rb->button_get(false)) + { + case BUTTON_UP: + case BUTTON_UP | BUTTON_REPEAT: + vol = rb->global_settings->volume; + if (vol < rb->sound_max(SOUND_VOLUME)) + { + vol++; + rb->sound_set(SOUND_VOLUME, vol); + rb->global_settings->volume = vol; + } + break; + + case BUTTON_DOWN: + case BUTTON_DOWN | BUTTON_REPEAT: + vol = rb->global_settings->volume; + if (vol > rb->sound_min(SOUND_VOLUME)) + { + vol--; + rb->sound_set(SOUND_VOLUME, vol); + rb->global_settings->volume = vol; + } + break; + + case BUTTON_RIGHT: + { + /* Skip 3 seconds */ + /* Should skip length be retrieved from the RB settings? */ + int samp = 3*SAMPLE_RATE; + int tickCount = samp / numberOfSamples; + int a=0; + for(a=0; a