sppluginモジュール¶
spPlugin に基づく音声ファイル入出力のpythonモジュールです.WAV,AIFF,MP3,Ogg Vorbis,FLAC,ALAC,rawなど,様々なファイル形式をプラグインによりサポートしています.
サンプル
下記は入力音声ファイルの波形をプロットする例です.
import os
import sys
import spplugin
import numpy as np
import matplotlib.pyplot as plt
def plotfilebyplugin(filename):
with spplugin.open(filename, 'r') as pf:
nchannels = pf.getnchannels()
samprate = pf.getsamprate()
sampbit = pf.getsampbit()
nframes = pf.getnframes()
duration = nframes / samprate
y = pf.createndarray(nframes * nchannels)
nread = pf.read(y)
print('nread = %d' % nread)
y.resize((nframes, nchannels))
x = np.linspace(0.0, duration, nframes)
for i in range(nchannels):
plt.plot(x, y[:,i])
plt.xlim(0.0, duration)
plt.xlabel('Time [s]')
plt.ylabel('Amplitude (normalized)')
plt.show()
if __name__ == '__main__':
if len(sys.argv) <= 1:
print('usage: %s filename'
% os.path.basename(sys.argv[0]), file=sys.stderr)
quit()
plotfilebyplugin(sys.argv[1])
また,下記は,MATLABの同名関数と似た高レベル関数 audioread()
を使用した例です(バージョン0.7.16以降).
import os
import sys
import spplugin
import spaudio
def audioreadexample(filename):
data, samprate, params = spplugin.audioread(filename)
print('samprate = ' + str(samprate) + ', params =\n' + str(params))
with spaudio.open('wo', params=params) as a:
nwframes = a.writeframes(data)
print('write frames = %d' % nwframes)
if __name__ == '__main__':
if len(sys.argv) <= 1:
print('usage: %s filename'
% os.path.basename(sys.argv[0]), file=sys.stderr)
quit()
audioreadexample(sys.argv[1])
さらに,上記の例の'write'バージョンとも言える,MATLABの同名関数と似た高レベル関数 audiowrite()
を使用した例です(バージョン0.7.16以降).
import os
import sys
import spplugin
import spaudio
def audiowriteexample(filename):
duration = 2.0
with spaudio.open('ro', nchannels=2, samprate=44100) as a:
nframes = round(duration * a.getsamprate())
data = a.readframes(nframes, channelwise=True)
print('nread = %d' % len(data))
nwframes = spplugin.audiowrite(filename, data, a.getsamprate())
print('write frames = %d' % nwframes)
if __name__ == '__main__':
if len(sys.argv) <= 1:
print('usage: %s filename'
% os.path.basename(sys.argv[0]), file=sys.stderr)
quit()
audiowriteexample(sys.argv[1])
-
exception
spplugin.
BogusFileError
[ソース]¶ ベースクラス:
spplugin.Error
音声ファイルに異常がある場合に発生する例外です.
-
exception
spplugin.
FileError
[ソース]¶ ベースクラス:
spplugin.Error
音声ファイルの問題により発生する例外です.
-
exception
spplugin.
FileTypeError
[ソース]¶ ベースクラス:
spplugin.Error
ファイル形式がサポートされていない場合に発生する例外です.
-
exception
spplugin.
NChannelsError
[ソース]¶ ベースクラス:
spplugin.Error
チャネル数がサポートされていない場合に発生する例外です.
-
exception
spplugin.
NFramesRequiredError
[ソース]¶ ベースクラス:
spplugin.Error
ファイルの全フレーム数が要求されるプラグインの場合に発生する例外です.
-
exception
spplugin.
SampleBitError
[ソース]¶ ベースクラス:
spplugin.Error
ビット/サンプルがサポートされていない場合に発生する例外です.
-
exception
spplugin.
SampleRateError
[ソース]¶ ベースクラス:
spplugin.Error
サンプルレートがサポートされていない場合に発生する例外です.
-
class
spplugin.
SpFilePlugin
[ソース]¶ ベースクラス:
object
音声ファイル入出力のためのクラスです.このクラスは,標準ライブラリのaifcやwave,sunauと同じように用いることができます.異なる点としては,パラメータを指定する
set*()
関数群がopen()
の前に呼び出す必要がある点などが挙げられます.これらのパラメータは,関数open()
のオプション引数でも指定できます.-
copyarray2raw
(inarray, sampwidth, bigendian_or_signed8bit=False)[ソース]¶ Raw形式の配列 (array.array) の内容を,新たなRaw形式のbytesまたはbytearrayのデータにコピーします.
- パラメータ
inarray (array.array) -- 入力のbytearrayオブジェクトを指定します.
sampwidth (int) -- 出力データのバイト/サンプルを指定します.
bigendian_or_signed8bit (bool, optional) -- 出力データのエンディアンがビッグエンディアンの場合(16ビットか32ビットの場合)もしくは出力データのデータ型が符号付き8ビットデータの場合(8ビットの場合のみ)に
True
を指定します.
- 戻り値
変換されたデータを含む bytearray クラスのオブジェクトが返ります.
- 戻り値の型
bytearray
-
copyraw2array
(rawdata, sampwidth, bigendian_or_signed8bit=False)[ソース]¶ Raw形式のbytesまたはbytearrayのデータの内容を,新たなRaw形式の配列 (array.array) にコピーします.
- パラメータ
rawdata (bytes or bytearray) -- 入力の bytes オブジェクトまたは bytearray オブジェクトを指定します.
sampwidth (int) -- rawdataのバイト/サンプルを指定します.
bigendian_or_signed8bit (bool, optional) -- rawdata のエンディアンがビッグエンディアンの場合(16ビットか32ビットの場合)もしくはrawdata のデータ型が符号付き8ビットデータの場合(8ビットの場合のみ)に
True
を指定します.
- 戻り値
変換されたデータを含む array クラスのオブジェクトが返ります.
- 戻り値の型
array.array
-
createarray
(length, nframesflag=False)[ソース]¶ 現在のファイル設定に応じたdouble型配列を作成します.
- パラメータ
length -- 配列の長さを指定します.この長さはいわゆるフレーム数とは異なりますのでご注意ください(length = nframes * nchannels).フレーム数を指定したい場合は第2引数に
True
を指定します.nframesflag (bool, optional) -- 第1引数にフレーム数を指定したい場合は
True
を指定します.
- 戻り値
現在のファイルの設定に応じたarrayクラスのオブジェクトが返ります.
- 戻り値の型
array.array
-
createndarray
(length, nframesflag=False, channelwise=False)[ソース]¶ 現在のファイルの設定に応じたnumpyのdouble型配列を作成します.
- パラメータ
length -- 配列の長さを指定します.この長さはいわゆるフレーム数とは異なりますのでご注意ください(length = nframes * nchannels).フレーム数を指定したい場合は第2引数に
True
を指定します.nframesflag (bool, optional) -- 第1引数にフレーム数を指定したい場合は
True
を指定します.channelwise (bool, optional) --
True
を指定すると出力配列が (nframes, nchannels) の行列にリサイズされます.この引数はバージョン0.7.16にて導入されました.
- 戻り値
現在のファイルの設定に応じたndarrayクラスのオブジェクトです.
- 戻り値の型
numpy.ndarray
-
createrawarray
(length, nframesflag=False)[ソース]¶ 現在のファイルの設定に応じたRaw形式の配列を作成します.
- パラメータ
length -- 配列の長さを指定します.この長さはいわゆるフレーム数とは異なりますのでご注意ください(length = nframes * nchannels).フレーム数を指定したい場合は第2引数に
True
を指定します.nframesflag (bool, optional) -- 第1引数にフレーム数を指定したい場合は
True
を指定します.
- 戻り値
現在のファイルの設定に応じたarrayクラスのオブジェクトが返ります.
- 戻り値の型
array.array
-
createrawndarray
(length, nframesflag=False, channelwise=False)[ソース]¶ 現在のファイルの設定に応じたRaw形式のnumpyのndarrayを作成します.
- パラメータ
length -- 配列の長さを指定します.この長さはいわゆるフレーム数とは異なりますのでご注意ください(length = nframes * nchannels).フレーム数を指定したい場合は第2引数に
True
を指定します.nframesflag (bool, optional) -- 第1引数にフレーム数を指定したい場合は
True
を指定します.channelwise (bool, optional) --
True
を指定すると出力配列が (nframes, nchannels) の行列にリサイズされます.この引数はバージョン0.7.16にて導入されました.
- 戻り値
現在のファイルの設定に応じたndarrayクラスのオブジェクトです.
- 戻り値の型
numpy.ndarray
-
getcompname
(decodebytes=False)[ソース]¶ 圧縮形式の詳細名が返ります.現在の所,
'not compressed'
(decodebytes =True
の場合) またはb'not compressed'
(decodebytes =False
の場合) のいずれかになります.
-
getcomptype
(decodebytes=False)[ソース]¶ 圧縮形式が返ります.現在の所,
'NONE'
(decodebytes =True
の場合) またはb'NONE'
(decodebytes =False
の場合) のいずれかになります.
-
getndarraydtype
()[ソース]¶ double型配列を保持するためのnumpyのndarray用のdtype文字列を取得します.
- 戻り値
現在の設定のdtype文字列が返ります.
- 戻り値の型
string
-
getparams
()[ソース]¶ 現在のファイルの全てのパラメータをdictオブジェクトで取得します.
- 戻り値
キーが
'nchannels'
,'sampbit'
,'samprate'
,'nframes'
,'filetype'
,'songinfo'
になっているdictオブジェクトが返ります.- 戻り値の型
dict
-
getparamstuple
(decodebytes=False)[ソース]¶ 現在のファイルの全てのパラメータをnamedtupleオブジェクトで取得します.
- パラメータ
decodebytes (bool, optional) --
True
の場合は,getcomptype()
及びgetcompname()
で得られるbytesオブジェクトを文字列オブジェクトにデコードします.標準ライブラリのwave,sunauはデコードされた文字列オブジェクトを要求するのに対し,こちらも標準ライブラリのaifcはbytesオブジェクトを要求するため,この引数が用意されています.- 戻り値
現在のファイルの全てのパラメータを含むnamedtupleオブジェクトが返ります.このnamedtupleオブジェクトは,内容が
(nchannels, sampwidth, framerate, nframes, comptype, compname)
になっており,aifc,wave,sunauの標準ライブラリにおけるsetparams()
の引数として与えることが可能です.- 戻り値の型
namedtuple
-
getrawndarraydtype
()[ソース]¶ Raw形式のデータを保持するためのnumpyのndarray用のdtype文字列を取得します.
- 戻り値
現在の設定のdtype文字列が返ります.
- 戻り値の型
string
-
open
(filename, mode, *, pluginname=None, samprate=0, sampbit=0, nchannels=0, filetype=None, songinfo=None, params=None)[ソース]¶ プラグインを用いてファイル名と対応するファイルを開きます.
- パラメータ
filename (str) -- 開くファイルのファイル名を指定します.
mode (str) -- ファイルを開く際のモードを指定します.読み込みモードの
'r'
,書き込みモードの'w'
があります.pluginname (str, optional) -- 適切なプラグインが見つからなかった際に用いられるプラグイン名を指定します.指定しなかった場合は,
SuitableNotFoundError
の例外が発生します.Raw形式のファイルを読み込みたい場合は,'input_raw'
を指定します.samprate (double, optional) -- サンプルレート.
sampbit (int, optional) -- ビット/サンプル.
nchannels (int, optional) -- チャネル数.
filetype (str, optional) -- ファイル形式の文字列
songinfo (dict, optional) -- ソング情報.
params (dict, optional) -- dict形式の設定可能な全てのパラメータ.
- 例外
SuitableNotFoundError -- 適切なプラグインが見つからなかった場合に発生します.
-
read
(data, weight=1.0, offset=0, length=0)[ソース]¶ 音声ファイルからdouble型配列にデータを読み込みます.
- パラメータ
data (bytearray, array.array or numpy.ndarray) -- 音声ファイルから読み込むためのdouble型配列を指定します.
weight (double, optional) -- 読み込み後のデータに乗じられる重み係数を指定します.
offset (int, optional) -- オプションの配列に対するオフセットを指定します.
length (int, optional) -- オプションのファイルの全体の時間長を設定します.
- 戻り値
成功した場合には読み込みサイズが返り,失敗した場合には-1が返ります.
- 戻り値の型
int
注釈
キーワード引数の offset と length はバージョン0.7.15で導入されました.
-
readframes
(nframes, weight=1.0, arraytype='ndarray', channelwise=False)[ソース]¶ 次の nframes 分のデータを読み込み,double型配列を返します.
- パラメータ
nframes (int) -- 読み込むフレーム数を指定します.負の値は全フレーム数を意味します.
weight (double, optional) -- 読み込み後のデータに乗じられる重み係数を指定します.
arraytype (str, optional) -- 出力配列の型を指定します.
'ndarray'
(デフォルト),'array'
,'bytearray'
のいずれかを指定します.channelwise (bool, optional) --
True
を指定すると出力のndarrayが (nframes, nchannels) の行列にリサイズされます.この引数は'ndarray'
の場合にだけ有効となります.
- 戻り値
読み込まれたデータが含まれる配列が返ります.
- 戻り値の型
numpy.ndarray, array.array or bytearray
注釈
この関数はバージョン0.7.16にて導入されました.
-
readraw
(data, offset=0, length=0)[ソース]¶ 音声ファイルからRaw形式のデータを読み込みます.
- パラメータ
data (bytearray, array.array or numpy.ndarray) -- 音声ファイルからRaw形式のデータを読み込むためのRaw形式配列を指定します.
offset (int, optional) -- オプションの配列に対するオフセットを指定します.
length (int, optional) -- オプションのファイルの全体の時間長を設定します.
- 戻り値
成功した場合には読み込みサイズが返り,失敗した場合には-1が返ります.
- 戻り値の型
int
注釈
キーワード引数の offset と length はバージョン0.7.15で導入されました.
-
readrawframes
(nframes, arraytype='ndarray', channelwise=False)[ソース]¶ 次の nframes 分のデータを読み込み,Raw形式配列を返します.
- パラメータ
nframes (int) -- 読み込むフレーム数を指定します.負の値は全フレーム数を意味します.
arraytype (str, optional) -- 出力配列の型を指定します.
'ndarray'
(デフォルト),'array'
,'bytearray'
のいずれかを指定します.channelwise (bool, optional) --
True
を指定すると出力のndarrayが (nframes, nchannels) の行列にリサイズされます.この引数は'ndarray'
の場合にだけ有効となります.
- 戻り値
読み込まれたデータが含まれる配列が返ります.
- 戻り値の型
numpy.ndarray, array.array or bytearray
注釈
この関数はバージョン0.7.16にて導入されました.
-
setparams
(params)[ソース]¶ dictオブジェクトもしくはnamedtupleオブジェクトの形でパラメータを設定します.
- パラメータ
params (dict) --
'nchannels'
,'sampbit'
,'samprate'
,'nframes'
,'filetype'
,'songinfo'
のキーを持つdictオブジェクトを指定します.標準ライブラリのaifc,wave,sunauで用いられるnamedtupleオブジェクトを指定することもできます.
-
write
(data, weight=1.0, offset=0, length=0)[ソース]¶ double型配列のデータを音声ファイルへ書き込みます.
- パラメータ
data (bytearray, array.array or numpy.ndarray) -- 音声ファイルに書き込むためのdouble型配列を指定します.
weight (double, optional) -- 書き込み前のデータに乗じられる重み係数を指定します.
offset (int, optional) -- オプションの配列に対するオフセットを指定します.
length (int, optional) -- オプションの配列に対する書き込み長を指定します.
- 戻り値
成功した場合には書き込まれたサイズが返り,失敗した場合には-1が返ります.
- 戻り値の型
int
注釈
キーワード引数の offset と length はバージョン0.7.15で導入されました.
-
writeframes
(data, weight=1.0)[ソース]¶ double型配列のデータを音声ファイルへ書き込みます.
- パラメータ
data (bytearray, array.array or numpy.ndarray) -- 音声ファイルに書き込むためのdouble型配列を指定します.
weight (double, optional) -- 書き込み前のデータに乗じられる重み係数を指定します.
- 戻り値
成功した場合には書き込まれたフレーム数が返り,失敗した場合には-1が返ります.
- 戻り値の型
int
注釈
この関数はバージョン0.7.16にて導入されました.
-
writeraw
(data, offset=0, length=0)[ソース]¶ 音声ファイルにRaw形式配列のデータを書き込みます.
- パラメータ
data (bytearray, array.array or numpy.ndarray) -- 音声ファイルにデータを書き込むためのRaw形式配列を指定します.
offset (int, optional) -- オプションの配列に対するオフセットを指定します.
length (int, optional) -- オプションの配列に対する書き込み長を指定します.
- 戻り値
成功した場合には書き込まれたサイズが返り,失敗した場合には-1が返ります.
- 戻り値の型
int
注釈
キーワード引数の offset と length はバージョン0.7.15で導入されました.
-
-
exception
spplugin.
SuitableNotFoundError
[ソース]¶ ベースクラス:
spplugin.Error
適切なプラグインが見つからなかった場合に発生する例外です.
-
exception
spplugin.
WrongPluginError
[ソース]¶ ベースクラス:
spplugin.Error
不適切なプラグインの場合に発生する例外です.
-
spplugin.
audioread
(filename, samples=(0, -1), datatype='double', *, weight=1.0, arraytype='ndarray', channelwise=True, getparamstuple=False, decodebytes=False, pluginname=None, samprate=0, sampbit=0, nchannels=0, filetype=None, params=None)[ソース]¶ プラグインを用いてファイルの内容を読み込みます.
- パラメータ
filename (str) -- 開くファイルのファイル名を指定します.
samples (tuple, optional) -- サンプル(フレーム)の範囲を
(start, finish)
の形で指定します.finish
が負の場合はファイルの最後を意味します.datatype (str, optional) -- 出力データの形式を指定します.
'double'
の場合は,readframes()
が,'raw'
の場合は,readrawframes()
が内部的に呼ばれることになります.なお,'raw'
の場合には weight の引数は無視されます.weight (double, optional) -- 読み込み後のデータに乗じられる重み係数を指定します.
arraytype (str, optional) -- 出力配列の型を指定します.
'ndarray'
(デフォルト),'array'
,'bytearray'
のいずれかを指定します.channelwise (bool, optional) --
True
を指定すると出力のndarrayが (nframes, nchannels) の行列にリサイズされます.この引数は'ndarray'
の場合にだけ有効となります.getparamstuple (bool, optional) --
True
の場合は内部でgetparamstuple()
が使われるようになります.decodebytes (bool, optional) --
True
の場合は,getparamstuple()
の呼び出しの際にbytesオブジェクトを文字列オブジェクトにデコードします.この引数はgetparamstuple=True
の場合のみで有効です.pluginname (str, optional) -- 適切なプラグインが見つからなかった際に用いられるプラグイン名を指定します.指定しなかった場合は,
SuitableNotFoundError
の例外が発生します.Raw形式のファイルを読み込みたい場合は,'input_raw'
を指定します.samprate (double, optional) -- サンプルレート.
sampbit (int, optional) -- ビット/サンプル.
nchannels (int, optional) -- チャネル数.
filetype (str, optional) -- ファイル形式の文字列
songinfo (dict, optional) -- ソング情報.
params (dict, optional) -- dict形式の設定可能な全てのパラメータ.
- 戻り値
要素が以下のものになっているtupleが返ります.
numpy.ndarray, array.array or bytearray -- 読み込まれたデータが含まれる配列が返ります.
double -- 音声ファイルのサンプルレートが返ります.
dict or namedtuple --
getparamstuple=False
の場合は,getparams()
で返されるものと同じdictオブジェクトが返ります.getparamstuple=True
の場合は,getparamstuple()
で返されるものと同じnamedtupleオブジェクトが返ります.
- 戻り値の型
tuple
- 例外
SuitableNotFoundError -- 適切なプラグインが見つからなかった場合に発生します.
注釈
この関数はバージョン0.7.16にて導入されました.
-
spplugin.
audiowrite
(filename, data, samprate=0, nchannels=0, sampbit=0, *, datatype=None, weight=1.0, offset=0, length=0, pluginname=None, filetype=None, songinfo=None, params=None)[ソース]¶ プラグインを用いて音声ファイルにデータを書き込みます.
- パラメータ
filename (str) -- 開くファイルのファイル名を指定します.
data (bytearray, array.array or numpy.ndarray) -- 音声ファイルにデータを書き込むための配列を指定します.
samprate (double, optional) -- サンプルレート.
nchannels (int, optional) -- チャネル数.
sampbit (int, optional) -- ビット/サンプル.
datatype (str, optional) -- 入力データの形式を指定します.
'double'
の場合は,write()
が,'raw'
の場合は,writeraw()
が内部的に呼ばれることになります.なお,'raw'
の場合には weight の引数は無視されます.配列の種類によっては,このパラメータは自動判定されます.weight (double, optional) -- 書き込み前のデータに乗じられる重み係数を指定します.
offset (int, optional) -- オプションの配列に対するオフセットを指定します.
length (int, optional) -- オプションの配列に対する書き込み長を指定します.
pluginname (str, optional) -- 適切なプラグインが見つからなかった際に用いられるプラグイン名を指定します.指定しなかった場合は,
SuitableNotFoundError
の例外が発生します.Raw形式のファイルへ書き込みたい場合は,'output_raw'
を指定します.filetype (str, optional) -- ファイル形式の文字列
songinfo (dict, optional) -- ソング情報.
params (dict, optional) -- dict形式の設定可能な全てのパラメータ.
- 戻り値
成功した場合には書き込まれたフレーム数が返り,失敗した場合には-1が返ります.
- 戻り値の型
int
- 例外
SuitableNotFoundError -- 適切なプラグインが見つからなかった場合に発生します.
注釈
この関数はバージョン0.7.16にて導入されました.
-
spplugin.
open
(filename, mode, *, pluginname=None, samprate=0, sampbit=0, nchannels=0, filetype=None, songinfo=None, params=None)[ソース]¶ プラグインを用いてファイル名と対応するファイルを開きます.この関数は
with
文の中で使うことを想定しています.- パラメータ
filename (str) -- 開くファイルのファイル名を指定します.
mode (str) -- ファイルを開く際のモードを指定します.読み込みモードの
'r'
,書き込みモードの'w'
があります.pluginname (str, optional) -- 適切なプラグインが見つからなかった際に用いられるプラグイン名を指定します.指定しなかった場合は,
SuitableNotFoundError
の例外が発生します.Raw形式のファイルを読み込みたい場合は,'input_raw'
を指定します.samprate (double, optional) -- サンプルレート.
sampbit (int, optional) -- ビット/サンプル.
nchannels (int, optional) -- チャネル数.
filetype (str, optional) -- ファイル形式の文字列
songinfo (dict, optional) -- ソング情報.
params (dict, optional) -- dict形式の設定可能な全てのパラメータ.
- 戻り値
SpFilePlugin
クラスの新規インスタンスが返ります.- 戻り値の型
- 例外
SuitableNotFoundError -- 適切なプラグインが見つからなかった場合に発生します.