のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

Python numpyとwaveライブラリを利用したwaveファイルの読み込み

Sponsored Links

皆さんこんにちは
お元気ですか?私は眠い

さて、音声関係のファイルですね。
Pythonではwaveファイルを読み込み、書き込みするようなライブラリが予め用意されています。
さっそく使ってみましょう。

サンプルソースコード

#coding: utf-8
import wave
import sys
import numpy as np

file_name = sys.argv[1]

"""読み込み作業"""
wave_file = wave.open(file_name,"r") #Open

print wave_file.getnchannels() #モノラルorステレオ
print wave_file.getframerate() #サンプリング周波数
print wave_file.getnframes() #フレームの総数

print wave_file.getparams()

x = wave_file.readframes(wave_file.getnframes()) #frameの読み込み
x = np.frombuffer(x, dtype= "int16") #numpy.arrayに変換

"""書き込み作業"""
write_wave = wave.Wave_write("aaa.wav")
write_wave.setparams(wave_file.getparams())
write_wave.writeframes(x)
write_wave.close()

waveファイルの読み込みは以下の通りで実行できます。

wave_file = wave.open(file_name,"r") 

モノラルorステレオですね。
モノラルとステレオで信号処理での扱い方が異なってきますので、注意して扱ってください。
基本的にgetのメソッドを使うと、そのファイルの詳細な情報を取得することができます。

print wave_file.getnchannels() #モノラルorステレオ
print wave_file.getframerate() #サンプリング周波数
print wave_file.getnframes() #フレームの総数

以下の方法でnumpyの形式でファイルを読み込むことができます。

x = wave_file.readframes(wave_file.getnframes()) #frameの読み込み
x = np.frombuffer(x, dtype= "int16") #numpy.arrayに変換

最後に書き込み作業です
ステータスとフレームセットして閉じているのみ。

write_wave = wave.Wave_write("aaa.wav")
write_wave.setparams(wave_file.getparams())
write_wave.writeframes(x)
write_wave.close()

numpyを扱うとフーリエ変換とか色々できるので、信号を読取る方法を知っていると楽しいことができます。