Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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

環境

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

mix_dvd
ExcelのマクロやWebアプリケーション、iOSアプリを作っています。 また、しまねソフト研究開発センター専門研究員の業務を受託しています。http://www.s-itoc.jp
http://blueomega.jp
s-itoc
しまねソフト研究開発センター(ITOC)はITを活用する企業の支援と研究開発の拠点です。
http://www.s-itoc.jp/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした