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

Delphi 控制波形音訊輸出音量:waveOutSetVolume 雙聲道獨立調節

     編輯:Delphi

前言

開發多媒體播放器時,需獨立控制左/右聲道音量。Windows Multimedia API waveOutSetVolume 以 32 位元整數編碼雙聲道:低 16 位 = 左聲道,高 16 位 = 右聲道,各聲道範圍 0~65535 (0x0000~0xFFFF)。

介面設計

  • 兩個 TTrackBar:TrackBar1 (左聲道)、TrackBar2 (右聲道)。
  • 屬性:Min := 0、Max := 65535、Frequency := 1000 (刻度間距)。
  • 兩者 OnChange 共用同一事件處理函式。

核心程式碼

uses MMSystem;

procedure TForm1.TrackBar1Change(Sender: TObject);
var
  Volume: DWORD;
begin
  { 組合雙聲道:高字組=右聲道,低字組=左聲道 }
  Volume := (DWORD(TrackBar2.Position) shl 16) or DWORD(TrackBar1.Position);
  waveOutSetVolume(0, Volume);  { 0 = 預設波形輸出裝置 }
end;

關鍵點解析

  • waveOutSetVolume(uDeviceID, dwVolume):uDeviceID=0 代表系統預設播放裝置;dwVolume 為雙聲道合成值。
  • 非主音量控制:此 API 僅影響「波形輸出」串流音量,不改變系統主音量。系統主音量需用 IAudioEndpointVolume (Vista+ Core Audio API)。
  • 裝置 ID 列舉:waveOutGetNumDevs 取得裝置數,waveOutGetDevCaps 取得名稱,供使用者選擇特定輸出裝置。

擴充:取得目前音量

procedure TForm1.FormCreate(Sender: TObject);
var
  Vol: DWORD;
begin
  waveOutGetVolume(0, @Vol);
  TrackBar1.Position := Vol and $FFFF;       { 左聲道 }
  TrackBar2.Position := (Vol shr 16) and $FFFF; { 右聲道 }
end;

結語

以 TTrackBar 搭配 waveOutSetVolume 實現雙聲道獨立音量控制,代碼簡潔且即時生效。理解 32 位元雙聲道編碼格式,對後續學習 Core Audio API、音訊串流處理大有裨益。

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