Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 1 | /*************************************************************************** |
| 2 | * __________ __ ___. |
| 3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ |
| 4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / |
| 5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < |
| 6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ |
| 7 | * \/ \/ \/ \/ \/ |
Nils Wallménius | 0e49605 | 2007-09-24 15:57:32 +0000 | [diff] [blame] | 8 | * $Id$ |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 9 | * |
| 10 | * Copyright (C) 2005 Karl Kurbjun based on midi2wav by Stepan Moskovchenko |
| 11 | * |
| 12 | * All files in this archive are subject to the GNU General Public License. |
| 13 | * See the file COPYING in the source tree root for full license agreement. |
| 14 | * |
| 15 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| 16 | * KIND, either express or implied. |
| 17 | * |
| 18 | ****************************************************************************/ |
Nils Wallménius | 0e49605 | 2007-09-24 15:57:32 +0000 | [diff] [blame] | 19 | #include "plugin.h" |
| 20 | #include "guspat.h" |
| 21 | #include "midiutil.h" |
| 22 | #include "synth.h" |
| 23 | #include "sequencer.h" |
| 24 | #include "midifile.h" |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 25 | |
| 26 | PLUGIN_HEADER |
Michael Sevakis | acc29d9 | 2006-11-18 02:18:29 +0000 | [diff] [blame] | 27 | PLUGIN_IRAM_DECLARE |
Stepan Moskovchenko | 595a204 | 2006-05-07 07:27:07 +0000 | [diff] [blame] | 28 | |
| 29 | /* variable button definitions */ |
| 30 | #if CONFIG_KEYPAD == RECORDER_PAD |
| 31 | #define BTN_QUIT BUTTON_OFF |
| 32 | #define BTN_RIGHT BUTTON_RIGHT |
| 33 | #define BTN_UP BUTTON_UP |
| 34 | #define BTN_DOWN BUTTON_DOWN |
| 35 | |
| 36 | #elif CONFIG_KEYPAD == ONDIO_PAD |
| 37 | #define BTN_QUIT BUTTON_OFF |
| 38 | #define BTN_RIGHT BUTTON_RIGHT |
| 39 | #define BTN_UP BUTTON_UP |
| 40 | #define BTN_DOWN BUTTON_DOWN |
| 41 | |
| 42 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) |
| 43 | #define BTN_QUIT BUTTON_OFF |
| 44 | #define BTN_RIGHT BUTTON_RIGHT |
| 45 | #define BTN_UP BUTTON_UP |
| 46 | #define BTN_DOWN BUTTON_DOWN |
| 47 | |
Kevin Ferrare | 0e027bd | 2006-06-30 16:43:47 +0000 | [diff] [blame] | 48 | #define BTN_RC_QUIT BUTTON_RC_STOP |
| 49 | |
Jens Arnold | b701322 | 2007-07-27 09:57:27 +0000 | [diff] [blame] | 50 | #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ |
| 51 | (CONFIG_KEYPAD == IPOD_1G2G_PAD) |
Stepan Moskovchenko | 595a204 | 2006-05-07 07:27:07 +0000 | [diff] [blame] | 52 | #define BTN_QUIT (BUTTON_SELECT | BUTTON_MENU) |
| 53 | #define BTN_RIGHT BUTTON_RIGHT |
| 54 | #define BTN_UP BUTTON_SCROLL_FWD |
| 55 | #define BTN_DOWN BUTTON_SCROLL_BACK |
| 56 | |
| 57 | #elif (CONFIG_KEYPAD == GIGABEAT_PAD) |
| 58 | #define BTN_QUIT BUTTON_POWER |
| 59 | #define BTN_RIGHT BUTTON_RIGHT |
Marcoen Hirschberg | a7168fe | 2007-05-19 23:38:09 +0000 | [diff] [blame] | 60 | #define BTN_UP BUTTON_UP |
| 61 | #define BTN_DOWN BUTTON_DOWN |
Stepan Moskovchenko | 595a204 | 2006-05-07 07:27:07 +0000 | [diff] [blame] | 62 | |
Marianne Arnold | 12ddb8e | 2007-09-20 10:49:48 +0000 | [diff] [blame] | 63 | #elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \ |
| 64 | (CONFIG_KEYPAD == SANSA_C200_PAD) |
Barry Wardell | 24f4a2a | 2006-10-26 13:38:09 +0000 | [diff] [blame] | 65 | #define BTN_QUIT BUTTON_POWER |
| 66 | #define BTN_RIGHT BUTTON_RIGHT |
| 67 | #define BTN_UP BUTTON_UP |
| 68 | #define BTN_DOWN BUTTON_DOWN |
| 69 | |
Jens Arnold | 85a226d | 2007-03-16 23:02:39 +0000 | [diff] [blame] | 70 | #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD |
Stepan Moskovchenko | 595a204 | 2006-05-07 07:27:07 +0000 | [diff] [blame] | 71 | #define BTN_QUIT BUTTON_POWER |
| 72 | #define BTN_RIGHT BUTTON_RIGHT |
| 73 | #define BTN_UP BUTTON_UP |
| 74 | #define BTN_DOWN BUTTON_DOWN |
| 75 | |
Daniel Stenberg | 1e88be5 | 2006-08-03 20:17:25 +0000 | [diff] [blame] | 76 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD |
| 77 | #define BTN_QUIT BUTTON_POWER |
| 78 | #define BTN_RIGHT BUTTON_RIGHT |
| 79 | #define BTN_UP BUTTON_SCROLL_UP |
| 80 | #define BTN_DOWN BUTTON_SCROLL_DOWN |
| 81 | |
Stepan Moskovchenko | 595a204 | 2006-05-07 07:27:07 +0000 | [diff] [blame] | 82 | #endif |
| 83 | |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 84 | #undef SYNC |
Stepan Moskovchenko | 9cf7617 | 2007-01-11 20:13:15 +0000 | [diff] [blame] | 85 | |
| 86 | #ifdef SIMULATOR |
| 87 | #define SYNC |
| 88 | #endif |
| 89 | |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 90 | struct MIDIfile * mf IBSS_ATTR; |
| 91 | |
| 92 | int numberOfSamples IBSS_ATTR; |
| 93 | long bpm IBSS_ATTR; |
| 94 | |
Nils Wallménius | ff7b3c5 | 2007-09-24 16:47:34 +0000 | [diff] [blame] | 95 | int32_t gmbuf[BUF_SIZE*NBUF]; |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 96 | |
| 97 | int quit=0; |
| 98 | struct plugin_api * rb; |
| 99 | |
Nils Wallménius | 6386dbe | 2007-09-30 11:21:25 +0000 | [diff] [blame] | 100 | static int midimain(void * filename); |
| 101 | |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 102 | enum plugin_status plugin_start(struct plugin_api* api, void* parameter) |
| 103 | { |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 104 | int retval = 0; |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 105 | |
Tomasz Malesinski | 80da8b1 | 2006-11-26 18:31:41 +0000 | [diff] [blame] | 106 | PLUGIN_IRAM_INIT(api) |
| 107 | |
| 108 | rb = api; |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 109 | if(parameter == NULL) |
| 110 | { |
Jens Arnold | f3455d1 | 2007-03-16 22:09:52 +0000 | [diff] [blame] | 111 | rb->splash(HZ*2, " Play .MID file "); |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 112 | return PLUGIN_OK; |
| 113 | } |
| 114 | rb->lcd_setfont(0); |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 115 | |
Christian Gmeiner | 98d5212 | 2006-06-12 00:13:00 +0000 | [diff] [blame] | 116 | #if defined(HAVE_ADJUSTABLE_CPU_FREQ) |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 117 | rb->cpu_boost(true); |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 118 | #endif |
| 119 | |
Jens Arnold | b1f0049 | 2007-04-21 05:35:17 +0000 | [diff] [blame] | 120 | printf("%s", parameter); |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 121 | /* rb->splash(HZ, true, parameter); */ |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 122 | |
| 123 | #ifdef RB_PROFILE |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 124 | rb->profile_thread(); |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 125 | #endif |
| 126 | |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 127 | retval = midimain(parameter); |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 128 | |
| 129 | #ifdef RB_PROFILE |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 130 | rb->profstop(); |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 131 | #endif |
| 132 | |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 133 | rb->pcm_play_stop(); |
Steve Bavin | 18b84ee | 2007-03-14 16:43:21 +0000 | [diff] [blame] | 134 | rb->pcm_set_frequency(HW_SAMPR_DEFAULT); |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 135 | |
Christian Gmeiner | 98d5212 | 2006-06-12 00:13:00 +0000 | [diff] [blame] | 136 | #if defined(HAVE_ADJUSTABLE_CPU_FREQ) |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 137 | rb->cpu_boost(false); |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 138 | #endif |
Jens Arnold | f3455d1 | 2007-03-16 22:09:52 +0000 | [diff] [blame] | 139 | rb->splash(HZ, "FINISHED PLAYING"); |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 140 | |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 141 | if(retval == -1) |
| 142 | return PLUGIN_ERROR; |
| 143 | return PLUGIN_OK; |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 144 | } |
| 145 | |
| 146 | bool swap=0; |
| 147 | bool lastswap=1; |
| 148 | |
Nils Wallménius | c6c7b73 | 2007-09-29 16:06:16 +0000 | [diff] [blame] | 149 | static inline void synthbuf(void) |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 150 | { |
Nils Wallménius | f619f81 | 2007-10-08 19:28:41 +0000 | [diff] [blame] | 151 | int32_t *outptr; |
| 152 | int i; |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 153 | |
| 154 | #ifndef SYNC |
Nils Wallménius | f619f81 | 2007-10-08 19:28:41 +0000 | [diff] [blame] | 155 | if(lastswap==swap) return; |
| 156 | lastswap=swap; |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 157 | |
Nils Wallménius | f619f81 | 2007-10-08 19:28:41 +0000 | [diff] [blame] | 158 | outptr=(swap ? gmbuf : gmbuf+BUF_SIZE); |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 159 | #else |
Nils Wallménius | f619f81 | 2007-10-08 19:28:41 +0000 | [diff] [blame] | 160 | outptr=gmbuf; |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 161 | #endif |
| 162 | |
Nils Wallménius | f619f81 | 2007-10-08 19:28:41 +0000 | [diff] [blame] | 163 | for(i=0; i<BUF_SIZE/numberOfSamples; i++) |
| 164 | { |
| 165 | synthSamples((int32_t*)outptr, numberOfSamples); |
| 166 | outptr += numberOfSamples; |
| 167 | if( tick() == 0 ) |
| 168 | quit=1; |
| 169 | } |
| 170 | |
| 171 | if(BUF_SIZE%numberOfSamples) |
| 172 | { |
| 173 | synthSamples((int32_t*)outptr, BUF_SIZE%numberOfSamples); |
| 174 | outptr += BUF_SIZE%numberOfSamples; |
| 175 | } |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 176 | } |
| 177 | |
| 178 | void get_more(unsigned char** start, size_t* size) |
| 179 | { |
| 180 | #ifndef SYNC |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 181 | if(lastswap!=swap) |
| 182 | { |
| 183 | printf("Buffer miss!"); // Comment out the printf to make missses less noticable. |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 184 | } |
| 185 | |
| 186 | #else |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 187 | synthbuf(); // For some reason midiplayer crashes when an update is forced |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 188 | #endif |
| 189 | |
Nils Wallménius | c6c7b73 | 2007-09-29 16:06:16 +0000 | [diff] [blame] | 190 | *size = sizeof(gmbuf)/NBUF; |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 191 | #ifndef SYNC |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 192 | *start = (unsigned char*)((swap ? gmbuf : gmbuf + BUF_SIZE)); |
| 193 | swap=!swap; |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 194 | #else |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 195 | *start = (unsigned char*)(gmbuf); |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 196 | #endif |
| 197 | } |
| 198 | |
Nils Wallménius | 6386dbe | 2007-09-30 11:21:25 +0000 | [diff] [blame] | 199 | static int midimain(void * filename) |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 200 | { |
Stepan Moskovchenko | 68af7ba | 2006-05-07 07:12:07 +0000 | [diff] [blame] | 201 | int notesUsed = 0; |
| 202 | int a=0; |
Jens Arnold | b1f0049 | 2007-04-21 05:35:17 +0000 | [diff] [blame] | 203 | printf("Loading file"); |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 204 | mf= loadFile(filename); |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 205 | |
Stepan Moskovchenko | b9b2bcd | 2006-05-08 02:43:29 +0000 | [diff] [blame] | 206 | if(mf == NULL) |
| 207 | { |
Jens Arnold | b1f0049 | 2007-04-21 05:35:17 +0000 | [diff] [blame] | 208 | printf("Error loading file."); |
Stepan Moskovchenko | b9b2bcd | 2006-05-08 02:43:29 +0000 | [diff] [blame] | 209 | return -1; |
| 210 | } |
Stepan Moskovchenko | 68af7ba | 2006-05-07 07:12:07 +0000 | [diff] [blame] | 211 | |
Nils Wallménius | 04b3435 | 2007-09-10 09:46:36 +0000 | [diff] [blame] | 212 | if (initSynth(mf, ROCKBOX_DIR "/patchset/patchset.cfg", |
| 213 | ROCKBOX_DIR "/patchset/drums.cfg") == -1) |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 214 | return -1; |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 215 | |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 216 | rb->pcm_play_stop(); |
Michael Sevakis | 4597ebe | 2007-06-10 02:10:47 +0000 | [diff] [blame] | 217 | #if INPUT_SRC_CAPS != 0 |
| 218 | /* Select playback */ |
| 219 | rb->audio_set_input_source(AUDIO_SRC_PLAYBACK, SRCF_PLAYBACK); |
| 220 | rb->audio_set_output_source(AUDIO_SRC_PLAYBACK); |
| 221 | #endif |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 222 | rb->pcm_set_frequency(SAMPLE_RATE); // 44100 22050 11025 |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 223 | |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 224 | /* |
| 225 | * tick() will do one MIDI clock tick. Then, there's a loop here that |
| 226 | * will generate the right number of samples per MIDI tick. The whole |
| 227 | * MIDI playback is timed in terms of this value.. there are no forced |
| 228 | * delays or anything. It just produces enough samples for each tick, and |
| 229 | * the playback of these samples is what makes the timings right. |
| 230 | * |
| 231 | * This seems to work quite well. On a laptop, anyway. |
| 232 | */ |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 233 | |
Jens Arnold | b1f0049 | 2007-04-21 05:35:17 +0000 | [diff] [blame] | 234 | printf("Okay, starting sequencing"); |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 235 | |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 236 | bpm=mf->div*1000000/tempo; |
| 237 | numberOfSamples=SAMPLE_RATE/bpm; |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 238 | |
Stepan Moskovchenko | 68af7ba | 2006-05-07 07:12:07 +0000 | [diff] [blame] | 239 | |
| 240 | |
| 241 | /* Skip over any junk in the beginning of the file, so start playing */ |
| 242 | /* after the first note event */ |
| 243 | do |
| 244 | { |
| 245 | notesUsed = 0; |
| 246 | for(a=0; a<MAX_VOICES; a++) |
| 247 | if(voices[a].isUsed == 1) |
| 248 | notesUsed++; |
| 249 | tick(); |
| 250 | } while(notesUsed == 0); |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 251 | |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 252 | synthbuf(); |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 253 | rb->pcm_play_data(&get_more, NULL, 0); |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 254 | |
Stepan Moskovchenko | 68af7ba | 2006-05-07 07:12:07 +0000 | [diff] [blame] | 255 | int vol=0; |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 256 | |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 257 | while(!quit) |
| 258 | { |
| 259 | #ifndef SYNC |
| 260 | synthbuf(); |
| 261 | #endif |
| 262 | rb->yield(); |
Stepan Moskovchenko | 68af7ba | 2006-05-07 07:12:07 +0000 | [diff] [blame] | 263 | |
Linus Nielsen Feltzing | a416cc9 | 2007-05-19 20:37:02 +0000 | [diff] [blame] | 264 | /* Prevent idle poweroff */ |
| 265 | rb->reset_poweroff_timer(); |
| 266 | |
Stepan Moskovchenko | 68af7ba | 2006-05-07 07:12:07 +0000 | [diff] [blame] | 267 | /* Code taken from Oscilloscope plugin */ |
| 268 | switch(rb->button_get(false)) |
| 269 | { |
Stepan Moskovchenko | 595a204 | 2006-05-07 07:27:07 +0000 | [diff] [blame] | 270 | case BTN_UP: |
| 271 | case BTN_UP | BUTTON_REPEAT: |
Stepan Moskovchenko | 68af7ba | 2006-05-07 07:12:07 +0000 | [diff] [blame] | 272 | vol = rb->global_settings->volume; |
| 273 | if (vol < rb->sound_max(SOUND_VOLUME)) |
| 274 | { |
| 275 | vol++; |
| 276 | rb->sound_set(SOUND_VOLUME, vol); |
| 277 | rb->global_settings->volume = vol; |
| 278 | } |
| 279 | break; |
| 280 | |
Stepan Moskovchenko | 595a204 | 2006-05-07 07:27:07 +0000 | [diff] [blame] | 281 | case BTN_DOWN: |
| 282 | case BTN_DOWN | BUTTON_REPEAT: |
Stepan Moskovchenko | 68af7ba | 2006-05-07 07:12:07 +0000 | [diff] [blame] | 283 | vol = rb->global_settings->volume; |
| 284 | if (vol > rb->sound_min(SOUND_VOLUME)) |
| 285 | { |
| 286 | vol--; |
| 287 | rb->sound_set(SOUND_VOLUME, vol); |
| 288 | rb->global_settings->volume = vol; |
| 289 | } |
| 290 | break; |
| 291 | |
Stepan Moskovchenko | 595a204 | 2006-05-07 07:27:07 +0000 | [diff] [blame] | 292 | case BTN_RIGHT: |
Stepan Moskovchenko | 68af7ba | 2006-05-07 07:12:07 +0000 | [diff] [blame] | 293 | { |
| 294 | /* Skip 3 seconds */ |
| 295 | /* Should skip length be retrieved from the RB settings? */ |
| 296 | int samp = 3*SAMPLE_RATE; |
| 297 | int tickCount = samp / numberOfSamples; |
| 298 | int a=0; |
| 299 | for(a=0; a<tickCount; a++) |
| 300 | tick(); |
| 301 | break; |
| 302 | } |
Kevin Ferrare | 0e027bd | 2006-06-30 16:43:47 +0000 | [diff] [blame] | 303 | #ifdef BTN_RC_QUIT |
| 304 | case BTN_RC_QUIT: |
| 305 | #endif |
Stepan Moskovchenko | 595a204 | 2006-05-07 07:27:07 +0000 | [diff] [blame] | 306 | case BTN_QUIT: |
Stepan Moskovchenko | 68af7ba | 2006-05-07 07:12:07 +0000 | [diff] [blame] | 307 | quit=1; |
| 308 | } |
| 309 | |
| 310 | |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 311 | } |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 312 | |
Stepan Moskovchenko | 47efba8 | 2006-05-03 05:18:18 +0000 | [diff] [blame] | 313 | return 0; |
Stepan Moskovchenko | b2f1b5d | 2006-05-01 23:22:59 +0000 | [diff] [blame] | 314 | } |