I have a several list of songs that i pick from, lets, say that there are 10 songs in each list and there are 2 lists.
For a time i pick from my songs, but i only play a few of the songs in that list... now my wife, Jessica Alba, comes home, and i start playing from Jessica's list of songs. After playing a few songs, Jessica, who needs her beauty sleep, goes to bed, and i start my play loop which starts picking from my songs again... The wrinkle: only now i want it to pick first from among the 6 songs yet not played from the first time around, and *then* when the list is exhausted, shuffle the whole original list of songs and start again. Here is some working but hilariously bad code that does most of this funny biz... I've gotten this far, but can't figure out how to get the loops to keep track of what was played and what wasn't and how to pick-up the list where it left off. I know this is a dumb thing to want to do, but you know, being married to bona-fide star is not easy. # ----------------------------------------------------------- #!/usr/bin/env python import random import os def shuffleloop(iterable): """An iterator like itertools cycle, which returns elements from the iterable and saves a copy of each. When the iterable is exhausted, it return elements from the saved copy. The added wrinkle here is that the saved copy is randomly shuffled. Repeats indefinitely.""" saved = [] for element in iterable: yield element saved.append(element) while saved: random.shuffle(saved) for element in saved: yield element def playall_reload(startime, playdur, smpl_lst): '''a loop that shuffles and plays all sounds in a list. If the sequence is exhausted the list is reloaded, re-shuffled, and plyed through again. It does this as many times as needed to fill the time specified. Also returns the end of the last duration so that the begining of the next section can be fed to the next function or loop. ''' event = 0; incr = 0; lst_len = len(smpl_lst) random.shuffle(smpl_lst) smpl_loop = shuffleloop(smpl_lst) endpoint = startime + playdur while startime < endpoint: sample = smpl_loop.next() splt = os.path.split(sample) # get the duration of the current soundfile # (hard wire it for now) #incr = DUR() dur = 10 #load the sample & play it # # input(sample) # PLAY(startime, dur) # print "event %d @ %.4f --> [%s] dur: %.4f" % (event+1, startime, splt[1], dur) incr = dur startime = startime + incr event = event + 1 if (event < lst_len): print "\n\n*** Heads-up yo: <the input sequence was not exhausted> ***\n\n" return startime def test(): kevins = ['/Users/kevin/snd/songs/loveisintheair.aif', '/Users/kevin/snd/songs/boymeetsgirl.aif', '/Users/kevin/snd/songs/yourcheatingheart.aif', '/Users/kevin/snd/songs/kindletheflame.aif', '/Users/kevin/snd/songs/mywifeissohot.aif', '/Users/kevin/snd/songs/haha.aif', '/Users/kevin/snd/songs/blueberryorstrawberry.aif', '/Users/kevin/snd/songs/didyoupaytheelectricbill.aif', '/Users/kevin/snd/songs/whereistheremote.aif', '/Users/kevin/snd/songs/youspenthowmuchforthoseshoes.aif'] jessicas = ['/Users/kevin/snd/quiet_songs/iloveu.aif', '/Users/kevin/snd/quiet_songs/uloveme.aif', '/Users/kevin/snd/quiet_songs/wearehappy.aif', '/Users/kevin/snd/quiet_songs/wearesad.aif', '/Users/kevin/snd/quiet_songs/letsbreakup.aif', '/Users/kevin/snd/quiet_songs/letsgetbacktogether.aif', '/Users/kevin/snd/quiet_songs/walkinthesunshine.aif', '/Users/kevin/snd/quiet_songs/iloveutruly.aif', '/Users/kevin/snd/quiet_songs/whosefootisthat.aif', '/Users/kevin/snd/quiet_songs/ohbaby.aif'] print one = playall_reload(1.00, 20.00, kevins) print two = playall_reload(one, 180, jessicas) print three = playall_reload(two, 40.00, kevins) if __name__ == '__main__': test() -- http://mail.python.org/mailman/listinfo/python-list