配列の加算

配列同士の加算を行うと要素毎に加算が行われ、配列と数値を加算するとすべての要素に同じ数値が加算される。


x = [1,2 ; 3,4]
x + 10
y = [20,10 ; 100,0]
x + y
           

結果


-->x = [1,2 ; 3,4]
 x  =
 
    1.    2.  
    3.    4.  
 
-->x + 10
 ans  =
 
    11.    12.  
    13.    14.  
 
-->y = [20,10 ; 100,0]
 y  =
 
    20.     10.  
    100.    0.   
 
-->x + y
 ans  =
 
    21.     12.  
    103.    4. 

音を重ねる

2つの音を重ね合わせるにはどうしたらよいか?

単純に加算をすればよい。

音を重ねた場合の音量の調整

ただし、-1~1の範囲を超えると wavファイルの振幅の制限を超える。

2つのデータを加算した場合、 0.5 倍すると振幅の制限を超えることを防止できる。

音を多数重ねる場合、音量はどうなるだろう。

たとえば70 dB の音を100個加算すると、エネルギーは100倍になり、音量はおよそ20dB上昇して 90dBになる。

振幅を1/100にすると -40dBであるから音量は 50dBとなり、だいぶ音量が下がってしまう。

N個の同程度の音量の音を重ねる場合、振幅は N^(1/2)倍すると元と同程度の音量を保つことができる。振幅もだいたい元と同程度になる。

ただし、全く同じ音を100倍した場合は、音量は 20 dBではなく 40dB上昇する。

音を重ねる場合の配列のサイズの調整

wavファイルの合成で x2, x3 を読み取る。

x2 と x3 を合成して x4 という音を作ってみる。


-->x4 = x2 + x3
            !--error 8 
一貫性がない追加です。

このようにエラーになるのは、x2とx3のサイズが異なるため。


-->length(x2)
ans =

42997.

-->length(x3)
ans =

27497. 

このような場合、x3の長さをx2に合わせれば加算できる。


x3(42997)=0;
length(x3)
x4=(x2+x3) * 0.5;
sound(x4,22050);