zoukankan      html  css  js  c++  java
  • 用Fmx调用Bass.dll

    先上图

    帮亲戚做个小软件,选用FMX,因为画面不会像vcl那样在图片多的时候闪烁。还能添加动画

    但是MediaPlayer播放音乐视频真是不给力,视频没想到好办法。音频方面想到之前万一的Bass.ll的教程

    尝试用FMX做下试试

    结果发现Bass也是跨开台,Github上有个老外做了个收音机

    下面是从万一博客上拷贝的代码,按照fmx的稍做了点修改

    begin
    
      if not OpenDialog1.Execute then
        Exit;
    
      BASS_StreamFree(hs);
    
      hs := BASS_StreamCreateFile(False, PChar(OpenDialog1.FileName), 0, 0, BASS_UNICODE);
      if hs < BASS_ERROR_ENDED then
      begin
        Caption := '打开失败:' + hs.tostring;
      end
      else
        Caption :=OpenDialog1.FileName;
    end

    这个是打开文件,新版的支持UNICODE

    const
      w = 8;
    var
      i,di: Integer;
    begin
      if BASS_ChannelIsActive(hs) <> BASS_ACTIVE_PLAYING then Exit;
    
      BASS_ChannelGetData(hs, @FFTData, BASS_DATA_FFT1024);
    
      Image1.Bitmap.SetSize(Round(Image1.Width),Round(Image1.Height));
      Image1.Bitmap.Canvas.BeginScene;
      Image1.Bitmap.Canvas.Clear(talphacolors.Black);
    
      for i := 0 to Length(FFTData) - 1 do
      begin
        di := Trunc(Abs(FFTData[i]) * 500);
    
        if di > Image1.Height then di := Round(Image1.Height);
        if di >= FFTPeacks[i] then FFTPeacks[i] := di else FFTPeacks[i] := FFTPeacks[i] - 1;
        if di >= FFTFallOff[i] then FFTFallOff[i] := di else FFTFallOff[i] := FFTFallOff[i] - 3;
        if (Image1.Height - FFTPeacks[i]) > Image1.Height then FFTPeacks[i] := 0;
        if (Image1.Height - FFTFallOff[i]) > Image1.Height then FFTFallOff[i] := 0;
    
        with Image1.Bitmap.Canvas do
        begin
          Fill.Color :=talphacolors.red;
          FillRect(RectF(i * (w + 1), Image1.Height - FFTFallOff[i], i * (w + 1) + w, Image1.Height),0,0,AllCorners, 100);
        end;
    
      end;
      Image1.Bitmap.Canvas.EndScene;
    end;

    这个是绘制波形的,其他函数直接copy万一博客的代码就可以用

    酒肉穿肠过 佛祖心中留 世人若学我 如同入魔道
  • 相关阅读:
    ansible4:playbook介绍及使用
    ansible3:模块介绍
    Rabin加密算法
    基础业务:图片懒加载
    基础业务:滚动到指定位置导航固定(CSS实现)
    数据库事务处理的并发控制技术(二):事务模型
    详解HTTP缓存
    数据库事务处理的并发控制技术(一):并发控制概述
    二叉树的深度优先遍历和广度优先遍历
    Virtual DOM的简单实现
  • 原文地址:https://www.cnblogs.com/jspdelphi/p/5897839.html
Copyright © 2011-2022 走看看