PyAudioを使ったPython録音処理

PythonからPyAudioを使ってUSBマイクなどの音声を録音できます。
本記事では、PythonのPyAudioライブラリを使用して、簡単に音声録音を行う方法を解説します。

インストール

Windows

pip install pyaudio

Ubuntu 20.04

portaudio.hfile not foundのエラーが表示される場合は次のコマンドでインストールしてください。(Python 3.8.10 で確認)

sudo apt install python3-pyaudio

Windowsの録音処理

import pyaudio
import wave

REC_TIME = 10 # sec
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
CHUNK = 2**12

audio = pyaudio.PyAudio()
stream = audio.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)
print("recording now...")

# 録音処理
frames = []
for i in range(0, int((RATE / CHUNK) * REC_TIME)):
    data = stream.read(CHUNK)
    frames.append(data)
#;

# 録音終了
stream.stop_stream()
stream.close()
audio.terminate()

# 保存
wave_file = wave.open('output.wav', 'wb')
wave_file.setnchannels(CHANNELS)
wave_file.setsampwidth(audio.get_sample_size(FORMAT))
wave_file.setframerate(RATE)
wave_file.writeframes(b''.join(frames))
wave_file.close()

Ubuntuの録音処理

Windowsと同じで録音できる場合もあります。録音できない場合は、input_device_indexを指定します。値はarecord -lコマンドで表示されたカード番号を指定します。

import pyaudio
import wave

REC_TIME = 10 # sec
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
CHUNK = 2**12
DEVICE_INDEX = 2

audio = pyaudio.PyAudio()
stream = audio.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    input_device_index=DEVICE_INDEX,
                    frames_per_buffer=CHUNK)
print("recording now...")

# 録音処理
frames = []
for i in range(0, int((RATE / CHUNK) * REC_TIME)):
    data = stream.read(CHUNK)
    frames.append(data)
#;

# 録音終了
stream.stop_stream()
stream.close()
audio.terminate()

# 保存
wave_file = wave.open('output.wav', 'wb')
wave_file.setnchannels(CHANNELS)
wave_file.setsampwidth(audio.get_sample_size(FORMAT))
wave_file.setframerate(RATE)
wave_file.writeframes(b''.join(frames))
wave_file.close()
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です