Android Visualizer丢失耳机

Android Visualizer丢失耳机,android,headset,visualizer,headphones,Android,Headset,Visualizer,Headphones,我的Android应用程序是内置音乐可视化的音频播放器。他们可以使用Android Visualizer类来获取声音数据。但不幸的是,如果连接了耳机,它就不包含任何音乐。它只接收来自微型耳机的声音,不接收混音器的声音。当然,在Visualizer构造函数中,我使用会话ID==0 private static int initVisualizer() { viz = new Visualizer( 0 ); if( viz == null ) return

我的Android应用程序是内置音乐可视化的音频播放器。他们可以使用Android Visualizer类来获取声音数据。但不幸的是,如果连接了耳机,它就不包含任何音乐。它只接收来自微型耳机的声音,不接收混音器的声音。当然,在Visualizer构造函数中,我使用会话ID==0

    private static int initVisualizer() {
    viz = new Visualizer( 0 );
    if( viz == null )
        return 0;
    .......

文档告诉我们这意味着Visualizer将进行输出混合。但这是错误的——它需要麦克风信号。当然,它使用的是耳机麦克风,而不是设备的。因此,如果用户连接耳机或外置扬声器,我的可视化功能将停止工作。如何解决这个问题?

如果你正在可视化你自己应用程序中的音频,你就不能使用
getAudioSessionId()
返回的
AudioTrack
/
MediaPlayer
而不是0吗?关于“它需要麦克风信号”,这听起来像是该设备实现中的一个bug。您是否确认它实际上是通过麦克风录制的?例如,IIRC,如果您或系统在特定会话上启用了效果,则会话0上的所有效果(例如,可视化工具)都将暂停。当耳机连接时,程序肯定会从麦克风接收信号。但我不知道它听到的是哪一个麦克风——耳机线还是内置的。两者都非常敏感。关于使用连接的耳机播放音乐,程序会准确地理解。但在我所有带耳机的设备中,Visualizer的级别似乎很低。我有多个级别到足够大的数字,以看到视觉效果的工作。如果没有耳机,这是不需要的-接收的可视化工具级别足够大。我的代码中有一个错误。。。实际上,在所有情况下,它都没有获得可视化仪数据,而是麦克风数据。在我修复它之后,我得到了另一个奇怪的结果。在安卓4.1和6.0上,可视化工具(0)在所有情况下都能提供正确的数据。应用程序运行良好。在安卓7.0上,它的工作原理因玩家而异。如果我启动了一些3d派对播放器-在我的应用程序中,Visualizer会提供正确的音乐数据。但是,如果我启动我的内部应用程序MediaPlayer-Visualizer不会提供数据。这意味着对viz.getWaveForm()的调用返回false。为什么在Android 7中,可视化工具(0)不提供所有输出的音乐数据?