首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 使用 Bass.dll 獲取音頻輸出設備列表:BASS_GetDeviceInfo 實作與 Unicode 兼容

     編輯:Delphi

前言

在多音頻設備環境下(如同時擁有內建聲卡、USB 耳機、HDMI 輸出),讓使用者選擇輸出設備是播放器的基本功能。Bass.dll 提供 BASS_GetDeviceInfo 遍歷系統音頻設備。本文示範 Delphi 實現,並特別說明 Delphi 2009+ Unicode 版本中 BASS_DEVICEINFO 結構體的修正要點。

Unicode 版本結構體修正

Delphi 2009 起預設字串為 Unicode,原 bass.pas 中 BASS_DEVICEINFO 定義為 PChar 會導致設備名稱顯示亂碼。需修改為 PAnsiChar:

{原定義}
BASS_DEVICEINFO = record
  name: PChar;      // description
  driver: PChar;    // driver
  flags: DWORD;
end;

{修正為}
BASS_DEVICEINFO = record
  name: PAnsiChar;  // description
  driver: PAnsiChar; // driver
  flags: DWORD;
end;

關鍵代碼實現

1. 表單建立:初始化與介面準備

procedure TForm1.FormCreate(Sender: TObject);
begin
  if HiWord(BASS_GetVersion) <> BASSVERSION then
    MessageBox(0, 'Bass.dll 版本不符!', nil, MB_ICONERROR);
  ListBox1.Align := alTop;
  Button1.Caption := '獲取當前音頻輸出設備列表';
end;

2. 按鈕點擊:遍歷設備並填充 ListBox

procedure TForm1.Button1Click(Sender: TObject);
var
  info: BASS_DEVICEINFO;
  i: Integer;
begin
  i := 1; {設備索引從 1 開始}
  while BASS_GetDeviceInfo(i, info) do begin
    {info.name 為 PAnsiChar,轉為 UnicodeString 顯示}
    ListBox1.Items.Add(string(info.name));
    Inc(i);
  end;
end;

運行效果

點擊按鈕後,ListBox 列出所有可用音頻輸出設備描述(如「Realtek High Definition Audio」、「USB Audio Device」等)。

設備列表獲取效果

完整單元代碼

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses Bass;

{ ... 完整實現代碼 ... }

end.

進階應用:指定設備初始化

獲取設備列表後,可將使用者選擇的索引傳給 BASS_Init:

var
  deviceIndex: Integer;
begin
  deviceIndex := ListBox1.ItemIndex + 1; {ItemIndex 從 0 開始}
  if not BASS_Init(deviceIndex, 44100, 0, 0, nil) then
    ShowMessage('指定設備初始化失敗');
end;

BASS_DEVICEINFO 旗標說明

旗標含義
BASS_DEVICE_ENABLED設備啟用
BASS_DEVICE_DEFAULT系統預設設備
BASS_DEVICE_INIT設備已初始化
BASS_DEVICE_TYPE_MASK設備類型掩碼(結合 BASS_DEVICE_TYPE_* 判斷)

總結

修正 BASS_DEVICEINFO 結構體為 PAnsiChar 是 Delphi Unicode 版本使用 Bass.dll 的關鍵細節。配合 BASS_GetDeviceInfo 遍歷,即可輕鬆實現音頻設備選擇功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved