いろんなライブラリがありましたが、簡単そうな “sounddevice” というのを選びました。
pip install sounddevice でインストールします。
一応音の出るプログラミングをしました。
ご自分のPython実行環境でお試しください。
まだ録音できないので、勉強中です。(2023.06.27 )
録音・再生できました。wav形式はサイズが大き過ぎるので、mp3に別途変換しています。(2023.06.28)
# sound-try-01R.py 2023.06.28 revised by Kero
# 音を扱おうとすると、いずれのライブラリでも音の終端にノイズが入る。
# ここでは、sounddevice を使うことにする。
# ドミソドの音を出す。
import numpy as np
import sounddevice as sd
import matplotlib.pyplot as plt
import scipy
from scipy.io.wavfile import write
import time
pi = np.pi
fig = plt.figure(figsize=(8,4)) # グラフを左右2枚。
ax1 = fig.add_subplot(121) # 左のグラフは音の出だしの波形。
ax2 = fig.add_subplot(122) # 右のグラフは音の終端の波形。
sh = np.linspace(0, 1, 44101) # CDのサンプリングレート(44100Hz)に合わせる。
nh = np.array([261.628, 329.628, 391.995, 523.251]) # ド、ミ、ソ、ドの周波数
a = 1. # 音量
ax1.set_xlim(0, 4/440) # 波形グラフはラの音が4つ入るくらいに設定。
ax2.set_xlim(1-4/440, 1)
sound = []
for nhi in nh:
y = np.sin(2*pi*sh*nhi) # サインのカッコの中は、
# 音の1秒間の正弦波の数 x サンプリング時点(0〜1)。
# 以下のfor文はノイズをなくすため。
# for a in range(0, 750): # 音の終端にノイズが入るので、音量を小さくして消去。
# y[-a-1] = y[-a-1] * a / 750
sound = np.append(sound, y)
sd.play(y, 44100) # 音の出力。
time.sleep(1) # 1秒間同じ音を出しっぱなし。
ax1.plot(sh, y) # 音の波形グラフ。0秒〜。
ax2.plot(sh, y) # 音の波形グラフ。〜1秒。
sound = np.array(sound) # scipyに放り込むために数値配列に変換。
# scipyはwav形式しか扱えないようです。
scipy.io.wavfile.write(filename='sound-try-01RN.wav', rate=44100, data=sound)
plt.show()