【问题标题】:playing song on a specific earplug (channel)在特定耳塞(频道)上播放歌曲
【发布时间】:2016-08-19 15:19:16
【问题描述】:

我有一个设备,就像 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');

但它没有奏效。不是只在一个耳塞上播放声音,而是在两个耳塞上播放。

我收到此警告

PTB-INFO:使用经过特殊修改的 PortAudio 引擎,基于官方 版本:PortAudio V19-devel WITH-DIM

将使用 ASIO 增强的 Portaudio 驱动 DLL。看 Psychtoolbox/PsychSound/PortAudioLICENSE.txt 的确切条款 用于此 dll。

免责声明:“ASIO 是 Steinberg Media 的商标和软件 技术有限公司。”

PTB-警告:虽然使用启用了 ASIO 的 Psychtoolbox 声音 司机,

PTB 警告:在您的系统中找不到任何支持 ASIO 的声卡。

PTB-警告:如果您认为您应该拥有 ASIO 卡,请检查 你的

PTB-警告:正确安装和配置驱动程序的系统和 重试。

PTB-警告:阅读“帮助 InitializePsychSound”了解有关 ASIO 的更多信息 等。

PTB-INFO:带有句柄 0 的新音频设备作为 PortAudio 流打开:

PTB-INFO:对于 1 个通道播放:音频子系统是 MME,音频 设备名称是 Microsoft Sound Mapper - 输出

PTB-INFO:实际采样率为 44100.000000 Hz。输入延迟 0.000000 毫秒,输出延迟 464.399093 毫秒。




然后我决定尝试另一个方法。让我们在其他 2 个耳塞上播放歌曲

我使用 PsychPortAudio('GetDevices') 来查找耳塞对的 id。奇怪的是,我找到了 4 个,而不是 3 个具有 2 个通道的设备。 我使用 PsychPortAudio('Open' for 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 多声道音频 设备)

很抱歉这篇长文,但我想给你所有的信息。

你能说我错了吗?如何在特定耳塞上播放一首歌曲。我想如果我知道的话,我只需复制代码并放另一首歌曲,这样我就会在每个耳塞上播放一首歌曲

【问题讨论】:

    标签: matlab audio psychtoolbox


    【解决方案1】:

    1) 您可能不想在每次呈现声音时都运行AssertOpenGL

    2) 您的代码看起来是正确的,但有趣的是,在我的 Apple 笔记本电脑和内置声音上,发送单通道信号也在两个耳机通道中播放。

    3) 您使用的是什么音频设备?从您的设备列表中,您列出的 4 个可能是相同设备的不同接口(2 个输出(一个数字,一个模拟)X 两个 API(一个 MME,一个 DirectSound)。您的设备中是否还有其他条目列表?

    【讨论】:

    • 我在运行 getDevices 时有 22 个条目。我可以拍一张照片,但在星期一。可惜不能给你发私信
    • 我添加了所有 22 台设备 here 我正在使用的设备没有名称,因为是朋友制作的,不是从商店购买的。也许设备不好。 here是2张与设备的图片
    • 不幸的是我无法编辑我以前的帖子。制造设备的朋友告诉我,我必须卸载 logiLink。我现在卸载它,我有 18 台设备,但我仍然无法在我希望它始终在同一对或我的计算机扬声器上播放的配对/频道/设备上播放歌曲。 here 是 18 台设备的新图片。如果我去speaker setup 我可以在每个耳塞上播放声音,所以我想我只是不知道如何在 matlab 中访问耳塞
    • 所以我注意到 deviceid 5,6,14,15 是我插入 logilink 的 FRONT 扬声器,7 和 16 是我的电脑扬声器,在 8 和 17 我没有收到错误,但是歌曲没有播放,所有其他ID都给我一个错误。如您所见,SURROUND 和 CENTER/BASS 没有 id
    • 远程调试可能很困难。您的声音设备是否支持 ASIO?我不确定它是否会导致设备出现不同的外观,但它可能并且对于获得低延迟的声音呈现也很有用。
    【解决方案2】:

    我的问题的部分答案。我发现了如何在耳塞中播放一首歌曲,而在另一个耳塞中播放另一首歌曲。 psychwavread 给了我一个 2 行数组。所以我将一首歌曲的第一行和另一首歌曲的第一行放入一个数组中。所以现在我有一个 2 行数组,类似于我播放一首歌曲时的数组,但现在我播放 2 首歌曲 [y, freq] = psychwavread(wavfilename1); [y1, freq1] = psychwavread(wavfilename2); aux = y'; aux1 = y1'; wavedata = [aux1(1,:) ; aux(1,:)];

    【讨论】:

    • 这将适用于同一设备上的两个通道,您实际上是从两个单声道数据向量创建了一个立体声数据矩阵。
    【解决方案3】:

    所以我设法在 4 个频道上播放,我确信我可以在 6 和 8 上播放。我安装了 ASIO4ALL,并在打开时选择了 ASIO4ALL 设备 ID。当 ASIO4all 打开时,我可以选择我的 6 通道设备,然后在打开功能中选择播放声音的通道

    【讨论】:

      猜你喜欢
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 2013-11-30
      • 2021-03-04
      • 2015-10-12
      相关资源
      最近更新 更多