Android 可视化器 FFT/波形受设备音量影响吗?

8
我正在使用Android 2.3.1上的Visualizer类进行音乐分析。我发现FFT和波形幅度受设备音量的影响。这意味着,如果用户将音量调低,我将收到很少或没有FFT数据。
我已在Motorola Xoom、Samsung Galaxy Tab和模拟器上进行了测试,结果都是如此。
我正在使用以下代码:
mp = new MediaPlayer();
mp.setDataSource("/sdcard/sine1.wav");
mp.prepare();
mp.setLooping(true);
mp.start();
int audioSessionID = mp.getAudioSessionId();
v = new Visualizer(audioSessionID);
v.setEnabled(true);

看了Visualizer类的文档后,如果我们传递一个有效的音频会话id,那么可视化器应该会操作这个音频会话。似乎Visualizer正在操作输出混音。您是否遇到过这种情况或找到了解决方法?谢谢。

尝试这个解决方案,它可能会有所帮助! https://dev59.com/pJLea4cB1Zd3GeqP12zv#39728310 - BogerChan
2个回答

10

我也遇到了同样的问题,但是当我启用同一个会话id的均衡器和可视化器时,它能正常工作。我不知道原因,但我检查了api演示中从可视化器类中删除均衡器后,它按照你说的方式工作。

 Equalizer mEqualizer = new Equalizer(0, SessionId);
 mEqualizer.setEnabled(true); // need to enable equalizer
 Visualizer mVisualizer = new Visualizer(SessionId);

3
谢谢您的建议,但是对我来说这并没有解决问题。 - user1035335
嗨,测试API演示,其中有可视化器和均衡器类的示例。为均衡器类添加注释并观察它,波形播放取决于音量。 - Ramesh Akula
1
如果上述方法不起作用,请尝试在构建可视化器之后启用均衡器。至少这是我的经验,否则它将无法正常工作... - AndreiBogdan
1
这对我来说在audioSession为0时不起作用。在可视化器之前或之后启用均衡器似乎也没有任何区别。 - Big Money
1
同意@BigMoney的看法,这个解决方案不起作用。 - Joshua W
显示剩余2条评论

0

可视化器有两种缩放模式:

SCALING_MODE_AS_PLAYED和SCALING_MODE_NORMALIZED

如果您希望可视化器被标准化,即无论音量如何都保持一致,则使用SCALING_MODE_NORMALIZED。

mVisualizer.scalingMode = Visualizer.SCALING_MODE_AS_PLAYED

请记住,这会极大地改变发送到可视化器的值,因此可能需要进行其他调整。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接