【问题标题】:Configuring Speaker PHat with Androidthings on Raspberrypi在 Raspberry Pi 上使用 Android Things 配置扬声器 PHat
【发布时间】:2018-08-16 03:12:29
【问题描述】:

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

【问题讨论】:

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


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      相关资源
      最近更新 更多