Звуковая команда playsnd не выполняется из-за более продолжительного цикла - PullRequest
1 голос
/ 12 ноября 2010

Это мой первый пост в StackOverflow, поэтому заранее прошу прощения, если это не так. Что я пытаюсь сделать: Я запускаю цикл while (time> 0), показанный ниже, и проверяю, нажата ли кнопка, когда кнопка нажата, тональный сигнал воспроизводится с помощью команды playsnd в MATLAB, которая находится в функции sound.m. «Sound.m» вызывается playsound, который вызывается в цикле while (value (1) == 1), который проверяет нажатие кнопки. Моя проблема: Когда ВРЕМЯ установлено на 8 с или выше, и когда прошло 50% времени, а кнопка нажата, playsnd не запускается мгновенно! Странно то, что первые 50% выполняются мгновенно при нажатии кнопки. И для ВРЕМЕНИ ниже 8 с PlaySnd также запускается мгновенно при нажатии кнопки! Еще одна странная вещь заключается в том, что ошибка происходит только 80% времени, и это не имеет никакого логического смысла для меня в данный момент. Какое время цикла должно быть связано с тем, что playsnd не выполняется?

Буду очень признателен за вашу мудрость в этом вопросе :) Заранее спасибо!

while(time > 0)
                value = getvalue(portCH);

                if(value(1) == 1)
                    display('Time refreshed');
                    time = TIME;
                    time_cumulative = time_cumulative +LOOP_TIME;
                    playsound(TONE);
                    while(value(1) ~= 0)
                    value = getvalue(portCH);
                    end
                end
                 time = time - LOOP_TIME;
end

1 Ответ

1 голос
/ 12 ноября 2010

Я полагаю, это из-за EDT (Java Event Dispatch Thread), который отвечает за IO - см. Этот пост . Просто поместите drawnow() в свой цикл, и MATLAB позаботится о том, чтобы все задания в очереди ввода-вывода были выполнены перед продолжением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...