こんにちは、ヒガシです。
このページでは、Python上で任意の合成波を作成し、その合成波の音を再生する方法をご紹介していきます。
必要なライブラリ一覧
まずは今回使用するライブラリ一覧をご紹介します。
★matplotlib:合成波の確認際に使用
★pygame:音を再生する際に使用
★numpy:合成波を作成する際に使用
pygameなんかはあまり使わない人も多いと思いますので、インストールされていなければまずはインストール作業から進めましょう。
Python上で任意の周波数の音を再生するサンプルコード
それではさっそくですが、実演してみます。
import matplotlib.pyplot as plt
import pygame
import numpy as np
#モジュール初期化
pygame.mixer.init(frequency=44100, size=-16, channels=1)
#再生時間を指定
time=2
#周波数を指定
Hz1=300
#再生時間を設定
arr_size = 44100*time*2
x=np.linspace(0,arr_size,arr_size)
y=np.sin(2*np.pi*Hz1/44100*x)*10000
y=y.astype(np.int16)
xtime=x/44100
plt.plot(xtime,y)
plt.xlim(0,0.1)
sound_arr = y.reshape(int(y.shape[0]/2), 2)
#音を再生
sound = pygame.sndarray.make_sound(sound_arr)
sound.play()
これで周波数300Hzの音が再生されるはずです。
(再生されない場合はマイクの音量等が適切かどうか確認してみましょう。)
また、以下のような波のグラフも一緒に出力されるはずです。
なお、コードの13行目にて指定した周波数の波を作成しておりますので、ここを書き換えることで任意の合成波を自由に作成することが可能です。
任意の合成波を作成してみる
それでは先ほどのベースコードを修正して任意の合成波に変更してみましょう。
以下がそのサンプルコードです。
import matplotlib.pyplot as plt
import pygame
import numpy as np
#モジュール初期化
pygame.mixer.init(frequency=44100, size=-16, channels=1)
#再生時間を指定
time=2
#周波数を指定
Hz1=300
Hz2=500
#再生時間を設定
arr_size = 44100*time*2
x=np.linspace(0,arr_size,arr_size)
y=np.sin(2*np.pi*Hz1/44100*x)*10000+np.sin(2*np.pi*Hz2/44100*x)*10000
y=y.astype(np.int16)
xtime=x/44100
plt.plot(xtime,y)
plt.xlim(0,0.1)
plt.savefig('test.png',dpi=300)
sound_arr = y.reshape(int(y.shape[0]/2), 2)
#音を再生
sound = pygame.sndarray.make_sound(sound_arr)
sound.play()
これで300Hzと500Hzの合成波が再生されます。
グラフは以下の通りです。
しっかりと音が変化したことを確認できました。
おわりに
というわけで今回はpythonを使って、任意の合成波の音を再生する方法をご紹介しました。
ぜひいろいろと変更して遊んでみましょう。
このように、私のブログでは様々なスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村
それではまた!
Follow @HigashiSalary
コメント