Воспроизведение песни на конкретном наушнике (канале)

У меня есть устройство, которое похоже на 3 наушника в одном ( 6 затычек для ушей) . Моя цель - сыграть одну и ту же песню на каждом затычке для ушей ( 6 песен) . Так что я начал играть одну песню в наушниках. Для меня один канал означает одну затычку для ушей (но, возможно, я ошибаюсь) . Я использую Psychtoolbox:

function BasicSoundOutputDemo( wavfilename)

AssertOpenGL;

% Read WAV file from filesystem:
[y, freq] = psychwavread(wavfilename);

aux = y' ;
wavedata = aux(1,:);


InitializePsychSound;
devices = PsychPortAudio('GetDevices' );

pahandle = PsychPortAudio('Open', [], [], 0, freq, 1);// nr channels = 1

PsychPortAudio('FillBuffer', pahandle, wavedata);

t1 = PsychPortAudio('Start', pahandle, 1, 0);


KbReleaseWait;


while ~KbCheck
  % Wait a seconds...
  WaitSecs(1);

end


PsychPortAudio('Stop', pahandle);


PsychPortAudio('Close', pahandle);


fprintf('Demo finished, bye!\n');

Но это не сработало. Вместо воспроизведения звука только на одной затычке для ушей, он играл на 2 затычки для ушей.

Я получаю это предупреждение

PTB-INFO: Использование специально модифицированного движка PortAudio, основанного на официальной версии: PortAudio V19-devel WITH-DIM

Будет использоваться улучшенная ASIO библиотека драйверов Portaudio. Посмотрите Psychtoolbox/PsychSound/PortAudioLICENSE.txt для точных условий использования для этой dll.

Отказ от ответственности: "ASIO является торговой маркой и программным обеспечением Steinberg Media Technologies GmbH".

Предупреждение о PTB: хотя при использовании звукового драйвера Psychtoolbox с поддержкой ASIO,

Предупреждение PTB: не удалось найти звуковую карту с поддержкой ASIO в вашей системе.

PTB-предупреждение: если вы считаете, что у вас должна быть плата ASIO, проверьте

PTB-Предупреждение: система для правильно установленных и настроенных драйверов и повторных попыток.

PTB-предупреждение: прочитайте "help InitializePsychSound" для получения дополнительной информации об ASIO et al.

PTB-INFO: новое аудиоустройство с дескриптором 0, открытым как поток PortAudio:

PTB-INFO: для воспроизведения 1 канала: аудиоподсистема - MME, имя аудиоустройства - Microsoft Sound Mapper - выход

PTB-INFO: реальная частота дискретизации 44100,000000 Гц. Задержка на входе 0.000000 мсек, Задержка на выходе 464.399093 мсек.




Тогда я решил попробовать другой aproch. Давайте играть песню на 2 других затычки для ушей

Я использовал PsychPortAudio('GetDevices'), чтобы найти идентификатор пары затычек для ушей. Странно то, что вместо 3-х устройств с 2-мя каналами я нашел 4. И я использовал PsychPortAudio('Open' для id 7,9,18 и 20, но каждый раз, когда песня воспроизводилась на одной и той же паре затычки для ушей, одна и та же пара, когда я пытался играть только на одну затычку для ушей.
Это картина с 4 устройствами

введите описание изображения здесь

function BasicSoundOutputDemo( wavfilename)

AssertOpenGL;

% Read WAV file from filesystem:
[y, freq] = psychwavread(wavfilename);

wavedata = y' ;
nrchannels = size(wavedata,1); % Number of rows == number of channels.

InitializePsychSound;
devices = PsychPortAudio('GetDevices' );

pahandle = PsychPortAudio('Open', 18, [], 0, freq, nrchannels);

PsychPortAudio('FillBuffer', pahandle, wavedata);

t1 = PsychPortAudio('Start', pahandle, 1, 0);


KbReleaseWait;


while ~KbCheck
  % Wait a seconds...
  WaitSecs(1);

end


PsychPortAudio('Stop', pahandle);


PsychPortAudio('Close', pahandle);


fprintf('Demo finished, bye!\n');

Теперь единственное, что отличается от предупреждения это

PTB-INFO: для 2-канального воспроизведения: аудиоподсистема - Windows DirectSound, аудиоустройство - "Динамики" (многоканальное аудиоустройство USB)

Извините за этот длинный пост, но я хотел дать вам всю информацию.

Можете ли вы сказать, где я был неправ. Как я могу сыграть одну песню на конкретном наушнике. Я думаю, что если я знаю это, то я просто копирую код и помещаю другую песню, и поэтому я буду играть одну песню на каждую берушку

3 ответа

Решение

Так что мне удается играть на 4 каналах, я уверен, что могу играть на 6 и 8. Я установил ASIO4ALL и выбираю идентификатор устройства ASIO4ALL при открытии. когда ASIO4all открывается, я могу выбрать свое 6-канальное устройство, а после этого просто выбрать в функции открытия, на каких каналах воспроизводить звуки.

1) Вы, вероятно, не хотите бежать AssertOpenGL каждый раз, когда вы представляете звук.

2) Ваш код выглядит правильно, хотя интересно на моем ноутбуке Apple и встроенном звуке, передача сигнала по одному каналу также воспроизводится с обоих каналов наушников.

3) Какое аудиоустройство вы используете? Из вашего списка устройств, похоже, что 4 из перечисленных вами могут быть разными интерфейсами для одних и тех же устройств (2 выхода (один цифровой, один аналоговый) X два API (один MME, один DirectSound). Есть ли какие-либо другие записи на вашем устройстве список?

Частичный ответ на мой вопрос. Я нашел, как играть песню в наушнике, а другой - в другом. psychwavread дает мне массив из 2 строк. поэтому я поместил в массив первый ряд одной песни и первый ряд другой песни. так что теперь у меня есть 2-рядный симилляр к тому, с которого я играю одну песню, но теперь я играю 2 песни [y, freq] = psychwavread(wavfilename1); [y1, freq1] = psychwavread(wavfilename2); aux = y'; aux1 = y1'; wavedata = [aux1(1,:) ; aux(1,:)];

Другие вопросы по тегам