【Python】任意の周波数の音を再生する方法!合成波も可能!

こんにちは、ヒガシです。

 

このページでは、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を使って、任意の合成波の音を再生する方法をご紹介しました。

ぜひいろいろと変更して遊んでみましょう。

 

このように、私のブログでは様々なスキルを紹介しています。

過去記事一覧

 

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村 IT技術ブログへ
にほんブログ村

それではまた!

コメント

タイトルとURLをコピーしました