Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
102
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@mix_dvd

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で音を監視して一定以上の音量を録音する

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
102
Help us understand the problem. What are the problem?