Octave编写C大调音阶音频文件出现参数不匹配错误如何解决
问题原因
- 维度匹配错误:你当前的
X是1×7的频率行向量,t是1×8821的时间行向量,逐元素运算要求两个数组维度完全一致,维度不对应导致运算失败。你需要把X转置为列向量,利用Octave的广播机制,让每个频率分别和整个时间序列做运算,生成7行(每一行对应一个音阶的采样)的音频数组。 audiowrite参数错误:你现在传入的第二个参数是频率数组X,实际应该传入生成的音频采样序列x,同时文件名需要补充音频格式后缀(比如.wav),否则audiowrite无法识别输出格式。
修正后代码
# Scale Frequencies x_1 = 261.6256; x_2 = 293.6648; x_3 = 329.6276; x_4 = 349.2282; x_5 = 391.9954; x_6 = 440.0000; x_7 = 493.8833; X = [x_1, x_2, x_3, x_4, x_5, x_6, x_7]; fs = 2*44100; T = 0.1; t = [0 : 1/fs : T]; A = 0.5; % 把X转置为列向量后再运算,触发广播 x = A .* sin(2 .* pi .* X' .* t); % 拉平为单通道序列实现按顺序播放7个音,同时补充文件名后缀 audiowrite('musicnotes.wav', x(:), fs)
内容的提问来源于stack exchange,提问作者Steel Angel
相关产品推荐
相关产品推荐

