[Tutor] seq looping

kevin parks kp8 at mac.com
Wed Apr 26 02:31:42 CEST 2006


I have a loop that process each item in a sequence and after each item 
some updating is done to some variables. However i don't what these 
variable updated if we are processing the last item in the list. i 
could put in a conditional and test if the list is now empty after 
popping items from the list... but testing for an empty list and the 
bookkeeping of maintaining the popped list seems horribly inefficient 
and this is for a real time multimedia playback type situation so 
learning a more efficient idiom for this seems worth while:

You won't have all the dependancies... including the player (STEREO) 
and some tables of durations.. but you get the gist:

def playall(startime, amp, wet_percent, rest_percent, duty_factor, 
smpl_lst):
	''' a play-loop that plays all samples in a directory, just once with 
some
	temporal padding and also returns the end of the last duration so
	that the begining of the next section can be determined'''
	event = 1; inskip = 0; inchan = 0; incr = 0
	for sample in smpl_lst:
		splt = os.path.split(sample)
		rtinput(sample)
		loc = random.random()
		dur = DUR()
		STEREO(startime, inskip, dur, amp, loc)
		print "event no. %d @ %.2f (dur: %.2f, end: %.2f) --> sf: %s : [flag: 
%.2f]" % (event, startime, dur, startime+dur, splt[1], dry)
		incr = (dur * duty_factor) + kptools.windex(kptools.durations)
		startime = startime + incr
		restflag = random.random()
		if (restflag < rest_percent):
			rest = kptools.windex(kptools.rest)
			print "\n", "<>-" * 8, "[ rest : ", rest, "]", "-<>" * 8, "\n"
			startime = startime + rest
		event = event + 1
	print '\n', 'Next start = ', startime, '\n\n'
		
so what i am trying to do its skip that 		

if (restflag < rest_percent):

biz on the last item if we are on our last sequence item. The rests 
(which are random) is for padding between events
and since we have just played our last event, we don't want any extra 
padding so that our next call of the loop
starts at the proper time (just at the last event of this loop is 
over). The loop function will calculate the
next start time, and return it so that we can use it as the start time 
argument for our next call of the loop.

so if i want to play 7 items i might get something like:

loop_call_01:
item_1
item_2
rest
item_3
rest
item_4
item_5
item_6
rest
item_7 (but we don't want any rest here ever! cause we might want our 
next loop to start w/o any pause)


gosh.. i hope this is clear....

anyway that's my query .. hehe  ...

cheers,

kevin




More information about the Tutor mailing list