在循环

时间:2017-02-03 09:37:54

标签: if-statement while-loop psychtoolbox

如果过了一段时间,我正试图连续播放声音。以下是我的代码。然而,声音保持重放而不是一个连续的声音,因为它是在while循环中。将它放在while循环之外将不起作用,因为时间在while循环内递增。 我该怎么做呢?请帮忙!我被困在这2天..... 这是我的编码顺序的一个问题,因此它与正确播放的声音无关。

谢谢!

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);

1 个答案:

答案 0 :(得分: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);