2017-02-03 13 views
0

Я пытаюсь воспроизводить звук непрерывно, если прошло определенное время. Ниже мой код. Тем не менее, звук продолжает воспроизводить вместо одного непрерывного звука, поскольку он находится в цикле 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); 

ответ

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