Home : MIDI Mixup : Source Code 
 

# MIDI Mixup
#
# Read 3 MIDI files, and use the pitches from the first one, the channels
# from the second one, and the durations from the third one.

function mixup(fname1,fname2,fname3) {
	f1 = readmf(fname1)
	f2 = readmf(fname2)
	f3 = readmf(fname3)
	f1.length = latest(f1)
	f2.length = latest(f2)
	f3.length = latest(f3)
	p = mixitup(f1,f2,f3)
	writemf(p,"www.mid")
	writelines(p,"www.lines")
}

function mixitup(f1,f2,f3) {

	f1 = onlynotes(f1)
	f2 = onlynotes(f2)
	f3 = onlynotes(f3)
	s1 = sizeof(f1)
	s2 = sizeof(f2)
	s3 = sizeof(f3)
	nnotes = s1
	if ( s2 < nnotes )
		nnotes = s2
	if ( s3 < nnotes )
		nnotes = s3
	r = ''
	for ( n=0; n<nnotes; n++ ) {
		nt = 'a'
		nt.pitch = (f1%n).pitch

		# we use the time and channel from the second midi file
		nt.time = (f2%n).time
		nt.chan = (f2%n).chan

		nt.duration = (f3%n).duration
		r |= nt
	}
	return(r)
}