效果展示

核心流程
BASS_Init 初始化音訊裝置
BASS_StreamCreateFile 載入 MP3/WAV 獲取 HSTREAM
BASS_ChannelPlay 開始播放
Timer 30ms 週期觸發:
BASS_ChannelGetData(hs, @FFTData, BASS_DATA_FFT1024); // 取得 512 點 FFT
// 繪製到離屏 Bitmap
bit.Canvas.FillRect(...); // 清背景
for i := 0 to 511 do begin
di := Trunc(Abs(FFTData[i]) * 500); // 縮放振幅
// 峰值保持與下落邏輯
if di >= FFTPeacks[i] then FFTPeacks[i] := di else Dec(FFTPeacks[i]);
if di >= FFTFallOff[i] then FFTFallOff[i] := di else FFTFallOff[i] := FFTFallOff[i] - 3;
// 畫頻譜柱 + 峰值線
bit.Canvas.Rectangle(i*(w+1), bit.Height-FFTFallOff[i], i*(w+1)+w, bit.Height);
bit.Canvas.MoveTo(i*(w+1), bit.Height-FFTPeacks[i]);
bit.Canvas.LineTo(i*(w+1)+w, bit.Height-FFTPeacks[i]);
end;
BitBlt(PaintBox1.Canvas.Handle, 0,0, w,h, bit.Canvas.Handle, 0,0, SRCCOPY);
關鍵點
BASS_DATA_FFT1024 返回 512 個 Single 頻域係數
- 離屏
TBitmap + BitBlt 雙緩衝無閃爍
- 峰值保持 (
FFTPeacks) 與平滑下落 (FFTFallOff) 增強視覺效果
- 需
Bass.dll 放置於輸出目錄或系統路徑