LoginSignup
25
23

More than 5 years have passed since last update.

sounddeviceでPythonを使って録音する

Last updated at Posted at 2018-11-05

音響測定でDAWで録音→書き出し→Pythonで分析の流れが非常に面倒だったので、なんとかワークフローを自動化できないかなと思っていたところ、sounddeviceという再生、録音をPython上で簡単に行えるモジュールを見つけたので、メモしておきます。

インストール

anacondaを使っている場合

conda install -c conda-forge python-sounddevice

pipの場合

python3 -m pip install sounddevice --user

でインストールできます。

使い方

まずはじめにインポートします。

import sounddevice as sd

デバイス設定

ターミナルから以下のコマンドを打つと、使えるデバイスの一覧が出てきます。

python3 -m sounddevice
 >>>
  0 Scarlett 2i2 USB, Core Audio (2 in, 2 out)
  1 MacBook Proのマイク, Core Audio (1 in, 0 out)
  2 MacBook Proのスピーカー, Core Audio (0 in, 2 out)

Pythonのスクリプト上で、 sounddevice.default.deviceにデバイス番号をアサインすると使うデバイスを設定することができます。

import sounddevice as sd

sd.default.device = 0 #Scarlet 2i2の入出力を使う
# sd.default.device = [in, out]のように、入出力で別々にアサインすることも可能
sd.default.device = [1, 2]

再生

例えば440Hzの正弦波を3秒再生したい場合、 sounddevice.play()を使うことで行なえます。

import numpy as np
import sounddevice as sd

fs = 48000 #サンプリング周波数
f0 = 440 #周波数
duration = 3 #再生時間

t = np.linspace(0, duration, duration * fs, endpoint=False)
x = np.sin(2*np.pi*f0*t)

sd.play(x, fs)
sd.wait()
#sd.stop()で再生停止もできます

録音

録音はsounddevice.rec()で行えます。録音している間に他の処理を行いたい場合は、sounddevice.rec()の下に処理をかけば良いですが、そうではなくて、録音が終わってから処理を行いたい場合はsounddevice.wait()を使って次の処理に進ませないようにする必要があります。

import sounddevice as sd

fs = 48000

duration = 5  # seconds
myrecording = sd.rec(int(duration * fs), samplerate=fs, channels=1)
sd.wait() # 

'''
何らかの処理
'''

再生と同時に録音

これは個人的に一番使うことになると思うのですが、再生と同時に録音も行いたい場合はsounddevice.playrec()を使います。
例えばスピーカに先程の正弦波を入力して、スピーカからの出力をマイクで録音する処理は場合は以下のコードで行えます。

import numpy as np
import sounddevice as sd

fs = 48000 #サンプリング周波数
f0 = 440 #周波数
duration = 3 #再生時間

t = np.linspace(0, duration, duration * fs, endpoint=False)
x = np.sin(2*np.pi*f0*t)

recording = sd.playrec(x, fs)
sd.wait()

注意点

きちんと同期がとれるかはまだ未確認なので利用時は自己責任でお願いします。
また確認次第追記します。

参考

25
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
23