Fs = 1000; %# Samples per second
toneFreq = 50; %# Tone frequency, in Hertz
nSeconds = 2; %# Duration of the sound
y = sin(linspace(0, nSeconds*toneFreq*2*pi, round(nSeconds*Fs)));
function pureTone ( frequency, duration, amplitude, sampleFreq, save2file )
% Generate pure tones.
% Enter at least 1 argument.
% Defaults are:
% duration 1 sec
% amplitude 1
% sampleFreq 48000 Hz
% save2file no
%--------------------
% If you want to save the tone to a file, provide a name.
switch nargin
case 0
error('Enter a frequency.')
case 1
duration = 1;
amplitude = 1;
sampleFreq = 48000;
save2file = 0;
case 2
amplitude = 1;
sampleFreq = 48000;
save2file = 0;
case 3
sampleFreq = 48000;
save2file = 0;
case 4
save2file = 0;
end
t = linspace( 0, duration, duration * sampleFreq );
% http://de.wikipedia.org/wiki/Sinuston
s = amplitude * sin( 2 * pi * frequency * t );
sound( s, sampleFreq );
if save2file
wavwrite( s, sampleFreq, 32, save2file);
end
end
2条答案
按热度按时间brvekthn1#
给定向量将播放的持续时间取决于向量中的元素数量和采样率。例如,一个1000个元素的矢量,当以1kHz播放时,将持续1秒。当以500 Hz播放时,它将持续2秒钟。因此,您应该首先选择要使用的采样率。为避免aliasing,采样率应是信号最大频率分量的两倍。但是,您可能希望使其更大,以避免接近采样率的频率衰减。
给定采样率为1 kHz,以下示例创建给定持续时间和音调频率的声音矢量(使用LINSPACE和SIN函数):
当使用SOUND函数以1 kHz播放时,此矢量将生成一个50 Hz音调,持续2秒:
然后,可以使用WAVWRITE函数将向量保存为wav文件:
稍后可以使用WAVREAD函数加载声音矢量。如果你要连接两个声音向量,你应该确保它们都被设计为使用相同的采样率。
j9per5c42#
gnaught的代码似乎是错误的。我想他搞砸了空间功能。你可以在比较相同的频率和不同的采样频率时自己检查-声音不同,这显然是不应该的。
(我很笨。使用Matlab的声音函数时,请确保使用与生成音调相同的采样频率。否则,你会有一个糟糕的时间。)
这里有一个函数,它总结了音调生成功能。