Отправка тона только на одну сторону наушников

Мне нужно разработать программу для MATLAB, которая бы создавала звуковые тона.

Тем не менее, я должен посылать тоны не в фазе друг с другом. Т.е. если правое ухо получает тональный сигнал сейчас, через 0,5 мс левое ухо должно получить другой тональный сигнал. Следовательно, два тона будут примерно на 180 градусов сдвинуты по фазе.

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

Для этого есть специальная команда MATLAB?

Примечание. Тон - частота 1000 Гц.

Спасибо.

1 ответ

Решение

wavplay - довольно старая функция. Современные методы аудиоплеера и записи предполагают, что ваши данные представляют собой двумерный массив, где первая строка или столбец является левым каналом, а вторая - правым каналом.

Так, например, вы можете создать 1-секундный тон 1000 Гц с частотой дискретизации 44,1 кГц:

t = (0:44100)'./44100;
y = sin(1000 * 2 * pi * t);

Затем вы можете воспроизвести его в MATLAB в моно

player = audioplayer(y, 44100);
player.play();

или используйте его как левый канал (переключите порядок y и нулей (...) только для правого канала)

player = audioplayer([y, zeros(size(y))], 44100);
player.play();

или воспроизвести обратное на каждом канале

player = audioplayer([y, -y], 44100);
player.play();

Вместо этого для сохранения в файл и внешнего воспроизведения (или для последующего чтения в MATLAB для воспроизведения) функция audiowrite ожидает те же аргументы y и частоты дискретизации.

audiowrite('C:\tone.wav', [y -y], 44100);
Другие вопросы по тегам