2012-04-03 2 views
0

Я использую функцию MATLAB для запуска звука. Эта функция такова:MATLAB: Остановка воспроизведения звука

function playTone (duration, toneFreq) 
% Generate a tone 

global player; % as a global variable, sound will continue to play after the function has ended. 
samplesPerSecond = 44100; % the bit rate of the tone 
y = sin(linspace(0, duration * toneFreq * 2 * pi, round(duration * samplesPerSecond))); % the equation of the sound wave 
player = audioplayer(y, samplesPerSecond); % create an audio object from the sound wave at the specified bit rate 
play(player); % play the audio, blocking control until the sound completes 

Я хотел был бы иметь возможность остановить звук по запросу. Я не могу использовать:

clear playsnd; 

, так как я подстрекал звук с помощью функции аудиоплеера() (не функция звука()).

Я также не могу использовать:

stop(player); 

, потому что я пытаюсь остановить звук из родительской функции

Я имел («??? Неопределенная функция или переменная„игрока“.») для установки моей функции, как указано выше, поскольку мне нужно иметь возможность генерировать тон из подфункции, и я не могу использовать функцию sound(), так как иногда получаю сообщение об ошибке «Can not register sound window». Переменная 'player' установлена ​​как глобальная, чтобы гарантировать, что звук продолжает воспроизводиться после завершения функции.

ответ

0

Можете ли вы изменить функцию так, чтобы она вернула ручку для плеера?

function player = playTone (duration, toneFreq) 
% Generate a tone 

global player; % as a global variable, sound will continue to play after the function has ended. 
samplesPerSecond = 44100; % the bit rate of the tone 
y = sin(linspace(0, duration * toneFreq * 2 * pi, round(duration * samplesPerSecond))); % the equation of the sound wave 
player = audioplayer(y, samplesPerSecond); % create an audio object from the sound wave at the specified bit rate 
play(player); % play the audio 

Тогда вы можете остановить его позже с помощью stop(player).

Похожий вопрос: How to stop sound in MATLAB?

1

Вы должны объявить, что player является глобальной переменной, куда вы хотите его использовать, в том числе, где вы хотите, чтобы остановить игрока:

global player; 
stop(player); 

Использование глобальных переменных, однако, нахмурился. поэтому я бы рекомендовал вам использовать предложение Джеффа и вернуть дескриптор.

Смежные вопросы