MATLAB: аудиоплеер () - PullRequest
       1

MATLAB: аудиоплеер ()

2 голосов
/ 14 марта 2012

Я использую функцию sound () в MATLAB для генерации тона.Следующая функция воспроизводит тональный сигнал в течение 4 секунд при частоте 440 Гц:

duration = 4
toneFreq = 440
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
sound(y, samplesPerSecond); % play the sound wave at the specified bit rate

Иногда (после использования этой функции несколько раз) я получаю сообщение об ошибке из MATLAB, в котором говорится "не удается зарегистрировать окно звука".Посмотрев немного по интернету, я заметил, что это известная ошибка в MATLAB (версия R14 SP3), и поэтому общий совет, похоже, состоит в том, чтобы вместо этого использовать функцию 'audioplayer' .Итак, я обновил свой код до следующего:

duration = 4
toneFreq = 440
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); % play the sound wave at the specified bit rate
play(player)

Однако, это не производит тона.Кто-нибудь может помочь в создании этого нового кода?

1 Ответ

1 голос
/ 14 марта 2012

Я нашел решение - похоже, проблема в том, что воспроизведение звука останавливается при выходе из функции.Итак, мне пришлось изменить play () на playblocking ().Это предотвращает возврат управления, пока звук не закончится.Однако это не идеальное решение (было бы неплохо передать управление родительской функции, пока звук все еще воспроизводится), но пока оно подойдет.Если кто-нибудь может предложить способ передать управление обратно и воспроизвести весь звук, я был бы признателен.Вот окончательный код:

duration = 4
toneFreq = 440
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); % play the sound wave at the specified bit rate
playblocking(player)

Редактировать: Было также найдено решение, позволяющее продолжить игру после выхода из функции.См. MATLAB: продолжение воспроизведения аудиоплеера () после завершения функции .

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