我已经针对 Android Things 的 MAX98357A 驱动程序进行了大量 API 设计,因此我会尝试为您指明正确的方向。
Voicehat 是一个很好的起点。 DAC 使用 I2S 来回发送音频数据,但也使用 GPIO 来控制其中的一部分。
如the code 所示,有两个GPIO:GAIN_SLOT 和SD_MODE。在 VoiceHat 上,GAIN_SLOT 引脚未连接。
SD_MODE 插槽至关重要。它指示是否应该启用(true)或禁用(false)音频芯片。如果你不改变这个值,它可以解释为什么没有音频输出。
I2S 与 I2C 有着根本的不同,尽管它们的名称相似。在最近的版本中,对 I2S API 的直接访问已从平台中移除,但仍可通过音频路由访问。
在 Android Things 中,您可以使用 AudioTrack 轻松播放音频文件。但是,播放该音频只会将其输出到默认音频输出。您可以做的是设置首选音频设备。在Google Assistant sample中,有代码可以找到对应于I2S的BUS类型。
private AudioDeviceInfo findAudioDevice(int deviceFlag, int deviceType) {
AudioManager manager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
AudioDeviceInfo[] adis = manager.getDevices(deviceFlag);
for (AudioDeviceInfo adi : adis) {
if (adi.getType() == deviceType) {
return adi;
}
}
return null;
}
然后您可以通过以下方式访问它:
audioOutputDevice = findAudioDevice(AudioManager.GET_DEVICES_OUTPUTS, AudioDeviceInfo.TYPE_BUS);
if (audioOutputDevice == null) {
Log.e(TAG, "failed to found I2S audio output device, using default");
}
最后:
audioTrack.setPreferredDevice(audioOutputDevice);