範例程式:音訊轉向
音訊轉向是在兩個不同的音訊設備上,將音訊輸入直接轉到音訊輸出。使用這個功能時,麥克風與擴音喇叭的距離最好保持相當程 度,否則會造成增益迴響。要使用轉向功能,必須在您的C++編譯設定上增加以下定義:
CAUTILITIES
- C++編譯器:-DCAUTILITIES
- Qt:DEFINES += CAUTILITIES
函式
bool Redirect (int milliseconds = -1 ,
int samplerate = 44100 ,
int channels = 1 ,
int inputDevice = -1 ,
int outputDevice = -1 ,
int latency = 10 ,
Debugger * debugger = NULL ) ;
參數說明
參數名稱 |
作用 |
milliseconds | 音訊轉向總時間,milliseconds以後停止音訊轉向。 如果milliseconds小於或等於0,則永遠不停止音訊轉向。 |
samplerate |
取樣頻率。 |
channels |
聲道數量,並非所有的聲道數量都是支援的。 |
inputDevice |
音訊輸入設備編號,必須是實際的麥克風或網路音訊設備。 |
outputDevice |
音訊輸出設備編號,必須是實際的麥克風或網路音訊設備。 |
latency |
輸入到輸出的延遲時間。 音訊輸入基本上是先儲存到緩衝區,然後才由音訊輸出設備讀取以後播放。 這個參數設定音訊輸入設備啟動的時間與音訊輸出設備啟動的時間的差值。 |
debugger |
除錯物件。一般使用者不想要除錯的話,僅需給予NULL參數即可。 |
CaPlay當中的範例
int Diversion(int argc,char ** argv)
{
int ms = -1 ;
int id = -1 ;
int od = -1 ;
int i = 2 ;
int samplerate = 8000 ;
int channels = 1 ;
int latency = 10 ;
Debugger * debugger = NULL ;
////////////////////////////////////////////////////////////////////////////
while ( i < argc ) {
if ( 0 == strcmp(argv[i],"--time") ) {
i++ ;
ms = atoi(argv[i]) ;
i++ ;
} else
if ( 0 == strcmp(argv[i],"--samplerate") ) {
i++ ;
samplerate = atoi(argv[i]) ;
i++ ;
} else
if ( 0 == strcmp(argv[i],"--channels") ) {
i++ ;
channels = atoi(argv[i]) ;
i++ ;
} else
if ( 0 == strcmp(argv[i],"--latency") ) {
i++ ;
latency = atoi(argv[i]) ;
i++ ;
} else
if ( 0 == strcmp(argv[i],"--output") ) {
i++ ;
od = atoi(argv[i]) ;
i++ ;
} else
if ( 0 == strcmp(argv[i],"--input") ) {
i++ ;
id = atoi(argv[i]) ;
i++ ;
} else
if ( 0 == strcmp(argv[i],"--debug" ) ) {
if ( NULL == debugger ) {
debugger = new Debugger ( ) ;
} ;
i++ ;
} ;
i++ ;
} ;
////////////////////////////////////////////////////////////////////////////
if (Redirect(ms,samplerate,channels,id,od,latency,debugger)) {
if ( NULL != debugger ) delete debugger ;
return 1 ;
} ;
if ( NULL != debugger ) delete debugger ;
////////////////////////////////////////////////////////////////////////////
return 0 ;
}