我正在尝试在Raspberrypi的Android内容中使用Pimoroni Speaker PHAT(https://shop.pimoroni.com/products/speaker-phat)。我从数据手册中看到,DAC(MAX98357A)使用I2S协议。我尝试通过I2C通信初始化DAC(MAX98357A),因为在最新的开发人员预览版本中删除了I2S设备引用。当我调试时,我看不到DAC上的任何活动。我已经从github看了AIY-VoiceHAT驱动程序,但它没有帮助我。通过I2C初始化I2S协议是否正确..或者我们是否需要以不同方式配置它。 请帮助我指出如何使用它的正确方向。 希望能早日得到你的回复。提前谢谢。
-Suresh
答案 0 :(得分:1)
我已经为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);