安卓音频重采样及外置声卡输出解决方案
安卓音频重采样及外置声卡输出解决方案
本文提供解决安卓音频重采样问题,实现音频输出到外置声卡,以及解决USB独占模式下无法播放来电铃声等问题的方案。
1. 避免音频重采样
修改系统配置文件 /system/etc/audio_policy.conf,将以下两行代码注释掉:
sampling_rates 44100|48000
input_sampling_rates 44100
然后添加以下代码:
sampling_rates 44100
input_sampling_rates 44100
2. 将音频输出到外置扬声器
修改 frameworks/base/services/core/java/com/android/server/audio/AudioService.java 文件,找到以下代码:
mRingtonePlayer.setPlaybackCallback(mAudioCallback);
在其下方添加以下代码:
mRingtonePlayer.setPlaybackStream(AudioSystem.STREAM_RING);
mRingtonePlayer.setPlaybackDevice(AudioSystem.DEVICE_OUT_SPEAKER);
3. 输出到外置声卡
使用OTG线连接外置声卡,然后在系统设置中将声音输出设备设置为外置声卡。
4. 解决USB独占模式下无法播放来电铃声
在Android系统中,应用程序使用USB设备时,系统会将该设备标记为'独占模式'。如果此时有来电铃声,Android系统将无法将其输出到设备上。以下方案可以解决这个问题:
4.1 使用USB音频框架
Android系统提供了一个USB音频框架,允许多个应用程序共享一个USB设备,并实现类似于Windows系统下的混音功能。您可以在应用程序中使用该框架来分配给每个应用程序一个独立的音频输入/输出通道,以便多个应用程序可以同时使用外部设备和播放来电铃声。
4.2 自定义USB设备驱动程序
如果您对Linux内核和USB驱动程序有一定的了解,可以自己编写一个USB设备驱动程序,并在其中实现多个应用程序共享一个设备的功能。
5. 外接声卡独占时播放来电铃声
5.1 使用混音器
混音器可以将多个音频信号混合在一起,并输出到单个音频通道。您可以使用混音器来将来电铃声混合到外接声卡的音频信号中,从而实现同时播放来电铃声和外接声卡的音频。
5.2 使用多声道输出
如果您的外接声卡支持多声道输出,可以将来电铃声输出到一个单独的声道中,而将外接声卡的音频输出到另一个声道中。
5.3 切换声音输出设备
如果您不需要持续使用外接声卡,可以在来电铃声响起时切换声音输出设备,将来电铃声输出到内置扬声器或耳机中。
需要注意的是,以上方法无法完全避免SRC(Sample Rate Conversion)问题,最好选择支持所需采样率的硬件或驱动程序,以减少SRC的发生。
原文地址: https://www.cveoy.top/t/topic/jw3C 著作权归作者所有。请勿转载和采集!