Android Visualizer 不能捕捉FFT数据(Nexus 5 Android 6.0.1)

我正在使用android.media.audiofx.Visualizer捕捉Android设备从扬声器播放的声音的FFT数据,下面是我的代码:

mVisualizer = new Visualizer(0);
mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
mCaptureRate = Visualizer.getMaxCaptureRate();

mVisualizer.setDataCaptureListener(new Visualizer.OnDataCaptureListener() {

    public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) {}

    public void onFftDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) {
        // 捕获FFT数据
    }

}, mCaptureRate, false, true);

大部分情况下,这段代码是好用的。我能够读取到大部分视频和音频播放器播放出来的声音的FFT数据。

但是,使用Nexus 5 Android 6.0.1时,代码出现了问题,只能捕捉部分播放器播放出来的声音了,比如“网易云音乐”,其他播放器播放出来的声音都捕捉不到!

有人遇到过这样的问题吗?是什么原因造成的?如何解决?

0

2个回答

1

WSW中文分词解决方案 http://www.fly-software.com:84/

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android代码-Audio Visualizer
Chart and Graph Library for Android Project maintainer wanted! For time reasons I can not continue to maintain GraphView. Contact me if you are interested and serious about this project. What is GraphView GraphView is a library for Android to programmatically create flexible and nice-looking diagrams. It is easy to understand, to integrate and to customize. Supported graph types: Line Graphs Bar Graphs Point Graphs or implement your own custom types. Top Features Line Chart, Bar Chart, P
Android中Visualizer的使用
在用Visualizer来对音频画波的时候,通过设置setCaptureSize,导致截取的byte数组的大小是一个固定值,那如何判断所截取的byte数组是最后一个呢?rnPS:想要的操作是获得整个音频文件的波形的byte数组值,但是Visualizer只能定义了大小分批处理,所以,必须要判断所截取的是不是最后一个byte数组。
android 6.0.1 系统默认音量
AudioSystem.java DEFAULT_STREAM_VOLUME AudioService,java MAX_STREAM_VOLUME MIN_STREAM_VOLUME
android 6.0.1 充电提示音
6.0的充电提示音现在看来是无线充电的充电提示音,插入电源或usb进行充电,目前代码中并未有相关插入充电提示音的代码 移除无线充电提示音设置项,以免误认为是插入充电的提示音 OtherSoundSettings.java
Network Visualizer 5
ed2k://|file|RouterSim%20Network%20Visualizer%20CCNA%205.0%20(cracked).rar|42162265|C050CE37F7E61B7BEC79EA48ED0B2262|h=YZDT6Z24OPWYZ2JUD72BFMJRLLXVPL6G|/
编译Android内核 For nexus 5 以及绕过Android的反调试
前面的博客中已经记录了Nexus 5手机的Android 4.4.4 r1源码的编译基于ubuntu14.04.5,后面来学习一下Android内核源码的编译基于Nexus 5手机。 一、Android内核源码的下载 有关Android内核源码的下载信息可以参考谷歌官网的地址https://source.android.com/source/building-kernels.html#
android Visualizer画频谱,得到的数据是空数据
代码如下,手机和pad上的代码是没什么问题,但android 机顶盒上Visualizer 得到的都是空数据rnrnclass VisualizerView extends View rn rn private byte[] mBytes; rn private float[] mPoints; rn private Rect mRect = new Rect(); rnrn private Paint mForePaint = new Paint(); rn private int mSpectrumNum = 8; rn rn rnrn private Visualizer mVisualizer = null;rnrn rn @SuppressWarnings("unused")rn private int accompanySessionId = 0;rn rn private MediaPlayer mMediaPlayer = null;rn rn private float width = 0;//屏幕宽度rn rnrn public VisualizerView(Context context,AttributeSet attrs) rn rn super(context, attrs); rn rn rn public VisualizerView(Context context) rn rn super(context); rn rn rn public void initVisualizerView(MediaPlayer mMediaPlayer)rn rn if(this.mMediaPlayer == null)rn this.mMediaPlayer = mMediaPlayer;rn rn rn init();rn rn initView();rn rn rn public void release()rn rn mVisualizer.release();rn rn rn rn public void setAccompanySessionId(int id)rn rn accompanySessionId = id;rn rn rn @SuppressLint("NewApi")rn public void setVisualizerEnable(boolean able)rn rn mVisualizer.setEnabled(able);rn rn rn rn public void setMediaPlayer(MediaPlayer mMediaPlayer)rn rn rn this.mMediaPlayer = mMediaPlayer;rn rn rn @SuppressLint("NewApi")rn private void initView()rn rn final int maxCR = Visualizer.getMaxCaptureRate(); rn rn mVisualizer = new Visualizer(mMediaPlayer.getAudioSessionId());rn mVisualizer.setCaptureSize(256); rn //mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);rn mVisualizer.setDataCaptureListener( rn new Visualizer.OnDataCaptureListener() rn rn public void onWaveFormDataCapture(Visualizer visualizer, rn byte[] bytes, int samplingRate) rn rn rn rn updateVisualizer(bytes); rn rn rn rn public void onFftDataCapture(Visualizer visualizer, rn byte[] fft, int samplingRate) rn rn rn Log.d("valuestest", "fft = "+ fft.length);rn Log.d("valuestest", "testfft = "+fft[5]);rn //这边的fft在机顶盒上数据始终为0,导致波形出不来rn rn updateVisualizer(fft); rn rn , maxCR / 2, false, true); rn rn rn rnrn rn @SuppressWarnings("deprecation")rn private void init() rn rn mBytes = null; rn rn WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);rn rn width = wm.getDefaultDisplay().getWidth();rnrn mForePaint.setStrokeWidth(width/mSpectrumNum);rn mForePaint.setAntiAlias(true); rn mForePaint.setColor(Color.rgb(0, 0, 255)); rn rn rnrn public void updateVisualizer(byte[] fft) rn rn rn byte[] model = new byte[fft.length / 2 + 1]; rnrn model[0] = (byte) Math.abs(fft[0]); rn for (int i = 2, j = 1; j < mSpectrumNum;) rn rn model[j] = (byte) Math.hypot(fft[i], fft[i + 1]); rn i += 2; rn j++; rn rn mBytes = model; rn rn invalidate(); rn rn rnrn @Override rn protected void onDraw(Canvas canvas) rn rn super.onDraw(canvas); rnrn if (mBytes == null) rn rn return; rn rnrn if (mPoints == null || mPoints.length < mBytes.length * 4) rn rn mPoints = new float[mBytes.length * 4]; rn rn rn mRect.set(0, 0, getWidth(), getHeight()); rnrn rn //绘制频谱 rn final int baseX = mRect.width()/mSpectrumNum; rn final int height = mRect.height(); rn rn rn Log.d("baseX","baseX = "+baseX);rn Log.d("height","height = "+height);rn rn for (int i = 0; i < mSpectrumNum ; i++) rn rn if (mBytes[i] < 0) rn rn mBytes[i] = 127; rn rn rn final int xi = baseX + baseX/2; rn rn mPoints[i * 4] = xi; rn rn mPoints[i * 4 + 1] = height; rn rn mPoints[i * 4 + 2] = xi; rn rn mPoints[i * 4 + 3] = height - mBytes[i]; rn rn rnrn canvas.drawLines(mPoints, mForePaint); rn rn rnrn rnrn得到的是空数据,波形出不来,程序不会奔溃,求大神指教!rnrnrnrn
Android捕捉未捕捉的异常
个人笔记/** * Created by jian on 2017/7/11. */public class CrashHandler implements Thread.UncaughtExceptionHandler { private static CrashHandler instance = null; private Thread.UncaughtExceptionH
Android Nexus私有库搭建
相信很多人都发现了,github上很多优秀的开源项目都是以一种组件化的方式来写的,都是直接通过gradle的compile把一个jar包或者aar包引用过来供项目里的代码来使用的。这其实就是把你写好的一个模块放到私有库上,然后直接引用的道理。那么肯定会有很多人有这样的疑惑:AndroidStudio里不是有一个module的概念吗,module不仅可以在其他项目里复用,我只要import一下就可以...
Android 实时获取播放音乐的频率 Visualizer用法
Android 实时获取播放音乐的频率 Visualizer用法 前言 笔者正在做的项目有播放声音并实时获取声音音频的需求,在网上搜了许久,都找不到一个满意的答案。于是自己去翻了谷歌文档和请教自己固件的同事,整理出来一套供大家参考 Visualizer 的用法 //声明MediaPlayer mMediaPlayer = new MediaPlayer(); //声明Visualizer ...
Android代码-适用于Android的轻巧且易于使用的Audio Visualizer。
Audio Visualizer A light-weight and easy-to-use Audio Visualizer for Android using the Android Canvas. Demos Blob Blast Wave Bar Available Visualizers: BlobVisualizer - Gives blob like effect, good for low bpm audio BlastVisualizer - Gives a blast like effect, very random, good for high bpm audio WaveVisualizer - Gives a nice wave like effect, good for all kinds of audio BarVisualizer - Gives the contemporary bar effect, good for all kinds of audio Usage Note: Us
myeclipse 6.0.1不能debug
版本是 myEclipse6.0.1rn我的JDK是1.6的 Attached source设置的是jdk 的src.ziprndebug的时候点F6 弹出一个TrueTypeFont.class source not foundrn怎么办?
Android : 全局异常捕捉
需要的权限 &amp;lt;uses-permission android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&quot; /&amp;gt; &amp;lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&amp;gt; Application类 packag...
android屏幕捕捉
使用MediaprojectionManager 的方法来进行屏幕捕捉,VirtualDisplay来展示捕捉的屏幕截图,关键代码为: 实例化视频放映管理器 projectionManager = (MediaProjectionManager) getSystemService( Context.MEDIA_PROJECTION_SERVICE); 通过startAct
Android 崩溃捕捉类
更多可用类:https://github.com/wangfeixixi/util 使用很简单   CrashHandler.getInstance().init(UIUtils.getContext(), "1门禁大师"); //复制该类到项目 package wangfei.util.ceshi; import android.annotation.SuppressLint; im
Android 捕捉全局异常
android 捕捉运行时异常写入到sd卡中
android menu捕捉设置
[code=&quot;java&quot;] private static final int MENU_ABOUT = Menu.FIRST; private static final int MENU_QUIT = Menu.FIRST + 1; @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(M...
Android捕捉USB事件
rn 在这先问下各位,有没有谁在使用 华硕 TF101 平板搞测试开发? 如果有的话,这问题应该好解决。rnrn 是这样的:rn rn 因为这台平板的屏幕和底座键盘是可以分离和合并的,如果在合并的状态下打开我的程序,再拨下来,程序就会rn 自动异常关闭,相同,插上的结果和拔下的结果一样的。 rn rn 我不知道这是怎么回事? 但是Google自带的程序会没事,如果谁知道,还请赐教。rnrn 我后来想了一下,是不是应该去监听USB拔插事件,在事件中处理程序的异常关闭。rnrn 但是,我又不晓得怎么去捕捉USB事件,所以,还请大家帮帮忙
Android全局异常捕捉
在Android开发中有些异常是开发和测试中不可遇见的,会在上线后给用户使用的时候才产生.有写是小Exception和一些可能会让App奔溃的问题,这样问题出来App莫名奇妙的就卡住死掉了.用户体验就不好.在App崩溃之前主动讲App杀死,然后给用户一些友好的提示.我们还需要把令App奔溃的Excepion记入在文件上.等到下次app开启的时候在推送到service.以便我们后期修复Bug. 下
android异常捕捉
运行过程中程序闪退,可以自己捕捉log保存本地,或者自己也可以上传到服务器
Android的Nexus搭建Maven私有仓库
前言 我们平时在开发的时候总会compile一些远程仓库的框架来使用,但不可避免的是有些公司是内网,或是断网了,这就造成了依赖失败,亦或是自己开发了一个很牛的组件,希望同步给小伙伴一块耍耍,但是网络环境不允许,总不能拿个U盘拷贝过去吧,被别人听到程序员是这么协作的,估计会笑掉大牙。 Nexus这个私服正好解决了这个问题,他的思路是本地与远程之间嫁接一层本地的服务器,对于公司内部团队协作开发的
android 反编译 APKDB V2.1.1_20160812 支持6.0.1
android 反编译 APKDB V2.1.1 支持6.0.1 ,图形化界面。
Nexus 5 (GSM/LTE) binaries for Android 4.4.4 (KTU84P)
Nexus 5 (GSM/LTE) binaries for Android 4.4.4 (KTU84P) Nexus 5 Android 4.4.4.r1 版本驱动
编译Android 4.4.4 r1的源码刷Nexus 5手机详细教程
网上关于编译Android源码的教程已经很多了,但是讲怎么编译Android源码刷到真机上的教程不是很多并且也没有讲清楚,仅仅编译Android源码不部署到真机上折腾一下是不愉快的。在Android安全学习的过程不免涉及到修改Android源码过各种对抗的事情,今天有空来学习一下如何编译Android源码部署到谷歌的Nexus 5 手机上,以Android 4.4.4 r1的源码为例子,在Ubun
android 捕捉 异常 崩溃 捕捉 crash
大家应该 知道 在android的 中 开发中,我们不可能 预算到各种各样的 异常 崩溃 ,本人用 淘宝的 时候 ,因为 本人的 手机问题 也出现了 好几次了 崩溃 呢 , 当用户在使用的时候 忽然出现一个崩溃 这对产品是十分 致命的, 详情 请查看 http://my.oschina.net/lijindou/blog/725122
android 捕捉 异常 崩溃 捕捉 crash
2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...
Android OTG数据不能写入
可以读取OTG优盘的数据,但是无法写入 说是权限问题,加入权限之后还是说权限有问题 原来是像TF卡一样只能写入沙河路径,改了之后正确
USB捕捉工具 Bus Hound 6.0.1 完美版
BusHound软件是由美国perisoft公司研制的一种专用于PC机各种总线数据包监视和控制的开发工具软件,其名“hound”的中文意思为“猎犬”,即指其能敏锐地感知到总线的丝毫变化。 完全破解版, 内带说明书
nexus 5 root工具
nexus 5 root工具,该工具可以运行在windows linux mac版本上,运行方法也很简单
Nexus 5 Root工具
注意:此操作会自动执行解锁如果您的nexus 5没有解锁的话,解锁会清空您机器的数据,已经解锁不必担心 步骤: 1.将您的nexus 5调整到bootloader模式,具体的办法是先关机,然后在关机的状态下,同时按住电源和音量上和音量下键。 2.通过USB将nexus 5和电脑相连接。 3.将下载的文件解压并根据您的操作系统选择执行下面的文件 Windows: --- 双击运行root-windows.bat - Linux --- chmod +x root-linux.sh --- 运行 root-linux.sh - Mac OS X --- chmod +x root-mac.sh --- 运行 root-mac.sh 4.根据屏幕提示进行下一步,记得同时关注电脑上和nexus 5上的屏幕变化。
Nexus 5的刷机脚本
谷歌手机Nexus 5的Android系统5.1.1的刷机脚本,由于官方的刷机基本已经无效了,因此特地写了一个分享给需要的同学也分享给需要的人,具体的脚本的操作,请关注我的博客里的教程
FFT变换Android代码及解析
FFT变换Android代码及解析
Android 音频FFT提取分析
通过Record_Audio获取MediaPlayer播放器的声音,利用自带的FFT功能进行音频分析
Android 全局捕捉异常Crash日志
实现自己的崩溃日志管理,捕捉全局异常,方便检查错误发生地。 先附上申请权限: &amp;lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot;/&amp;gt; 6.0 以上自行动态申请权限。 用到的库: android 工具类 依赖: implementation 'com.blankj:ut...
Android:onTouch()和onTouchEvent()的区别?
针对屏幕上的一个View控件,Android如何区分应当触发onTouchEvent,还是onClick,亦或是onLongClick事件?在Android中,一次用户操作可以被不同的View按次序分别处理,并将完全响应了用户一次UI操作称之为消费了该事件(consume),那么
Android程序异常捕捉并上传服务器
Android市场品牌多样,一些比较强势的公司都定制了自己的系统,所以在开发过程中就算很严密的测试还是会遇到一些漏网之鱼,所以开发应用的全局异常捕捉处理是一项重要的工作,以便我们及时发现问题并处理。其实安卓默认了一个UncaughtException处理类,我们只需继承该类并收集信息及时处理。 /** * 异常处理类,继承UncaughtException处理类 * * @author wk
android APP元素捕捉工具
uiautomatorviewer 添加xpath属性,三种方法 如: xpath : //android.widget.Button[@resource-id=\"com.android.huayi:id/btn_download_update_dialog\"] uiseletor:new UiSelector().className(\"android.widget.Button\").textContains(\"下载安装\").resourceId(\"com.android.huayi:id/btn_download_update_dialog\")
Android 异常日志捕捉Crash
开始的时候,一旦打包,就无法进入Debug调试,这个时候如果程序崩溃,只能通过自定义Crash来捕捉。 关键类:java.lang.Thread.UncaughtExceptionHandler 类的说明:Implemented by objects that want to handle cases where a thread is being terminated by
Android adb捕捉手机日志信息
adb logcat &gt; fileName.txt 此命令可以直接捕获全局的日志信息,开发人员可以通过分析日志获得自己想要的信息 adb logcat | grep &lt;过滤内容&gt; &gt; fileName.txt 此命令可以过滤内容 ...
Android学习之路(5)——数据存储方式
Android系统中的数据存储区方式有五种: 五种数据存储方式 1.文件存储:以I/O流的形式把数据存入手机内存或SD卡,可以存储大数据。 2.SharedPreference:本质是一个XML文件,以Map形式存入手机内存中。 3.SQLite数据库:SQLite是一个轻量级、跨平台的数据库。数据库中所有信息都存储在单一文件内,占用内存小,并且支持SQL语法,通常用于存储用户信息。
相关热词 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd c# 操作sql视图