PythonでWAVファイルの情報を最も簡単に取得する方法

PythonでWAVファイルの情報を最も簡単に取得する方法 プログラミング

次のWAVファイルの情報をPythonで取得したいですか?

  • チャンネル数
  • サンプルサイズ
  • サンプリングレート(サンプリング周波数)
  • フレームレート
  • 再生時間

それなら、この記事があなたの助けとなるでしょう。
この記事を読めば、これ以上は検索をする必要はありません。

結論を言うと、waveモジュールを使います。

本記事の内容

  • waveモジュールとは?
  • WAVファイルの情報を取得する
  • 最初に標準ライブラリを確認する

それでは、上記に沿って解説していきます。

waveモジュールとは?

waveモジュールは、Pythonの標準ライブラリです。
そのため、ライブラリを別途インストールする必要はありません。

waveモジュールの機能は、大きく以下の二つ。

  • WAVファイルの読み込み
  • WAVファイルの書き込み

これらの機能が、標準ライブラリで可能なのです。
Pythonは、やっぱり便利です。

そして、waveモジュールの使い方は公式をご覧ください。

wave — WAVファイルの読み書き
https://docs.python.org/ja/3.9/library/wave.html

見ればわかるレベルの関数が、用意されています。

以上、waveモジュールについて説明しました。
次は、実際にWAVファイルの情報を取得していきましょう。

WAVファイルの情報を取得する

まずは、WAVファイルを用意しましょう。
そのファイルを「test.wav」とします。

「test.wav」の情報を表示するサンプルコードは、以下。

import wave

FILE_PATH = "test.wav"

# 読み込みモードでWAVファイルを開く
with wave.open(FILE_PATH,  'rb') as wr:

    # 情報取得
    ch = wr.getnchannels()
    width = wr.getsampwidth()
    fr = wr.getframerate()
    fn = wr.getnframes()

    # 表示
    print("チャンネル: ", ch)
    print("サンプルサイズ: ", width)
    print("サンプリングレート: ", fr)
    print("フレームレート: ", fn)
    print("再生時間: ", 1.0 * fn / fr)

上記を実行すると、以下のような結果が表示されます。

チャンネル:  1
サンプルサイズ:  2
サンプリングレート:  22050
フレームレート:  1347877
再生時間:  61.12820861678004

再生時間は、ピンポイントで取得する関数がありません。
そのため、サンプリングレートとフレームレートをもとに算出しています。

以上、waveモジュールを用いてWAVファイルの情報を取得しました。
最後は、標準ライブラリを確認することの重要性について説明します。

最初に標準ライブラリを確認する

今回、私自身が無駄に時間と費やしました。
waveモジュールにたどり着くまでにです。

「WAVファイルの情報を取得する」
このことが標準ライブラリで可能とは、思いもしませんでした。

別途ライブラリをインストールする必要があると思い込んでいたのです。
そして、実際に世の中には私と同じように思う人たちがたくさんいます。

  • Scipy
  • Pydub(AudioSegment)

調べた限りでは、上記のライブラリをインストールしているケースがありました。
正確には、Pydubは内部でAudioSegmentを利用するライブラリです。

Pydubを紹介している記事が、結構ありました。
このPydubは、導入自体が結構大がかりです。

Pydubのインストールには、FFmpegのインストールが必要となります。
がっつりと音声処理をするなら、Pydubをインストールすることに問題はありません。

でも、「WAVファイルの情報を取得する」程度でPydubのインストールは無駄です。
この場合、処理速度が遅いというデメリットもあります。
(実際に検証して確認済)

そりゃ、標準でPythonに組み込まれているwaveモジュールの方が速いですよね。
処理速度に関してなら、Scipyはそれほど遅いとは感じません。

ただ、取得できるデータが人間に優しくありません。
サンプリングレート以外は、数字の羅列が意味不明です。

以上のことより、幸せの青い鳥が頭に浮かびました。

欲しい機能(モノ)を求めてライブラリを探し求めました。
その過程では、いろいろと便利なライブラリを見つけました。

でも、waveモジュールが最も欲しいモノだったということです。
それは、もともとPythonに組み込まれていました。

今後の教訓にしたいと思います。

タイトルとURLをコピーしました