PDA

View Full Version : array problem


mrvr
02-25-2009, 06:30 AM
Hello!
I have made a playlist of songs, which in fact is an array, and I am trying to play the songs by using a for loop (I want to have constantly music at the background).

The problem is that it plays all the songs at once and as I can understand a timer that expires very quickly (I use this timer for the joystick) is responsible for that. I think I have to use another timer, but I have no idea what expiration time it should have, how many repeats, when to start it etc.

Can you give me any suggestions before I send my code?

Thanks
Maria

farshizzo
02-25-2009, 10:41 AM
Here is an example script that uses the viztask module to loop through a playlist of songs. Let me know if anything is unclear.import viz
import viztask
viz.go()

PLAYLIST = ['crash.wav','BOING!.WAV','quack.wav']

def PlayMusicTask(songs):
"""Task that loops through a playlist of songs"""

#Preload all songs
songCycle = viz.cycle([ viz.addAudio(filename) for filename in songs ])

#Loop indefinitely through song list
while True:

#Play next song
song = songCycle.next()
song.play()

#Wait for song to end
yield viztask.waitMediaEnd(song)

#Schedule music task
viztask.schedule( PlayMusicTask(PLAYLIST) )

mrvr
02-25-2009, 04:46 PM
Thanks for the quick reply (you've saved me a lot of time!)

The only unclear thing is the following line:

songCycle = viz.cycle([ viz.addAudio(filename) for filename in songs ])

It will load the songs as it is or I have to change something? (ie replace the "filename" with the first (actual) filename in songs?)

I also met another problem. I had these errors when I run the code:

Traceback (most recent call last):
File "C:\Program Files\WorldViz\Vizard30\python\viztask.py", line 685, in _onupdate
self._tasks = [ t for t in self._tasks if not t.update() ]
File "C:\Program Files\WorldViz\Vizard30\python\viztask.py", line 652, in update
val = self.__stack[-1].next()
File "museum.py", line 78, in PlayMusicTask
songCycle = viz.cycle([ viz.addAudio(filename ) for filename in songs ])
File "C:\Program Files\WorldViz\Vizard30/python\viz.py", line 7524, in addAudio
return VizAudio(_ipcSend(_VIZ_ADDAUDIO,0,0,fileName,0.0,0 .0,0.0,0.0),**kw)
TypeError: message must be a string

farshizzo
02-26-2009, 12:18 PM
Did you get that error by running the exact code I posted?

That line of code creates a cycle of audio objects from the file names. All you have to change is the PLAYLIST variable to contain all the filenames of songs you want to play.

mrvr
02-27-2009, 06:25 PM
It was the exact code! The only different thing was the PLAYLIST, where I had replaced the sounds with my songs :-)

farshizzo
03-02-2009, 09:21 AM
:confused: So it wasn't the exact code? I'm assuming you incorrectly defined the PLAYLIST variable. I can't provide anymore help unless you post the code you are using.

mrvr
03-03-2009, 03:35 AM
You were right. I fixed the problem.
Thanks a lot for your help and time!

NicoleVR
03-07-2014, 07:34 AM
Hello, the code you helped with here has a loop to indefinetly loop through the songs. What if i want the loop to go through each element in the array only once? is there a way to detect that?

Thanks,

Nicole

Jeff
03-10-2014, 09:20 PM
Since you're not going to cycle through the songs you could use a standard list and a for loop:
#Preload all songs
songList = [ viz.addAudio(filename) for filename in songs ]

for song in songList:

song.play()
#Wait for song to end
yield viztask.waitMediaEnd(song)