我是新手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文件试过这个,结果相同。
如果它是相关的,即使我在0s中明确匹配声音变量长度的代码中也会发生这种情况,如下所示:
[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
有人知道我做错了什么,或者有什么想法?
答案 0 :(得分:1)
在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
我希望这适合你。享受!
答案 1 :(得分:1)
您的代码绝对正确,它只应在左声道播放音频。我怀疑这个问题是由声卡/驱动程序问题引起的。请允许我建议以下故障排除步骤:
audiowrite('output.wav', soundData, Fs)
将输出保存为wav文件。使用其他音频播放器播放此内容,例如Audacity。如果您仍然听到两个频道的输出,则必须是声卡/驱动程序问题。答案 2 :(得分:0)
当我运行你的代码时,音频输出只能在你指定的左声道中听到。
@Austin Kootz&#39;带声音的版本() - 功能同样好,也可以产生你想要的东西,但是使用audioplayer-object,你可以在播放过程中停止播放(你可能知道)< / p>
您是否尝试过将.wav转换为其他格式以查看是否会进行更改?