こんにちは、ヒガシです。
前回の記事では、Python上で任意の周波数の音を作成する方法をご紹介しました。
【Python】任意の周波数の音を再生する方法!合成波も可能!
今回はこのスキルを応用して救急車のサイレン音を作成してみようと思います。
音に関することだけでなく、配列操作についても学ぶことができるはずです。
それではさっそくやっていきましょう。
救急車のサイレンの周波数について
音を作成するにあたって、まずは作りたい音の周波数がわからなければ話になりません。
調べてみたとこと、救急車のサイレン音は960Hzと770Hzの周波数音が0.6秒ごとに繰り返されているそうです。
※実際はドップラー効果等で耳に届く周波数とは異なっているため、作成した音には若干違和感がありますが、まぁいいでしょう。
Pythonで救急車の音を再生する方法
それでは本題です。
さっそくですが、以下が救急車の音を鳴らすサンプルコードです。
import pygame
import numpy as np
#モジュール初期化
pygame.mixer.init(frequency=44100, size=-16, channels=1)
#再生時間を指定
time=0.6
#周波数を指定
Hz1=960
Hz2=770
#再生時間を設定
arr_size = int(44100*time*2)
x=np.linspace(0,arr_size,arr_size)
pi_y=np.sin(2*np.pi*Hz1/44100*x)*10000
po_y=np.sin(2*np.pi*Hz2/44100*x)*10000
y=np.concatenate([pi_y,po_y],0)
y=y.astype(np.int16)
sound_arr = y.reshape(int(y.shape[0]/2), 2)
#音を再生
sound = pygame.sndarray.make_sound(sound_arr)
sound.play(3)
これで救急車のサイレン風のピーポーという音を三回繰り返し再生することができます。
繰り返し数を増やしたい場合は最後の行の3を任意の数値に書き換えればOKです。
サイレン音の作り方解説
基本的な作り方としてはまずは前回の記事を参考にして、ピーという音(960Hz)を表す配列、ポーという音(770Hz)を表す配列をそれぞれ0.6秒分作成し、それらの配列をnumpyのconcatenateというスキルを使って結合します。
そうすればピーポーという一回分の音を作成することができますので、あとはPython上で繰り返し再生すれば完了ですね。
ちなみに以下が実際に作成したピーポーという音です。
※再生するとピーポーという音が出ますのでご注意ください。
おわりに
というわけで今回はpythonを使って、救急車のサイレン音を作成する方法をご紹介しました。
ぜひ周波数なり、再生時間なりを変更しながら遊んでみてください。
このように、私のブログでは様々なスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村
それではまた!
Follow @HigashiSalary
コメント