Example #1
0
void tempoSet(int tempo )
{
	struct midiHead *mh;
	struct midiTrack *mt;
	char buffer[256];
	int i;
	int ticks = 60000000 / tempo;
	printf("Set ticks to 0x%08x\n", ticks );
	
	mh = (struct midiHead *)&buffer[0];
	mt = (struct midiTrack *)&buffer[14];
	
	sprintf(mh->chunkID, "MThd" );
	mh->size = 6;
	mh->format = 0;
	mh->tracks = 1;
	mh->time = 24;  // 24 ticks per qtr note
	
	sprintf(mt->chunkID, "MTrk" );
	mh->size = 6;
	buffer[22] = 0xff;
	buffer[23] = 0x51;
	buffer[24] = 0x03;
	buffer[25] = ( ticks & 0xFF0000 ) >> 16;
	buffer[26] = ( ticks & 0xFF00 ) >> 8;
	buffer[27] = ( ticks & 0xFF );
	
	send_sequence(buffer, 28 );
}
Example #2
0
void
set_sr16_song(int song )
{
	char buffer[8];
	
	code = ( song << 1 ) | ab;
	buffer[0] = 0xB6;
	buffer[1] = 0xF3; // Song Request
	buffer[2] = code; 
	send_sequence(buffer, 3 );	
}
Example #3
0
void
set_sr16_pattern(int pattern, int ab )
{
	int code; // Bits 7-1 are the "Preset Rhythm Programs" and Bit 0 represents A or B
	char buffer[8];
	
	code = ( song << 1 ) | ab;
	buffer[0] = 0xB6;
	buffer[1] = 0xF3; // Song Request
	buffer[2] = code; 
	send_sequence(buffer, 3 );	
}
Example #4
0
int main(int argc, char **argv)
{
    int r, g, b;

    // parse arguments
    if (!parse_arguments(argc, argv, &r, &g, &b))
        return -1;

    // Set up gpi pointer for direct register access
    setup_io();
    
    // calibrate our timers
    calibrate(1000000);

    // Set GPIO pin 4 to output
    INP_GPIO(4); // must use INP_GPIO before we can use OUT_GPIO
    OUT_GPIO(4);

    decode_sequence(r, g, b);
    send_sequence();
    return 0;
} // main