DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: senqicai
今日帖子: 2
在线用户: 12
导航: 论坛 -> 移动应用开发 斑竹:flyers,iamdream  
作者:
男 vga (vga) ★☆☆☆☆ -
盒子活跃会员
2021/3/31 8:28:50
标题:
Firemonkey 怎样用 AudioTrack 播放 pcm 音频数据呀? 浏览:1946
加入我的收藏
楼主: Android 可以用AudioTrack 播放 pcm 音频数据,Firemonkey 能做到吗?
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2021/3/31 10:03:29
1楼: windows 可以用AudioTrack 播放 pcm 音频数据,Firemonkey 能做到吗?
好像这么问没区别
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 vga (vga) ★☆☆☆☆ -
盒子活跃会员
2021/3/31 10:39:36
2楼: 没错, Firemonkey在windows下可以播放 pcm 音频数据,但Android下...
----------------------------------------------
-
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2021/3/31 12:11:08
3楼: 不是有java的嘛,去刨一个不就好了.
如果实在是不想刨,bass 音频库还是首选、
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 pspice (pspice) ★☆☆☆☆ -
普通会员
2021/4/2 16:24:11
4楼: 有一段用 C++ Builder Fmx实现的代码,实测好用,仅供参考

void AndroidSound(double freqHz, int durationMs)
{
  double Pi = 3.14159265358979323846;
  int count = (int)(44100.0 * 2.0 * (durationMs / 1000.0)) & ~1;
  TJavaArray__1<short>* samples = new TJavaArray__1<short>(count);
  for(int i = 0; i < count; i += 2)
  {
    short sample = (short)(Sin(2 * Pi * i / (44100.0 / freqHz)) * 0x7FFF);
    samples->Items[i + 0] = sample;
    samples->Items[i + 1] = sample;
  }

  _di_JAudioTrack audioTrack;
  audioTrack = TJAudioTrack::JavaClass->init(TJAudioManager::JavaClass->STREAM_MUSIC,
    44100, TJAudioFormat::JavaClass->CHANNEL_CONFIGURATION_MONO,
    TJAudioFormat::JavaClass->ENCODING_PCM_16BIT, count * (sizeof(TJavaArray__1<short>) / 8),
    TJAudioTrack::JavaClass->MODE_STATIC);
  if(audioTrack->write((TJavaArray__1<short>*)samples, 0, count)) audioTrack->play();
  delete samples;
}
----------------------------------------------
-
作者:
男 vga (vga) ★☆☆☆☆ -
盒子活跃会员
2021/4/3 9:50:37
5楼: 多谢 pspice (pspice) 大神!
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2021/4/6 15:24:03
6楼: 大神可否翻译为delphi?
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2021/4/6 18:15:59
7楼: 我来为难一下大神。
大神,不要给他翻译。
大神一看是我,不听,非要给楼上翻译。
其实我心里想的是,我也想大神翻译一下。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 pspice (pspice) ★☆☆☆☆ -
普通会员
2021/4/7 10:07:26
8楼: 惭愧,我可不是大神。Delphi语法我都不熟悉,勉强翻译了一下,测试通过,供参考:

unit AudioTrack;

interface

  procedure AndroidSound( freqHz : Double; durationMs : integer);

implementation

uses
  Androidapi.JNIBridge,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNI.Media;


procedure AndroidSound( freqHz : Double; durationMs : integer);
var
  Pi         : Double;
  count      : integer;
  sample     : SmallInt;
  audioTrack : JAudioTrack;
  samples    : TJavaArray<SmallInt>;
  i          : integer;
begin
  Pi := 3.14159265358979323846;
  count := Round(44100.0 * 2.0 * (durationMs / 1000.0));
  samples := TJavaArray<SmallInt>.Create(count);

  i := 0;
  while (i < count) do
  begin
    sample := Round(Sin(2 * Pi * i / (44100.0 / freqHz)) * $7FFF);
    samples.Items[i + 0] := sample;
    samples.Items[i + 1] := sample;
    i := i+2;
  end;

  audioTrack := TJAudioTrack.JavaClass.init(TJAudioManager.JavaClass.STREAM_MUSIC,
          44100,
          TJAudioFormat.JavaClass.CHANNEL_CONFIGURATION_MONO,
          TJAudioFormat.JavaClass.ENCODING_PCM_16BIT,
          samples.Length div 4,
          TJAudioTrack.JavaClass.MODE_STATIC);
  audioTrack.write(samples, 0, count);
  audioTrack.play();
end;

end.
此帖子包含附件:pspice_20214710726.rar 大小:652B
----------------------------------------------
-
作者:
男 pspice (pspice) ★☆☆☆☆ -
普通会员
2021/4/7 10:25:42
9楼: @wang_80919 (Flying Wang) 请问www.2pascal.com登录的时候图片验证码不出现是浏览器的问题吗?我用IE和Chrome登录都有这个问题。想去这个帖子下载你的JarOrClass2Pas工具。http://www.2pascal.com/forum.php?mod=viewthread&tid=891&fromuid=4
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2021/4/8 8:51:11
10楼: 谢谢了,主要是不明白泛型在C++是如何表述的
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行93.75毫秒 RSS