blob: 015ed4facea3d1f39c1c32bb473be5f147890025 [file] [log] [blame] [raw]
/*
* Test DOSMid's sysex handling using reverb manipulation
* Copyright (C) 2015 Mateusz Viste
*
* compatible with Roland devices, and supposedly SoundBlaster AWE cards (but
* I couldn't get it working using the AWE32 dev pack, so...)
*
* *** Reverb Sysex macro ***
*
* F0 41 10 42 12 40 01 30 XX CS F7
*
* Where XX denotes the Reverb variation to be selected, and CS denotes the
* Roland checksum value. The valid values for XX are:
* 0 - Room 1
* 1 - Room 2
* 2 - Room 3
* 3 - Hall 1
* 4 - Hall 2
* 5 - Plate
* 6 - Delay
* 7 - Panning Delay
*/
#include <stdio.h> /* puts() */
#include <unistd.h> /* sleep() */
#include "..\outdev.h"
#define DEVICE DEV_MPU401
#define DEVICEPORT 0x330
int main(void) {
int i, x;
unsigned char sysexbuff[] = {0xf0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x01, 0x30, 0x00, 0x00, 0xf7};
if (dev_init(DEVICE, DEVICEPORT) != 0) {
puts("dev_init() failure");
return(1);
}
for (i = 0; i < 8; i += 1) {
/* set the desired reverb effect */
sysexbuff[8] = i;
/* compute the roland checksum on [5],[6],[7],[8] */
sysexbuff[9] = 0;
for (x = 5; x < 9; x++) {
sysexbuff[9] += sysexbuff[x];
sysexbuff[9] &= 127;
}
sysexbuff[9] = 128 - sysexbuff[9];
/* */
printf("step %d/%d: %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n", i+1, 8, sysexbuff[0], sysexbuff[1], sysexbuff[2], sysexbuff[3], sysexbuff[4], sysexbuff[5], sysexbuff[6], sysexbuff[7], sysexbuff[8], sysexbuff[9], sysexbuff[10]);
dev_sysex(0, sysexbuff, 11);
sleep(2);
dev_noteon(0, 62, 120);
sleep(1);
dev_noteon(0, 63, 120);
sleep(1);
dev_noteon(0, 64, 120);
sleep(1);
dev_noteoff(0, 62);
dev_noteoff(0, 63);
dev_noteoff(0, 64);
}
dev_close();
return(0);
}