在Raspberrypi上配置带Androidthings的Speaker PHat

时间:2018-03-07 21:43:43

标签: java android raspberry-pi3 iot android-things

我正在尝试在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

1 个答案:

答案 0 :(得分:1)

我已经为Android Things的MAX98357A驱动程序做了大量的API设计,所以我会尝试指出你正确的方向。

Voicehat是一个很好的起点。 DAC使用I2S来回发送音频数据,但也使用GPIO来控制部分音频数据。

the code所示,有两个GPIO:GAIN_SLOTSD_MODE。在VoiceHat上,GAIN_SLOT引脚未连接。

SD_MODE位置至关重要。它指示音频芯片是应该启用(true)还是禁用(false)。如果你不改变这个值,它可以解释为什么没有音频输出。

I2SI2C根本不同,尽管名称相似。在最近版本中,已从平台中删除了对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);