search
LoginSignup
102

More than 3 years have passed since last update.

posted at

updated at

Pythonで音を録音して可視化する

はじめに

「音をテーマに機械学習の題材を調査する」という宿題を頂いたことから、まずは音を収集する方法を調べてみたのでメモします。

環境

  • MacBook Air
  • Python 3.6.0 Anaconda custom (x86_64)
  • Jupyter Notebook

ライブラリのインストール

pyaudioというのを使うとすぐにできるという情報があったのでインストールします。

まずは依存しているPortAudioというライブラリをインストールします。

PortAudio

./configure --disable-mac-universal && make
sudo make install

Macでは、pyaudioをインストールしようとすると「pa_mac_core.hがないよ」って言われるので、以下のコマンドでコピーしておきます。

sudo cp include/pa_mac_core.h /usr/local/include/

引き続き、pyaudioのインストール

pip install pyaudio

以上。

録音と可視化

raspberryPi と pyaudioで録音、音声波形処理

上記のサイトに音を録音してファイルに保存する方法が記載されていたので、こちらを参考にさせて頂きました。

import pyaudio
import sys
import time
import wave

chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 3

p = pyaudio.PyAudio()

stream = p.open(
    format = FORMAT,
    channels = CHANNELS,
    rate = RATE,
    input = True,
    frames_per_buffer = chunk
)

all = []
for i in range(0, int(RATE / chunk * RECORD_SECONDS)):
    data = stream.read(chunk)
    all.append(data)

stream.close()
p.terminate()

data = b''.join(all)

ここで、dataに音のデータが入るので、これを以下の手順で可視化します。

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

x = np.frombuffer(data, dtype="int16") / 32768.0

plt.figure(figsize=(15,3))
plt.plot(x)
plt.show()

x = np.fft.fft(np.frombuffer(data, dtype="int16"))

plt.figure(figsize=(15,3))
plt.plot(x.real[:int(len(x)/2)])
plt.show()

柏手を数回打った音を録音した結果を可視化すると以下のとおりでした。

Unknown.png

Unknown-2.png

上が音の波形で、下がFFTの結果です。

ということで、さてこれからどうしよう...(^_^;)

その後

スクリプトを改造し、以下の記事を書いてみました。あわせてご覧下さい(^-^)

Pythonで音を監視して一定以上の音量を録音する

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
What you can do with signing up
102