无法阻止声音在 while 循环中重播
Cannot stop sound from replaying in while loop
我正在尝试在经过一定时间后连续播放声音。下面是我的代码。但是,声音一直在重播,而不是像在 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);
我找到了我自己问题的答案,它真的很简单。只需添加一个新变量来控制当前是否正在播放声音。我通过将 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);
我正在尝试在经过一定时间后连续播放声音。下面是我的代码。但是,声音一直在重播,而不是像在 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);
我找到了我自己问题的答案,它真的很简单。只需添加一个新变量来控制当前是否正在播放声音。我通过将 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);