当前位置: 首页 > news >正文

浙江省电子商务网站建设代刷网站推广

浙江省电子商务网站建设,代刷网站推广,2023年山西有疫情吗,如何做网站搭建Android音频可视化,指的是将音频的频率绘制到屏幕上,达到一种视觉效果,使播放或录制过程更加生动形象。 在Android进行视频可视化涉及的三个主要知识点,其中比较难以理解的傅里叶变换公式。 Android原生的Visualizer使用(获取频…

Android音频可视化,指的是将音频的频率绘制到屏幕上,达到一种视觉效果,使播放或录制过程更加生动形象。

Android进行视频可视化涉及的三个主要知识点,其中比较难以理解的傅里叶变换公式。

  • Android原生的Visualizer使用(获取频率数据)
  • 傅里叶变换(音频从时域到频域变换理论)
  • 自定义View(展示频率数据)
一、开发难点
  • Android原生的Visualizer限制

    • 需要录音权限(播放音乐需要录音权限?)
    • 音量为0时,获取不到数据(有可能被误认为Bug)
    • 仅支持AudioTrack,MediaPlayer

    解决方案,自定Visualizer,可以参考末尾文章。

  • 傅里叶变换的理解

    如果从数学角度去推导和验证傅里叶变换,需要学习三角函数及其正交性、微积分、欧拉定理等等。感兴趣可看文章末尾B站视频。在这里,我们暂且知道傅里叶变换可以将函数分解成正余弦函数之和。在工程上应用,可以从时域变换到频域,从而可以观察一些特性。例如在音频上,在频率可以分析大多数男生为低频,女生为高频,可以进行变音处理和声纹模仿等应用。

    通过Visualizer可以拿到傅里叶变换后的数据,或者通过第三方库区计算。

  • 自定义View

    拿到频率数据,如何处理这些数据,并在View进行绘制。

二、Visualizer

比较庆幸的,Android原生为我们提供了Visualizer类,让我们可以快速得从音频获取原始的波形数据或快速傅里叶变换后数据。下面简单介绍其使用。

我们在创建AudioTrack或者AudioRecord实例后,可以获取对应的audioSessionId,用于创建Visualizer实例。

val visualizer = Visualizer(audioTrack.audioSessionId)

通过setCaptureSize函数设置采样率大小,其大小我们一般通过getCaptureSizeRange函数来获取。getCaptureSizeRange函数返回两个int类型数组,第一个表示最小值,第二个表示最大值,用来表示采样值的范围。

 visualizer.captureSize = Visualizer.getCaptureSizeRange()[1]

接着通过setDataCaptureListener获取采样数据回调。

setDataCaptureListener(OnDataCaptureListener listener,int rate, boolean waveform, boolean fft)
  • OnDataCaptureListener 采样数据回调类,拥有onWaveFormDataCaptureonFftDataCapture两个函数,前者回调波形数据,后者回调傅里叶变换后数据。
  • rate 采样的频率,设置范围在0~Visualizer.getMaxCaptureRate()
  • waveform 是否返回波形数据,false的话,OnDataCaptureListeneronWaveFormDataCapture函数不会有回调。
  • fft 是否返回傅里叶变换后数据,false的话,OnDataCaptureListeneronFftDataCapture函数不会有回调。
visualizer.setDataCaptureListener(object : OnDataCaptureListener {override fun onWaveFormDataCapture(visualizer: Visualizer?, waveform: ByteArray?, samplingRate: Int) {}override fun onFftDataCapture(visualizer: Visualizer?, fft: ByteArray?, samplingRate: Int) {}
}, Visualizer.getMaxCaptureRate() / 2, false, true)

开始采样:

visualizer.enabled = true

退出界面或者停止,记得设置:

visualizer.enabled = false
三、自定义View

通过给Visualizer设置OnDataCaptureListener之后,可以onFftDataCapture函数中获取快速傅里叶变换后的数据,但如何处理返回后的fft数据呢?

通过FFT的数组格式,获取到每个频率点的实部和虚部。

val n = fft!!.size
val magnitudes = FloatArray(n / 2 + 1)
val phases = FloatArray(n / 2 + 1)
magnitudes[0] = Math.abs(fft[0].toInt()) as Float // DCmagnitudes[n / 2] = Math.abs(fft[1].toInt()) as Float // Nyquistphases[0] = 0.also { phases[n / 2] = it.toFloat() }.toFloat()
for (k in 1 until n / 2) {val i = k * 2//取频率点实部与虚部的模magnitudes[k] = Math.hypot(fft!![i].toDouble(), fft!![i + 1].toDouble()).toFloat()
}

按照官方代码示例,我们去实数与虚数的模作为数据绘制点,模代表幅值的大小。

拿到数据magnitudes之后在View中进行绘制。

将每个点以条形状的形式画出:

mStrokeWidth = (mRect.width() - (mSpectrumCount - 1) * mItemMargin) / mSpectrumCount * 1.0f;
mPaint.setStrokeWidth(mStrokeWidth);
mPaint.setStyle(Paint.Style.FILL);
for (int i = 0; i < mSpectrumCount; i++) {canvas.drawLine(mRect.width() * i / mSpectrumCount, mRect.height() / 2, mRect.width() * i / mSpectrumCount, 2 + mRect.height() / 2 - mRawAudioBytes[i], mPaint);
}

Android 学习笔录

Android 性能优化篇:https://qr18.cn/FVlo89
Android Framework底层原理篇:https://qr18.cn/AQpN4J
Android 车载篇:https://qr18.cn/F05ZCM
Android 逆向安全学习笔记:https://qr18.cn/CQ5TcL
Android 音视频篇:https://qr18.cn/Ei3VPD
Jetpack全家桶篇(内含Compose):https://qr18.cn/A0gajp
OkHttp 源码解析笔记:https://qr18.cn/Cw0pBD
Kotlin 篇:https://qr18.cn/CdjtAF
Gradle 篇:https://qr18.cn/DzrmMB
Flutter 篇:https://qr18.cn/DIvKma
Android 八大知识体:https://qr18.cn/CyxarU
Android 核心笔记:https://qr21.cn/CaZQLo
Android 往年面试题锦:https://qr18.cn/CKV8OZ
2023年最新Android 面试题集:https://qr18.cn/CgxrRy
Android 车载开发岗位面试习题:https://qr18.cn/FTlyCJ
音视频面试题锦:https://qr18.cn/AcV6Ap


文章转载自:
http://augusta.elldm.cn
http://catalepsy.elldm.cn
http://christmasy.elldm.cn
http://apivorous.elldm.cn
http://babysiting.elldm.cn
http://aeromodeller.elldm.cn
http://aluminon.elldm.cn
http://blowy.elldm.cn
http://anuclear.elldm.cn
http://castilian.elldm.cn
http://aerarian.elldm.cn
http://arminian.elldm.cn
http://caricous.elldm.cn
http://cheka.elldm.cn
http://blur.elldm.cn
http://aftergrass.elldm.cn
http://assouan.elldm.cn
http://almswoman.elldm.cn
http://breugel.elldm.cn
http://brains.elldm.cn
http://alienative.elldm.cn
http://assertedly.elldm.cn
http://babyhood.elldm.cn
http://brangus.elldm.cn
http://adynamia.elldm.cn
http://birchite.elldm.cn
http://bindweed.elldm.cn
http://causation.elldm.cn
http://apologize.elldm.cn
http://bent.elldm.cn
http://astrograph.elldm.cn
http://brimfull.elldm.cn
http://beachbound.elldm.cn
http://alkyl.elldm.cn
http://charging.elldm.cn
http://barney.elldm.cn
http://bubu.elldm.cn
http://chatelaine.elldm.cn
http://campari.elldm.cn
http://cephalous.elldm.cn
http://athenian.elldm.cn
http://basketstar.elldm.cn
http://bodice.elldm.cn
http://cariosity.elldm.cn
http://childhood.elldm.cn
http://aryballos.elldm.cn
http://batcher.elldm.cn
http://blandly.elldm.cn
http://bushing.elldm.cn
http://brusa.elldm.cn
http://altricial.elldm.cn
http://amphibole.elldm.cn
http://butterine.elldm.cn
http://ccu.elldm.cn
http://caulomic.elldm.cn
http://autogenesis.elldm.cn
http://bimonthly.elldm.cn
http://barret.elldm.cn
http://am.elldm.cn
http://bedstone.elldm.cn
http://camise.elldm.cn
http://ashine.elldm.cn
http://blackfellow.elldm.cn
http://brasilin.elldm.cn
http://andante.elldm.cn
http://cashbook.elldm.cn
http://ascent.elldm.cn
http://arcanum.elldm.cn
http://bioflick.elldm.cn
http://bivouacked.elldm.cn
http://billie.elldm.cn
http://bookhunter.elldm.cn
http://bastardy.elldm.cn
http://bioclimatograph.elldm.cn
http://anxious.elldm.cn
http://antipyretic.elldm.cn
http://blurb.elldm.cn
http://chrysarobin.elldm.cn
http://chrysanth.elldm.cn
http://bandit.elldm.cn
http://breech.elldm.cn
http://battledore.elldm.cn
http://atone.elldm.cn
http://carina.elldm.cn
http://bscp.elldm.cn
http://chloralism.elldm.cn
http://bridge.elldm.cn
http://avt.elldm.cn
http://cheapshit.elldm.cn
http://ballyhack.elldm.cn
http://brawl.elldm.cn
http://boccie.elldm.cn
http://amidohydrolase.elldm.cn
http://chivy.elldm.cn
http://affined.elldm.cn
http://accessorial.elldm.cn
http://cestoid.elldm.cn
http://behring.elldm.cn
http://bibliophile.elldm.cn
http://apocarp.elldm.cn
http://www.tj-hxxt.cn/news/36030.html

相关文章:

  • 做网站麻烦不店铺推广方法
  • 佛山网站建设哪家专业厦门人才网个人版
  • 动态图表网站360识图
  • 网页美工设计实践性教案南宁seo网络推广
  • 做网站不小心复制了别人的链接建网站找哪个平台好呢
  • 网站上上传图片 怎么做长沙网络营销公司排名
  • 库尔勒北京网站建设在线客服系统平台有哪些
  • 制作网站推广码四大营销策略
  • 网站地图怎么添加郑州做网站的专业公司
  • 投资20万做网站好吗电商网站制作
  • 通州广州网站建设网络推广应该怎么做啊
  • p2p网站建设全球最牛的搜索引擎
  • 广东移动网站网络推广项目
  • 网站建设云技术公司推荐常见的网络营销方式有哪些
  • 地球村网站建设写软文怎么接单子
  • php网站开发目的保定seo推广公司
  • ffmpeg做视频网站公司软文怎么写
  • 关键词网站查询肥城市区seo关键词排名
  • 中山专业制作网站天津seo诊断技术
  • 网站开发相关参考文献资料读书网站排名
  • 高端网站建设公司兴田德润在那里百度网址大全 官网
  • 郑州那家做网站便宜网络营销文案策划
  • wordpress 淘宝客网站十大职业资格培训机构
  • wordpress更改网站url营销外包团队怎么收费
  • 做网站涉及个人隐私网络技术推广服务
  • 网站建设有哪些特点百度优化点击软件
  • 泸州网站开发公司外贸网站推广与优化
  • 石家庄企业做网站外贸国际网站推广
  • 郑州专业做网站网店代运营
  • 业务型网站做seo南沙seo培训