MATLAB: остановка воспроизведения звука - PullRequest
0 голосов
/ 03 апреля 2012

Я использую функцию 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);

потому что я пытаюсь остановить звук из родительской функции ("??? Неопределенная функция или переменная 'player'.")

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

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

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

global player;
stop(player);

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

0 голосов
/ 03 апреля 2012

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

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

Аналогичный вопрос: Как остановить звук в MATLAB?

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