spAudio
|
オーディオ入出力を扱うクラスです. [詳解]
#include <sp/spAudio.h>
関連関数 | |
(これらはメソッドではありません) | |
#define | spFreeAudioDriver(audio) {_spFreeAudioDriver(audio); (audio) = NULL;} |
#define | spFreeAudio(audio) spFreeAudioDriver(audio) |
初期化 | |
spAudio | spInitAudioDriver (const char *driver_name) |
spAudio | spInitAudio (void) |
void | _spFreeAudioDriver (spAudio audio) |
デバイス選択 | |
spBool | spGetNumAudioDevice (spAudio audio, int *num_device) |
char * | xspGetAudioDeviceName (spAudio audio, int device_index) |
spBool | spSelectAudioDevice (spAudio audio, int device_index) |
セッターおよびゲッター | |
spBool | spSetAudioSampleRate (spAudio audio, double samp_rate) |
spBool | spGetAudioSampleRate (spAudio audio, double *samp_rate) |
spBool | spSetAudioChannel (spAudio audio, int num_channel) |
spBool | spGetAudioChannel (spAudio audio, int *num_channel) |
spBool | spSetAudioBufferSize (spAudio audio, int buffer_size) |
spBool | spGetAudioBufferSize (spAudio audio, int *buffer_size) |
spBool | spSetAudioNumBuffer (spAudio audio, int num_buffer) |
spBool | spGetAudioNumBuffer (spAudio audio, int *num_buffer) |
spBool | spSetAudioBlockingMode (spAudio audio, int block_mode) |
spBool | spGetAudioBlockingMode (spAudio audio, int *block_mode) |
spBool | spSetAudioSampleBit (spAudio audio, int samp_bit) |
spBool | spGetAudioSampleBit (spAudio audio, int *samp_bit) |
spBool | spGetAudioSpecifiedSampleBit (spAudio audio, int *specified_samp_bit) |
spAudioCallbackType | spSetAudioCallbackFunc (spAudio audio, spAudioCallbackType call_type, spAudioCallbackFunc call_func, void *call_data) |
オープンおよびクローズ | |
spBool | spOpenAudioDevice (spAudio audio, const char *mode) |
spBool | spCloseAudioDevice (spAudio audio) |
読み込みおよび書き込み | |
long | spReadAudio (spAudio audio, void *data, long length) |
long | spWriteAudio (spAudio audio, void *data, long length) |
long | spReadAudioDoubleWeighted (spAudio audio, double *data, long length, double weight) |
long | spReadAudioDouble (spAudio audio, double *data, long length) |
long | spWriteAudioDoubleWeighted (spAudio audio, double *data, long length, double weight) |
long | spWriteAudioDouble (spAudio audio, double *data, long length) |
デバイス制御 | |
spBool | spGetAudioOutputPosition (spAudio audio, spLong *position) |
spBool | spStopAudio (spAudio audio) |
spBool | spSyncAudio (spAudio audio) |
オーディオ入出力を扱うクラスです.
実際には,クラスではなく, typedef struct _spAudio *spAudio;
により typedef された型です. spInitAudio() か spInitAudioDriver() により初期化して使用し,使用が終わったら spFreeAudio() または spFreeAudioDriver() でリソースの解放を行います.
通常,オーディオ入出力の流れは次のようになります.
|
related |
spAudio のメモリを確保し,オーディオドドライバーを使用できる状態に初期化します(コンストラクター).
オーディオ入出力に関する関数は,これ(もしくは spInitAudio() )を呼ばないと使用できません. spFreeAudioDriver() を呼ばずに同一のドライバーを使用して複数回呼び出すことはできません. 別々のドライバーを使用して呼び出した場合は,ドライバーや環境によっては,それぞれを独立して使用することができます.
[in] | driver_name | ドライバー名のヌル終端文字列を指定します.NULLの場合はデフォルトのドライバーが使用されます. |
|
related |
spAudio のメモリを確保し,オーディオドドライバーを使用できる状態に初期化します(コンストラクター).
オーディオ入出力に関する関数は,これ(もしくは spInitAudioDriver() )を呼ばないと使用できません. spFreeAudio() を呼ばずに複数回呼び出すことはできません.
|
related |
オーディオドライバーのリソースを解放します.実際には, spFreeAudioDriver() を代わりに使用して下さい.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
オーディオデバイスの数を取得します.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[out] | num_device | デバイス数を受け取る変数のアドレスを指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
|
related |
オーディオデバイス名を取得します.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | device_index | 0始まりのデバイスのインデックスを指定します.( spGetNumAudioDevice() で返される値-1)までの値が指定できます.0は,環境等によらず,常にデフォルトのデバイスに相当します. |
オーディオデバイスを選択します.デバイスのオープンを行う前に呼ぶ必要があります.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | device_index | 0始まりのデバイスのインデックスを指定します.( spGetNumAudioDevice() で返される値-1)までの値が指定できます.0は,環境等によらず,常にデフォルトのデバイスに相当します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
オーディオ入出力に使用するサンプリング周波数を設定します.
デバイスのオープンを行う前に呼んでください.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | samp_rate | サンプリング周波数をヘルツで指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
デバイスが使用しているサンプリング周波数を取得します.
デバイスのオープン後に,デバイスにおける値を知ることができます.それまでは,単に現在設定されている値を返します.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[out] | samp_rate | 値を受け取る変数のアドレスを指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
オーディオ入出力に使用するチャネル数を設定します.
デバイスのオープンを行う前に呼んでください.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | num_channel | チャネル数を指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
デバイスの現在のチャネル数を得ます.
デバイスのオープン後に,デバイスにおける値を知ることができます.それまでは,単に現在設定されている値を返します.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[out] | num_channel | 値を受け取る変数のアドレスを指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
オーディオ入出力に使用するバッファのサイズを設定します.
デバイスのオープンを行う前に呼んでください.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | buffer_size | バッファのサイズを指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
デバイスの現在のバッファサイズを取得します.
デバイスのオープン後に,デバイスにおける値を知ることができます.それまでは,単に現在設定されている値を返します.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[out] | buffer_size | 値を受け取る変数のアドレスを指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
オーディオ入出力に使用するバッファの数を設定します.
環境によってはこの値は使用されず,常に関数の呼び出しに失敗します.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | num_buffer | バッファの数を指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
デバイスの現在のバッファの数を取得します.
デバイスのオープン後に,デバイスにおける値を知ることができます.それまでは,単に現在設定されている値を返します.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[out] | num_buffer | 値を受け取る変数のアドレスを指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
オーディオ入力のブロッキングモードを設定します.
ノンブロッキングモードにすると, spReadAudio() や spReadAudioDouble() を呼んだ際に,現在読み込まれている分だけをバッファにコピーします.
デバイスのオープンを行う前に呼んでください.デフォルトはブロックする設定になっています.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | block_mode | モードを指定します. SP_AUDIO_BLOCKING か SP_AUDIO_NONBLOCKING のいずれかを指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
デバイスの現在のブロッキングモードを取得します.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[out] | block_mode | 値を受け取る変数のアドレスを指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
オーディオ入出力に使用するbits/sampleを設定します.
デバイスのオープンを行う前に呼んでください.現在は,16bit,24bit,32bitがサポートされています. 24bitと32bitがサポートされていないデバイスでは,16bitへ変換して再生します.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | samp_bit | bits/sampleを指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
デバイスの現在のbits/sampleを取得します.
デバイスのオープン後に,デバイスにおける値を知ることができます.それまでは,単に現在設定されている値を返します.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[out] | samp_bit | 値を受け取る変数のアドレスを指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
設定されたbits/sampleを取得します. spSetAudioSampleBit() で設定した場合はその値が得られます.デバイスにおける値ではありません.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[out] | specified_samp_bit | 値を受け取る変数のアドレスを指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
|
related |
オーディオ入出力におけるコールバック関数を設定します.
デバイスのオープンを行う前に呼んでください.現在は, SP_AUDIO_OUTPUT_POSITION_CALLBACK と SP_AUDIO_OUTPUT_BUFFER_CALLBACK のみがサポートされています.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | call_type | コールバックタイプを指定します.|を用いて複数のコールバックタイプを指定できます. |
[in] | call_func | コールバック関数を指定します.以下の形( spAudioCallbackFunc )である必要があります. spBool func(spAudio audio, spAudioCallbackType call_type, void *data1, void *data2, void *user_data);
オーディオ入出力を扱うクラスです. int spBool |
[in] | call_data | コールバックユーザーデータを指定します.コールバック関数が呼ばれる際に,第5引数にこの値が入ることになります. |
call_type
と異なることがあります. オーディオデバイスを開きます.
フルデュプレックスで開く場合は,読み込みモードと書き込みモードで1回づつ開いてください. この場合の開く順番は,読み込みモードを先に開くことを推奨します(将来的にはこの制約はなくなる可能性があります). 使用している環境がフルデュプレックスに対応していない場合は,2番目のオープンに失敗します.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | mode | 開くモードのヌル終端文字列を指定します.モードには,読み込みの"r"と,書き込みの"w"があります.環境によっては,読み込みのみを行うモードの"ro"と,書き込みのみを行う"wo"が有効になります. これらを使用した場合,フルデュプレックスは使用できなくなりますが(環境によっては使用できます),音質が向上する場合があります(LinuxのOSSでは顕著な場合がありました). |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
オーディオデバイスを閉じます.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
|
related |
オーディオデバイスからデータを読み込みます.
通常は( spSetAudioBlockingMode() による設定がなければ),読み込みが指定した長さに到達するまでこの関数は返りません.
"r"
(読み込み)モードで呼び出した場合のみに使用して下さい.それ以外の場合の動作は未定義です. [in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | data | データを読み込むバッファを指定します.メモリはあらかじめ確保しておいてください. バッファの型は,デバイスで使用するbits/sampleの値に応じて変えてください.16bitまでの場合はshort型,32bitまではlong型のポインタ(メモリ確保したもの)もしくは配列を使用します. |
[in] | length | バッファの長さ(読み込むブロックの数)を指定します.バッファのサイズではありません.配列で考えると,要素の数に相当します. |
|
related |
オーディオデバイスにデータを書き込みます.
書き込みは非同期で行われるため,指定した長さまで到達する前に関数から返ってきます.どの程度の速さで関数から返ってくるかは,環境によって異なります.
length
が小さいときにこの関数を繰り返し呼ぶと,環境によってはデッドロックに陥ります(応答しなくなります).繰り返し呼ぶ場合は,ある程度の長さになるようにプログラムを組む必要があります.例えば,ループ再生を行う場合などは,ループ区間が短い場合には,length
が極めて小さくなる場合があります.その場合には,ある程度の長さのバッファを用意しておき,バッファの中身が適当な長さに到達したら spWriteAudio() を呼ぶ,といった実装にして下さい. "w"
(書き込み)モードで呼び出した場合のみに使用して下さい.それ以外の場合の動作は未定義です. [in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | data | データの入ったバッファを指定します. バッファの型は,デバイスで使用するbits/sampleの値に応じて変えてください.16bitまでの場合はshort型,32bitまではlong型のポインタ(メモリ確保したもの)もしくは配列を使用します. |
[in] | length | バッファの長さ(読み込むブロックの数)を指定します.バッファのサイズではありません.配列で考えると,要素の数に相当します. |
|
related |
オーディオデバイスからdouble型のバッファにデータを読み込みます.
通常は( spSetAudioBlockingMode() による設定がなければ),読み込みが指定した長さに到達するまでこの関数は返りません.
"r"
(読み込み)モードで呼び出した場合のみに使用して下さい.それ以外の場合の動作は未定義です. [in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | data | データを読み込むdouble型のバッファを指定します.メモリはあらかじめ確保しておいてください. |
[in] | length | バッファの長さ(読み込むブロックの数)を指定します.バッファのサイズではありません.配列で考えると,要素の数に相当します. |
[in] | weight | 読み込み後にデータの振幅値を何倍するかを指定します. |
|
related |
オーディオデバイスからdouble型のバッファにデータを読み込みます.
通常は( spSetAudioBlockingMode() による設定がなければ),読み込みが指定した長さに到達するまでこの関数は返りません.
"r"
(読み込み)モードで呼び出した場合のみに使用して下さい.それ以外の場合の動作は未定義です. [in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | data | データを読み込むdouble型のバッファを指定します.メモリはあらかじめ確保しておいてください. |
[in] | length | バッファの長さ(読み込むブロックの数)を指定します.バッファのサイズではありません.配列で考えると,要素の数に相当します. |
|
related |
オーディオデバイスにdouble型のバッファのデータを書き込みます.
書き込みは非同期で行われるため,指定した長さまで到達する前に関数から返ってきます.どの程度の速さで関数から返ってくるかは,環境によって異なります.
length
が小さいときにこの関数を繰り返し呼ぶと,環境によってはデッドロックに陥ります(応答しなくなります).繰り返し呼ぶ場合は,ある程度の長さになるようにプログラムを組む必要があります.例えば,ループ再生を行う場合などは,ループ区間が短い場合には,length
が極めて小さくなる場合があります.その場合には,ある程度の長さのバッファを用意しておき,バッファの中身が適当な長さに到達したら spWriteAudioDoubleWeighted() を呼ぶ,といった実装にして下さい. "w"
(書き込み)モードで呼び出した場合のみに使用して下さい.それ以外の場合の動作は未定義です. [in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | data | データの入ったdouble型のバッファを指定します. デバイスで使用するbits/sampleの値によらず,データの振幅の範囲は-1.0〜1.0の範囲が想定されています. |
[in] | length | バッファの長さ(読み込むブロックの数)を指定します.バッファのサイズではありません.配列で考えると,要素の数に相当します. |
[in] | weight | 書き込み前にデータの振幅値を何倍してデバイスに渡すかを指定します. |
|
related |
オーディオデバイスにdouble型のバッファのデータを書き込みます.
書き込みは非同期で行われるため,指定した長さまで到達する前に関数から返ってきます.どの程度の速さで関数から返ってくるかは,環境によって異なります.
length
が小さいときにこの関数を繰り返し呼ぶと,環境によってはデッドロックに陥ります(応答しなくなります).繰り返し呼ぶ場合は,ある程度の長さになるようにプログラムを組む必要があります.例えば,ループ再生を行う場合などは,ループ区間が短い場合には,length
が極めて小さくなる場合があります.その場合には,ある程度の長さのバッファを用意しておき,バッファの中身が適当な長さに到達したら spWriteAudioDouble() を呼ぶ,といった実装にして下さい. "w"
(書き込み)モードで呼び出した場合のみに使用して下さい.それ以外の場合の動作は未定義です. [in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[in] | data | データの入ったdouble型のバッファを指定します. デバイスで使用するbits/sampleの値によらず,データの振幅の範囲は-1.0〜1.0の範囲が想定されています. |
[in] | length | バッファの長さ(読み込むブロックの数)を指定します.バッファのサイズではありません.配列で考えると,要素の数に相当します. |
現在の再生位置を取得します.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
[out] | position | 値を受け取る変数のアドレスを指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
オーディオデバイスを停止します.
この関数を呼び出すと,現在の処理を可能な限り即座に停止します.OSによって,若干動作が異なる可能性があります. 環境によっては,一度読み書きを開始すると,内部的に負荷のかかる処理をし続ける場合があります.その場合にも,この関数を呼び出すと負荷が減ります.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
オーディオデバイスをフラッシュします.OSによって,若干動作が異なる可能性があります.
[in] | audio | spInitAudioDriver() もしくは spInitAudio() によって得られた spAudio 型の変数を指定します. |
SP_TRUE | 成功 |
SP_FALSE | 失敗 |
|
related |
spAudio のメモリを解放し,オーディオドライバーの使用を停止します(デストラクター).
これらの関数を呼び出した後,再度オーディオドライバーを使用する場合には, spInitAudioDriver() を呼び出して再初期化します.
[in] | audio | spInitAudioDriver() によって得られた spAudio 型の変数を指定します. |
|
related |
spAudio のメモリを解放し,オーディオドライバーの使用を停止します(デストラクター).
これらの関数を呼び出した後,再度オーディオドライバーを使用する場合には, spInitAudio() を呼び出して再初期化します.
[in] | audio | spInitAudio() によって得られた spAudio 型の変数を指定します. |