你如何让 Android 使用特定的声卡?

如何解决你如何让 Android 使用特定的声卡?

我正在将 AOSP 移植到 iMX8 板。

我有一个可用的 sgtl5000 驱动程序和编解码器。

即当我跑步时:

smarc_mx8mq:/sdcard/Alarms # tinyplay file_example_WAV_1MG.wav                                                           
Playing sample: 2 ch,8000 hz,16 bit 1072948 bytes

播放音乐。

Android 通常根本不发出任何声音。

表格有连续错误

01-05 14:31:47.809  3383  4814 I audio_hw_primary: start_output_stream_primary... 0xedafe000,device 2,address,mode 0
01-05 14:31:47.809  3383  4814 I audio_hw_primary: select_output_device(),headphone 0,headset 0,speaker 2,earpiece 0,01-05 14:31:47.809  3383  4814 W audio_hw_primary: card -1,port 0 device 0x2
01-05 14:31:47.809  3383  4814 W audio_hw_primary: rate 48000,channel 2 period_size 0xc0
01-05 14:31:47.809  3383  4814 E audio_hw_primary: cannot open pcm_out driver 0: cannot open device '/dev/snd/pcmC4294967295D0p': No such file or directory

如果应用一个非常丑陋的黑客:

smarc_mx8mq:/dev/snd # ln -s pcmC0D0p pcmC4294967295D0p

声音现在适用于 Android,直到下次重新启动。


我找到了一个名为 imx/alsa/config_sgtl5000.h文件,其中有一个部分:

static struct audio_card sgtl5000_card = {
    .name = "sgtl5000-audio",.driver_name = "sgtl5000-audio",.bus_name = "I2S1",.supported_out_devices =
        (AUdio_DEVICE_OUT_EARPIECE | AUdio_DEVICE_OUT_SPEAKER |
         AUdio_DEVICE_OUT_WIRED_HEADSET | AUdio_DEVICE_OUT_WIRED_HEADPHONE |
         AUdio_DEVICE_OUT_ANLG_DOCK_HEADSET | AUdio_DEVICE_OUT_ALL_SCO |
         AUdio_DEVICE_OUT_DEFAULT),.supported_in_devices =
        (AUdio_DEVICE_IN_COMMUNICATION | AUdio_DEVICE_IN_AMBIENT |
         AUdio_DEVICE_IN_BUILTIN_MIC | AUdio_DEVICE_IN_WIRED_HEADSET |
         AUdio_DEVICE_IN_BACK_MIC | AUdio_DEVICE_IN_ALL_SCO |
         AUdio_DEVICE_IN_DEFAULT | AUdio_DEVICE_IN_BUS),.defaults = NULL,.bt_output = NULL,.speaker_output = speaker_output_sgtl5000,.hs_output = NULL,.earpiece_output = NULL,.vx_hs_mic_input = NULL,.mm_main_mic_input = mm_main_mic_input_sgtl5000,.vx_main_mic_input = NULL,.mm_hs_mic_input = NULL,.vx_bt_mic_input = NULL,.mm_bt_mic_input = NULL,.card = 0,.out_rate = 0,.out_channels = 0,.out_format = 0,.in_rate = 0,.in_channels = 0,.in_format = 0,};

我目前推断 Android 需要一个可以执行 X 的声卡,并且返回值为 -1(4294967295 作为 uint32_t)。

由于缺少错误检查,导致尝试在 /dev/snd/pcmC4294967295D0p 处打开声卡 -1。

如何让 sgtl5000 成为 Android 的认声卡?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?