matlab 音乐合成出错,clear;clc;A=[174.61 196 220 246.94 261.62 293.66 329.63 349.23 392 440 493.88 523.25 587.33 659.25 698.45 739.99 783.99]; % 定义各调频率fs=8000; %修改频率pu=[5 0 -5 5 4 3 3 4 3 3 3 4 3 4 3 2 1 0 1 3 5 6 6 6 5 5 2 2
来源:学生作业帮助网 编辑:作业帮 时间:2024/08/31 14:41:17
matlab 音乐合成出错,clear;clc;A=[174.61 196 220 246.94 261.62 293.66 329.63 349.23 392 440 493.88 523.25 587.33 659.25 698.45 739.99 783.99]; % 定义各调频率fs=8000; %修改频率pu=[5 0 -5 5 4 3 3 4 3 3 3 4 3 4 3 2 1 0 1 3 5 6 6 6 5 5 2 2
matlab 音乐合成出错,
clear;clc;
A=[174.61 196 220 246.94 261.62 293.66 329.63 349.23 392 440 493.88 523.25 587.33 659.25 698.45 739.99 783.99]; % 定义各调频率
fs=8000; %修改频率
pu=[5 0 -5 5 4 3 3 4 3 3 3 4 3 4 3 2 1 0 1 3 5 6 6 6 5 5 2 2 4 3 3]; %在pu中只需输入乐谱数字,在下面B=A-什么什么那部分调整音调,省去了写频率的麻烦
p=1;
last_time=[p p/2 p/2 p/2 p/2 p/2 p/4 p/8 p/8 p/2 p/4 p/4 p/4 p/4 p/4 p/8 p/8 p/4 p/4 p/4 p/4 p/2 p/4 p/8 p/8 p/4 p/4 p/4 p/8 p/8 p];
%各乐音持续时间为节省空间,用p代替
N=length(pu);
f=zeros(1,N);
B=A-9;
for i=1:N
f(i)=B(pu(i)); %f为各个乐音对应的频率,修改其它调
end
point=fs*last_time; %各个乐音的抽样点数
total_point=sum(point); %这段音乐的总抽样点数
store=zeros(1,total_point); %用store向量来储存抽样点
m=1;
for num=1:N %利用循环产生抽样数据,num表示乐音编号
t=1/fs:1/fs:point(num)/fs; %产生第num个乐音的抽样点
store(m:m+point(num)-1)=sin(2*pi*f(num)*t); %抽样点对应的幅值
m=m+point(num);
end
sound(store,8000); %播放出store
plot(store); %画出store图像
运行后出错:
Attempted to access B(0); index must be a positive integer or logical.
Error in ==> sound_2_1 at 12
f(i)=B(pu(i)); %f为各个乐音对应的频率,修改其它调
我知道错哪了,现在又不知道怎么改.pu=[5 0 -5 5 4 3 3 4 3 3 3 4 3 4 3 2 1 0 1 3 5 6 6 6 5 5 2 2 4 3 3]; 中,0对应的是简谱的 0,-5对应的是低八度的5 .怎么破!
matlab 音乐合成出错,clear;clc;A=[174.61 196 220 246.94 261.62 293.66 329.63 349.23 392 440 493.88 523.25 587.33 659.25 698.45 739.99 783.99]; % 定义各调频率fs=8000; %修改频率pu=[5 0 -5 5 4 3 3 4 3 3 3 4 3 4 3 2 1 0 1 3 5 6 6 6 5 5 2 2
当i=2时,pu(i)=0,B是一个矩阵,下标最小从1开始,不存在B(0),因此B(pu(i))出错
我知道错哪了,现在又不知道怎么改.pu=[5 0 -5 5 4 3 3 4 3 3 3 4 3 4 3 2 1 0 1 3 5 6 6 6 5 5 2 2 4 3 3]; 中,0对应的是简谱的 0,-5对应的是低八度的5 .怎么破!?
把A(1)~A(12)改为简谱的-5~6的频率,然后对应频率选择对应下标即可