fuyuqiang789 2019-01-16 07:03 采纳率: 0%
浏览 1233

Android 用 Visualizer 采集播放音乐信息,三星S8上不回调onWaveFormDataCapture 方法。

手里一个项目,用到 Visualizer 采集MediaPlayer播放音乐的频谱信息,大部分手机测试正常,但是在三星S8上出现用手机自带扬声器播放音乐正常 但是如果插上耳机出现,onDataCaptureListener 的 onWaveFormDataCapture 方法只会调用2次,之后不会触发onWaveFormDataCapture,无法拿到数据。求大神解决。

        // 初始化音谱采集器
        mVisualizer = new Visualizer(player.getAudioSessionId());
        mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[0]);
        mVisualizer.setDataCaptureListener(onDataCaptureListener, Visualizer.getMaxCaptureRate(), true, false);
 private Visualizer.OnDataCaptureListener onDataCaptureListener = new Visualizer.OnDataCaptureListener() {
        @Override
        public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, int i) {
            int v = average(bytes);
            int s = (int) (v / 128.00 * 90 + 10);
            s5 = Integer.toHexString(s);
            if (s5.length() == 1) {
                s5 = "0" + s5;
            }
            try {
                if (!player.isPlaying()) {
                    String ins = Globals.MODE_f0 + "000000FF";
                    mLeProxy.send(mLeProxy.getConnectedDevices().get(0).getAddress(), DataUtil.hexToByteArray(ins), false);
                } else {
                    String ins = Globals.MODE_f0 + Globals.s4 + s5 + "00FF";
                    mLeProxy.send(mLeProxy.getConnectedDevices().get(0).getAddress(), DataUtil.hexToByteArray(ins), false);
                }
            } catch (Exception e) {

            }
        }

        @Override
        public void onFftDataCapture(Visualizer visualizer, byte[] bytes, int i) {

        }
    };

展开全部

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 09:52
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Android中,onWaveFormDataCapture方法是一个用于监听音频数据采样的事件处理程序,它会在音频被采样时触发。

    然而,在您的情况下,当使用耳机而不是扬声器播放音乐时,onWaveFormDataCapture方法只触发了两次。这可能是由于以下原因:

    1. Android系统设置:您可能需要检查设备上的系统设置,确保音频输出适配器已正确配置为将音频发送至耳机而非扬声器。

    2. 设备驱动问题:某些设备的音频驱动可能会导致onWaveFormDataCapture方法的响应延迟或缺失。尝试重新启动您的设备并重启应用程序来重置这些设置。

    3. 硬件限制:如果您的手机具有较高的音频采样率(例如16kHz),则可能会影响onWaveFormDataCapture方法的响应时间。在这种情况下,您可以考虑降低采样频率以提高性能。

    如果您希望获得完整的频谱数据,请尝试以下步骤之一:

    1. 增加采样率:如果您能够获取更高采样率的数据,那么您应该可以获取到更详细的频谱图。请注意,这会增加数据的存储和传输成本。

    2. 减少采样间隔:降低采样间隔可以使更多的音频样本包含在一个更大的帧中,从而提高数据流的效率。但是,这可能导致采样精度下降,因此应在必要时谨慎使用。

    3. 优化内存使用:避免不必要的内存分配,例如在处理大量数据时一次性加载所有样本,而是逐步加载数据,并在需要时进行处理。

    4. 使用低带宽协议:对于实时音频应用而言,较低的带宽协议(例如RTP)可能会提供更好的实时性和更低的延迟。

    5. 使用多线程/多进程:在处理高带宽数据时,可以考虑使用多线程或多进程来分担计算负担,以提高处理速度。

    综上所述,要解决上述问题,您需要根据具体情况进行调整。

    评论
    编辑
    预览

    报告相同问题?

    悬赏问题

    • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
    • ¥15 minist数字识别
    • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
    • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
    • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
    • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
    • ¥15 Mac(标签-IDE|关键词-File) idea
    • ¥15 潜在扩散模型的Unet特征提取
    • ¥15 iscsi服务无法访问,如何解决?
    • ¥15 感应式传感器制作的感应式讯响器
    手机看
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回
    顶部