2017-02-03 50 views
0

如果某段時間過去了,我正在嘗試連續播放聲音。以下是我的代碼。然而,聲音不停地重播,而不是一個連續的聲音,因爲它在一個while循環中。由於時間在while循環內部增加,因此將它放在while循環之外將不起作用。 我該如何去做這件事?請幫忙!我一直堅持這個爲期2天..... 這是我編碼的順序問題,所以它與聲音播放的正確與否無關。無法停止播放while循環中的聲音

謝謝!

t = 0; 

pahandle = PsychPortAudio('Open', [], 1, 1, 48000, 2); 

myBeep = MakeBeep(500, 0.5, 48000); 

PsychPortAudio('RunMode', pahandle, 1); 
PsychPortAudio('FillBuffer', pahandle, [myBeep; myBeep]); 

while t < 20 
    t = t + 1; 

    if ~KbCheck && t >= 5 
     PsychPortAudio('Start', pahandle, 0, 0, 1); 

    elseif KbCheck 
     PsychPortAudio('Stop', pahandle, 1, 1); 
     break 
    elseif t > 20 
     PsychPortAudio('Stop', pahandle, 1, 1); 
     break 
    end 
end 

PsychPortAudio('Close', pahandle); 

回答

0

我找到了我自己的問題的答案,它確實很簡單。只需添加一個新變量來控制聲音是否正在播放。我通過將IsPlaying添加到所有if語句來完成。

t = 0; 
IsPlaying = 0; 

pahandle = PsychPortAudio('Open', [], 1, 1, 48000, 2); 

myBeep = MakeBeep(500, 0.5, 48000); 

PsychPortAudio('RunMode', pahandle, 1); 
PsychPortAudio('FillBuffer', pahandle, [myBeep; myBeep]); 

while t < 20 
t = t + 1; 

if ~KbCheck && t >= 5 && IsPlaying == 0 
    PsychPortAudio('Start', pahandle, 0, 0, 1); 
    IsPlaying = 1; 

elseif KbCheck 
    PsychPortAudio('Stop', pahandle, 1, 1); 
    IsPlaying = 0; 
    break 
elseif t > 20 
    PsychPortAudio('Stop', pahandle, 1, 1); 
    IsPlaying = 0; 
    break 
end 
end 

PsychPortAudio('Close', pahandle);