Pythonのsndhdrモジュールでサウンドファイルの種類を判別する方法
Pythonの標準ライブラリに含まれるsndhdrモジュールは、ファイル内に格納されたサウンドデータの種類を読み取るためのユーティリティ関数を提供します。これらの関数は、以下の5つの属性を持つnamedtuple()オブジェクトを返します。
| filetype | サウンド形式を表す文字列。'aifc'、'aiff'、'au'、'hcom'、'sndr'、'sndt'、'voc'、'wav'、'8svx'、'sb'、'ub'、'ul' のいずれかが返されます。 |
| framerate | サンプリングレート。実際の値が返されますが、不明な場合やデコードが困難な場合は0になります。 |
| nchannels | チャンネル数。判定できない場合やデコードが困難な場合は0になります。 |
| nframes | フレーム数。取得できない場合は-1が返されます。 |
| sampwidth | 1サンプルあたりのビット数。A-LAWの場合は'A'、u-LAWの場合は'U'という文字列が返されます。 |
sndhdrモジュールの主な関数
sndhdr.what()
この関数は、内部でwhathdr()を呼び出すことで、指定したファイルfilenameに格納されたサウンドデータの種類を判別します。判別に成功した場合は前述のnamedtupleを返し、失敗した場合はNoneを返します。
sndhdr.whathdr()
この関数は、ファイルヘッダーの情報をもとに、そのファイルに格納されたサウンドデータの種類を判別します。成功した場合は前述のnamedtupleを返し、失敗した場合はNoneを返します。
使用例
実際にWAV、AIFF、AU形式のファイルに対してwhathdr()を実行すると、以下のように各属性の値を確認できます。
>>> import sndhdr
>>> sndhdr.whathdr("sample.wav")
SndHeaders(filetype='wav', framerate=44100, nchannels=1, nframes=99999, sampwidth=16)
>>> sndhdr.whathdr("sample.aiff")
SndHeaders(filetype='aiff', framerate=8000, nchannels=1, nframes=271200, sampwidth=16)
>>> sndhdr.whathdr("sample.au")
SndHeaders(filetype='au', framerate=8000, nchannels=1, nframes=103397.0, sampwidth='U')
注意点:非推奨化について
sndhdrモジュールはPython 3.11で非推奨(Deprecated)となり、Python 3.13では標準ライブラリから削除されました。最新のPython環境で同様の処理を行いたい場合は、python-magicやfiletypeなどの外部ライブラリを利用するか、ファイルシグネチャ(マジックナンバー)を直接読み取って判別する方法を検討してください。
-
Pythonのbase64モジュールを使ったデータエンコード・デコード入門
PythonにおけるBase64エンコーディングとはPython標準ライブラリのbase64モジュールは、バイナリデータをプレーンテキスト(ASCII)プロトコルで安全に送信できる形式へ変換するための機能を提供します。メール送信、URLへの埋め込み、HTTP POSTリクエストなど、テキストベースの通信経路でバイナリデータを扱いたい場面で活躍するモジュールです。このモジュールが実装しているのは、RFC 3548で定義されたBase16、Base32、Base64の各アルゴリズム、および事実上の標準となっているAscii85とBase85のエンコーディングです。RFC 3548準拠のエンコーディ
-
Pythonで作るWebサイトブロッカー ― 業務時間中にSNSへのアクセスを自動遮断する方法
大手IT企業で働いたことがある方なら、FacebookやYouTube、InstagramといったSNS系のWebサイトが社内からアクセスできないよう制限されていることに気づいた経験があるかもしれません。こうした制限は、サードパーティ製アプリに頼らなくても実現できます。自分専用のオリジナルツールを作れば、好きなWebサイトを自由にブロックできるのです。しかもPythonでWebサイトブロッカーを開発するのは、それほど難しいことではありません。この記事では、指定したWebサイトをブロックするPythonスクリプトの作り方を解説します。前提条件Python 3.x がインストールされていることPy