spAudio
読み取り中…
検索中…
一致する文字列を見つけられません
プラグインによる入出力

プラグインでオーディオ入出力をするための関数が用意されています. 様々なファイル形式での読み込み・保存やオーディオデバイスにおける入出力が可能となります. 高水準APIと低水準APIがあり,通常は,高水準APIのみで事が足りると思います.

プラグインが動作するためには, プラグインファイル(このパッケージには含まれていません)が 以下のディレクトリ(フォルダ)のいずれかに存在している 必要があります.

高水準APIを用いて音声ファイルを読み書きする手順は以下の通りで, C言語でファイルを読み書きする標準的な手順と良く似ています.

  1. spWaveInfo 型を初期化
    • 書き込みの場合は,所望のサンプリング周波数・量子化ビット数をセット
  2. spOpenFilePlugin() (同等の関数として, spOpenFilePluginAuto() , spOpenFilePluginArg() , spOpenFilePluginArgAuto() などがあります)を用い,読み込みの場合は"r"モードで,書き込みの場合は"w"モードでファイルをオープン
    • 書き込みの場合は,書き込みプラグイン名を第1引数にセット.NULLの場合は,ファイル名から自動判定
    • 読み込みの場合は,対象ファイル形式が決まっていればプラグイン名を第1引数にセットし,決まっていなければNULLを渡して自動判定させる
    • 第4引数は,通常はファイルを対象とするため, SP_PLUGIN_DEVICE_FILE だが, SP_PLUGIN_DEVICE_AUDIO を指定することによりデフォルトのオーディオデバイスから入出力することも環境によっては可能
  3. 読み込みの場合は spReadPlugin() を,書き込みの場合は spWritePlugin() を,必要な回数呼び出す
  4. spCloseFilePlugin() を呼び出し,ファイルをクローズ

以下は,上記手順による読み込みプログラム例の一部分です.

long data_length; /* バッファの長さ */
char *input_file; /* ファイル名 */
double *data;
long nread;
spPlugin *i_plugin;
spWaveInfo wave_info;
:
data = xspMalloc(data_length * sizeof(double));
i_plugin = spOpenFilePluginArg(NULL, input_file, "r", SP_PLUGIN_DEVICE_FILE,
&wave_info, NULL, 0, NULL, NULL);
if (i_plugin != NULL) {
/* wave_info.samp_rate:サンプリング周波数 */
/* wave_info.samp_bit:量子化ビット数 */
/* wave_info.num_channel:チャネル数 */
:
for (i = 0;; i++) {
if ((nread = spReadPluginDouble(i_plugin, data, data_length)) <= 0) {
break;
}
:
}
spCloseFilePlugin(i_plugin);
}
char * xspMalloc(int nbytes)
long spReadPluginDouble(spPlugin *plugin, double *data, long length)
spBool spCloseFilePlugin(spPlugin *plugin)
spPlugin * spOpenFilePluginArg(const char *plugin_name, const char *filename, const char *mode, spPluginDeviceType device_type, spWaveInfo *wave_info, spSongInfo *song_info, int argc, char **argv, spPluginError *error)
Definition spWave.h:43