Python で音を出す。sounddevice 利用。

いろんなライブラリがありましたが、簡単そうな “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()