WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

Reply
 
Thread Tools Rate Thread Display Modes
  #1  
Old 02-01-2016, 02:29 AM
jelly jelly is offline
Member
 
Join Date: Feb 2016
Posts: 38
playing a sound multiple times at different timings

Dear all,

I am new to Vizard and to programming in general. I need to use it to program an experiment for my studies and while I have already done a number of tutorials, I still feel quite insecure. I wanted to ask for your help with the following:

I am trying to create a function that will basically call my trial (displaying two 2D pictures on the screen and playing some sounds). Because I got stuck at the sounds part, I started a new Vizard file just for the sound to try out different things.

I want the sound to play 10 times. I figured a loop should do the trick, but I can't seemt o find a way to do that...I've looked at sound.loop(viz.ON) and at viz.playSound('pip.wav', viz.LOOP) but these are endless loops. Here is what I have so far:

#stimulus
pip = viz.addAudio('pip.wav')

#Import Vizard modules:
import viz import time
import viztask
import vizact

#Start
viz.go()

#Sounds

cue = 1

while cue <= 10:
pip.play() # This should be executed 10 times
#viz.playSound('pip.wav')
cue += 1

But this doesn't play the sound 10 times...Not to mention that, ideally, I would want the sound to play at randomly intersperced intervals until the last (10th) sound is played. But that will be my next challenge. First, I need to figure out how to play the sound 10 times.

I would be really greatful for any pointers in the right direction! Thank you very much in advance!

Jelly
Reply With Quote
  #2  
Old 02-02-2016, 02:18 AM
Erikvdb Erikvdb is offline
Member
 
Join Date: May 2013
Posts: 63
Here you go, I also included the random wait

Code:
import viz
import viztask
import random

viz.go()

sound = viz.addAudio('pip.wav')
soundDuration = sound.getDuration()

def playSoundLoop():
    count = 0
    while count < 10:
        count += 1
        sound.play()
        yield viztask.waitTime(soundDuration+random.randrange(1,4))
        sound.stop()
		
viztask.schedule(playSoundLoop)
Couple of notes:
soundDuration is the duration of the sound you want to play. I use that as the minimal waitTime, to make sure Vizard won't attempt to play the sound again before the first one has finished.
I say attempt, because Vizard won't play the sound from the start if that same sound object is still playing. This was the problem in your code.
This is also why I included the sound.stop() at the end, to make 100% sure the sound is stopped before we try to play it again.
The random.randrange() is the random time after the sound has played for Vizard to wait until the next sound, in this example it'll be between 1 and 4 seconds.
Reply With Quote
  #3  
Old 02-02-2016, 10:35 AM
jelly jelly is offline
Member
 
Join Date: Feb 2016
Posts: 38
Thank you!

Hi Erikvdb!

First of all thank you so much for the prompt and detailed help! It really helps me understand what is happening in the code. Before I saw your reply, I eventually had managed to do this, it sort of seemed to work:

import viz
import viztask
import random

viz.go()

sound = viz.addAudio('pip.wav')

def soundloop():
for x in range (10):
yield viztask.waitTime(random.randrange(3,7,1))
pip.play()
soundtask = viztask.schedule(soundloop())

But I can understand how your code if different and better and I will play around with it a bit to see what happens if I change various bits of it.

Again, thank you so very much!
Reply With Quote
  #4  
Old 02-04-2016, 03:39 AM
Erikvdb Erikvdb is offline
Member
 
Join Date: May 2013
Posts: 63
No problem!
Yea it's up to you whether you want the sound to start directly after calling the function or not and if the wait has to been exactly between the end of the previous sound and the start of the next. I assume your sound is literally just a pip, so it won't matter so much, but I've ran into problems with this before, wondering why my sounds wouldn't play in quick succession and wishing someone had told me beforehand
Reply With Quote
Reply

Tags
sound loop

Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
preEuler not working? or how to teleport subject multiple times ichitaka Precision Position Tracker (PPT) 1 12-19-2015 03:27 AM
output to multiple (two) sound devices GiudiceLab Vizard 1 08-05-2009 01:12 PM
Multiple Sound Devices GiudiceLab Vizard 2 06-06-2009 10:29 AM
how can I detect when a sound finished playing? bernie Vizard 3 05-10-2007 06:08 PM
Error when playing wav files...? vjonshih Vizard 1 05-23-2005 12:21 PM


All times are GMT -7. The time now is 03:36 AM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC