无法阻止声音在循环中重播



如果经过一定时间,我正在尝试连续播放声音。下面是我的代码。但是,声音会不断重播,而不是像在一段时间循环中那样连续发出声音。将其放在 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);

我找到了自己问题的答案,这真的很简单。只需添加一个新变量来控制声音当前是否正在播放。我通过将IsPlay添加到所有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);

相关内容

  • 没有找到相关文章

最新更新