• 首頁
  • 文件
  • 下載
  • 狀態
  • 常見問題
  • 郵件列表
  • 應用程式
  • 外部鏈結
  • 版權
  • 志願者
  • 聯繫

範例程式:音訊轉向

音訊轉向是在兩個不同的音訊設備上,將音訊輸入直接轉到音訊輸出。使用這個功能時,麥克風與擴音喇叭的距離最好保持相當程 度,否則會造成增益迴響。

要使用轉向功能,必須在您的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                                                                   ;
}