配列の加算
配列同士の加算を行うと要素毎に加算が行われ、配列と数値を加算するとすべての要素に同じ数値が加算される。
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);