程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 使用Delphi開發多媒體播放音軌問題的FAQ

使用Delphi開發多媒體播放音軌問題的FAQ

編輯:Delphi
最近一段時間,在CSDN和DFW上常看見問於切換音軌和切換聲道的問題。在這做一個小結。大家可以轉載。讓菜鳥收益! 轉載時,作者希望在最大程度上保持原有信息!
  
  1、什麼是聲(音)軌、聲道?
  在早先的VCD時代,一個媒體文件只有一個音軌。故“音軌”一詞不常被人們提及。VCD媒體文件中的伴唱或原唱,只有通過切換左右聲道來實現。
  音軌是隨著DVD而來的“產物”。在DVD(MPEG2格式)媒體文件中,一個音軌來記錄一個語種(在VOD中常說的“原唱”和“伴唱”)。
  
  2、如何切換音軌?
  在這裡,我推薦使用“Morgan Stream Switcher”Filter。
  
  音軌的切換,一般是使用Filter上實現的IAMStreamSelect接口中的Enable方法。
  例:
    var
      obj: IAMStreamSelect;
    begin
      if Filter.QueryInterface(IID_IAMStreamSelect, obj) = S_OK then
      begin
        obj.Enable(Index{音軌}, AMSTREAMSELECTENABLE_ENABLE);
        obj := nil;
      end;
    end;
  
  3、如果切換聲道?
  切換聲道,需要獲取Audio Renderer Filter上的IBasicAudio接口(提示:神龍卡的IBasicAudio接口在hardware decoder Filter上獲取)。
  使用該接口的put_Balance方法即可實現切換聲道。
      傳入值說明:-10000 ---  右聲道
                   10000  ---  左聲道
                       0  ---  立體聲
  
  4、如何知道媒體文件的音軌數?
  
  一般來說,在播放媒體文件時,都需要File Source -> Splitter.
  視Splitter Filter不同。獲取的方法了也不盡相同。
  比如,有一些MPEG的Splitter,有幾個音軌,就會創建幾個Audio Output Pin.這種情況,你可以取得該Splitter Filter上的Audio Output Pin的數量(就是音軌數量)還有一些MPEG的Splitter,不論有多少音軌,只會輸出一個Audio Output Pin.這種情況,該Splitter上已經實現了IAMStreamSelect接口。調用該接口上的Count方法即可獲得音軌數量。
  
  5、引出的問題
  在切換聲道之後,只有一個音箱發聲。推薦使用“TBalncer 音頻聲道均衡控件”。
  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved