poster
2019-12-10, 16:49
我对在运行时产生音调频率感兴趣,并且频率和持续时间是可变参数。在MATLAB中生成此声音文件并使其在脚本中可访问以供以后与以类似方式针对不同频率/持续时间生成的其他声音文件连接起来的最佳方法是什么?预先感谢您的评论。
回答:
给定矢量将播放的持续时间取决于矢量中元素的数量和采样率。例如,以1 kHz播放1000个元素的矢量将持续1秒。以500 Hz播放时,它将持续2秒钟。因此,您应该首先选择要使用的采样率。为避免混叠 (http://en.wikipedia.org/wiki/Aliasing) ,采样率应为信号最大频率分量的两倍 (http://en.wikipedia.org/wiki/Nyquist_rate#Nyquist_rate_relative_to_sampling) 。但是,您可能需要使其大于该值,以避免衰减接近采样率的频率。
给定1 kHz的采样率,下面的示例创建给定持续时间和音调频率的声音矢量(使用LINSPACE (http://www.mathworks.com/help/techdoc/ref/linspace.html)和SIN (http://www.mathworks.com/help/techdoc/ref/sin.html)函数):
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))); 当使用SOUND (http://www.mathworks.com/help/techdoc/ref/sound.html)功能以1 kHz播放时,此矢量将在2秒内产生50 Hz音调:
sound(y, Fs); %# Play sound at sampling rate Fs 然后可以使用WAVWRITE (http://www.mathworks.com/help/techdoc/ref/wavwrite.html)函数将矢量另存为wav文件:
wavwrite(y, Fs, 8, 'tone_50Hz.wav'); %# Save as an 8-bit, 1 kHz signal 以后可以使用WAVREAD (http://www.mathworks.com/help/techdoc/ref/wavread.html)函数加载声音矢量。如果要连接两个声音矢量,则应确保它们都设计为使用相同的采样率。
更多&回答... (https://stackoverflow.com/questions/1452455)
回答:
给定矢量将播放的持续时间取决于矢量中元素的数量和采样率。例如,以1 kHz播放1000个元素的矢量将持续1秒。以500 Hz播放时,它将持续2秒钟。因此,您应该首先选择要使用的采样率。为避免混叠 (http://en.wikipedia.org/wiki/Aliasing) ,采样率应为信号最大频率分量的两倍 (http://en.wikipedia.org/wiki/Nyquist_rate#Nyquist_rate_relative_to_sampling) 。但是,您可能需要使其大于该值,以避免衰减接近采样率的频率。
给定1 kHz的采样率,下面的示例创建给定持续时间和音调频率的声音矢量(使用LINSPACE (http://www.mathworks.com/help/techdoc/ref/linspace.html)和SIN (http://www.mathworks.com/help/techdoc/ref/sin.html)函数):
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))); 当使用SOUND (http://www.mathworks.com/help/techdoc/ref/sound.html)功能以1 kHz播放时,此矢量将在2秒内产生50 Hz音调:
sound(y, Fs); %# Play sound at sampling rate Fs 然后可以使用WAVWRITE (http://www.mathworks.com/help/techdoc/ref/wavwrite.html)函数将矢量另存为wav文件:
wavwrite(y, Fs, 8, 'tone_50Hz.wav'); %# Save as an 8-bit, 1 kHz signal 以后可以使用WAVREAD (http://www.mathworks.com/help/techdoc/ref/wavread.html)函数加载声音矢量。如果要连接两个声音矢量,则应确保它们都设计为使用相同的采样率。
更多&回答... (https://stackoverflow.com/questions/1452455)