質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3163閲覧

Pythonにおける音と音の合成方法(秒数指定)

2323

総合スコア5

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/07/01 03:47

前提・実現したいこと

Pythonにおける音と音の合成方法を知りたい。
また、その際、音を重ねるタイミングを秒数で指定したい。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
##現在の状況
以下の様に、song1という変数中に元となる音データを格納し、
song2という変数には重ねる音データを格納しました。
song1=y #元の曲データ・長さは30秒
song2=y1 #これから重ねる音データ(エフェクト)・長さは1秒間

そして、新たにmixmusicという変数を作成し、そこに
mixmusic = song1[5sr:6sr]+song2 #srはサンプリングレート
の様にしてやれば、元の音データの5秒から6秒の間に先ほどのsong2の音が挿入され

IPython.display.Audio(mix music, rate=sr)
で聞ける様になるかなと思ったら、再生できたのはsong1の5-6秒の間に1秒間song2が重なって流れている音声が聞こえるといった結果になりました。(すなわち再生時間が1秒間だった)
そこで、もしsong1の30秒音データの5-6秒間の間にsong2の音を重ねて、きちんと30秒間の音が再生できる様にするにはどうすれば良いのか教えてください!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

新しい変数を作る代わりに元の配列を操作すればいいんじゃないでしょうか。

Python3

1song1[5*sr:6*sr]+=song2 2 3IPython.display.Audio(song1, rate=sr)

投稿2020/07/01 04:10

tachikoma

総合スコア3601

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

2323

2020/07/01 04:24

一応C言語やJavaも多少経験があるのに、+=で足し合わせる発想が欠け落ちていました、プログラムも助長でなくスマートで助かります!
guest

0

song1とsong2がnumpy arrayと仮定して回答します。
song1[5sr:6sr]とスライスしているために、5-6秒間のsong1にsong2を足している状態なので、全体としては1秒間になります。一つの解決策としてはsong1と同じ大きさの0で埋められた配列song2_extendを用意し、それにsong2を入れ、song1とsong2_extendを足せばmixされます。

python

1song1=y #元の曲データ・長さは30秒 2song2=y1 #これから重ねる音データ(エフェクト)・長さは1秒間 3 4song2_extend = np.zeros_like(song1) 5song2_extend[5*sr:6*sr] = song2 6mixmusic = song1+song2_extend 7 8IPython.display.Audio(mixmusic, rate=sr)

投稿2020/07/01 04:09

編集2020/07/01 04:17
Penpen7

総合スコア698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

2323

2020/07/01 04:29

>song1[5*sr:6*sr]とスライスしているために、5-6秒間のsong1にsong2を足している状態なので全体としては1秒間になります なんとなくそんな気もしていましたがやはりそうでしたか・・・。 特に、np.zeros_likeというものは初見で今調べたところですが非常に為になりました。ありがとうございます。最後の下まで完全に理解することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問