質問: Pythonでnumpy配列同士を和の演算すると各要素の和になるということらしく表示されるグラフに影響が出てしまいました。 それを回避するためにnumpyの何かしらを用いて音データの重ね合わせをしたいです。 song1に10秒の曲データ、song2に1秒のノイズデータがあるとして song1の5-6秒の1秒間にノイズを重ね合わせて、それを反映させた音を聴けるようにするにはどうすればよいのでしょうか? ``` mixmusic=np.insert(song1,song1[5*sr:6*sr],song2) IPython.display.Audio(mixmusic, rate=sr) #完成音データを聞ける様に ``` など、様々試してみましたが、どうやってもノイズが10秒の曲の冒頭や最後に挿入されてしまいます。 以下のノイズ波形とsong1の波形を互いに影響が及ばないように重ね合わせたいです。 ノイズの最大値はsong1の最大値と一致させるという処理をしています。 単純にsong1[5*sr:6*sr]+=song2のようにすると振幅値がsong1とsong2の最大値を超えてしまうのでそうならないようにしたいです。 ![song2(ノイズの波形)](https://i.stack.imgur.com/egCOU.png) ![song1の波形](https://i.stack.imgur.com/A2FPW.png) ![単純な和で実現させた結果](https://i.stack.imgur.com/KSZ97.png)
回答: 10秒の曲データsong1と、1秒のノイズデータsong2がある。 song1の5-6秒の1秒間にノイズ(song2)を重ね合わせたい。 という事ですから、 出来上がった曲は 0-5秒 song1の0-5秒と同じ (なにも変化させていない) 5-6秒 song1の5-6秒とsong2とを重ね合わせたもの 6-10秒 song1の6-10秒と同じ (なにも変化させていない) になるはずです。 song1の0-5秒と、song1の5-6秒、song1の6-10秒は、 song1[0:5 * sr]、song1[5 * sr : 6 * sr]、song1[6 * sr : 10 * sr]のように、song1のスライスで得られます。 song1[0 : 5 * sr]と、song1[5 * sr : 6 * sr]とsong2とを重ね合わせたものと、song1[6 * sr : 10 * sr]の3つを連結すれば、質問者が望んでいる曲データになるのではないでしょうか?