【问题标题】:How do I control which channel sound is played through using MATLAB?如何使用 MATLAB 控制播放哪个声道的声音?
【发布时间】:2017-03-30 04:56:41
【问题描述】:

我是 MATLAB 新手,如果问题非常基本,敬请见谅。我需要一个 .wav 声音文件以在单个特定通道中播放——比如说左通道。事实上,我的代码读入了声音文件,并添加了一列零来取消我不想要的频道,如下所示:

currentDir = pwd;
soundFile = [currentDir '\sound1.wav']; % load the file

[y, Fs] = audioread(soundFile); % read the file in

soundData(:,1) = y(:,1); % keeps sound for the left channel
soundData(:,2) = 0; % nullifies the right channel

sound = audioplayer(soundData,Fs); 
play(sound);

就目前而言,代码当前在左扬声器中产生的声音是全音量,在右扬声器中产生一半音量(但仍然可以听到)。我已经用至少 20 个 .wav 文件进行了尝试,结果相同。

如果相关,即使我编写的代码明确匹配 0 中声音变量的长度也会发生这种情况,如下所示:

[y, Fs] = audioread(soundFile);
silentChannel = zeros(size(y));

soundData(:,1) = y(:,1); % keeps sound for the left channel
soundData(:,2) = silentChannel(:,2); % nullifies the right channel

有人知道我做错了什么,或者有什么想法吗?

【问题讨论】:

    标签: matlab audio


    【解决方案1】:

    您的代码绝对正确,它应该只在左声道播放音频。我怀疑问题是由声卡/驱动程序问题引起的。请允许我建议以下故障排除步骤:

    1. 使用audiowrite('output.wav', soundData, Fs) 将输出保存为wav 文件。使用不同的音频播放器播放此内容,例如 Audacity。如果您仍然在两个通道中听到输出,则一定是声卡/驱动程序问题。
    2. 假设您使用的是 Windows PC(按照文件路径中的语法),请确保禁用所有声音增强功能。如何执行此操作取决于 PC。如果有第三方应用程序控制播放设置,您必须使用它。否则在控制面板中找到下图所示的设置。

    【讨论】:

      【解决方案2】:

      在 MatLab 中,播放声音的预期方法是方法 sound(data,Fs)

      要控制声音发出的通道,您需要知道sound() 如何读取data

      data 是一个矩阵,其中的列表示通道,行表示给定采样频率 Fs 的波形样本

      这是一个简单的实现。

      function treismanwolfe()
          close all
          clear all
          clc
          Fs = 40000;
          tau = 2*pi();
          t = 0:tau/(Fs-1):tau/2;
          left = sin(t).*(sin(t*200)+sin(t*1600));
          left= left/max(abs(left));
          left = left'; %turn column vector into row
          right = sin(t).*(sin(t*800)+sin(t*400));
          right= right/max(abs(right));
          right = right'; %turn column vector into row
          data = [left,right*0]; %multiply either by 0 to nullify
          sound(data,Fs); %so you can hear it.
      end
      

      我希望这对你有用。享受吧!

      【讨论】:

      • 原来是硬件问题。无论如何感谢您的建议,我肯定会使用此功能进行声音测试!
      【解决方案3】:

      当我运行您的代码时,音频输出只能在您指定的左声道中听到。

      @Austin Kootz 的带有 sound() 函数的版本同样好,并且还可以产生您正在寻找的内容,但是使用 audioplayer-object 您可以在播放过程中停止播放(如你可能知道)

      您是否尝试过将 .wav 转换为另一种格式,看看是否会有所改变?

      【讨论】:

      • 您是否检查过您的音响系统中是否有一些预设声像。听起来这可能更像是硬件问题而不是软件问题。
      • 原来是硬件问题。无论如何感谢您的建议!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多