我尝试为 Android 实现 baresip,它使用自定义 alsa
模块来控制音频设备。
此模块使用此代码打开设备处理程序:
err = snd_pcm_open(&st->write, device, SND_PCM_STREAM_PLAYBACK, 0);
我尝试将 'default'、'plug:hw:0,0'、'hw:0,0'、'hw:00,0' 传递给此函数。所有结果返回错误-2,表示没有该文件。
我有两个问题。是否有可能将一些字符串传递给此函数以正确处理音频设备?通常,使用此功能直接从 jni 与音频设备交互是真的吗?
谢谢大家!
最佳答案
您只能在获得 root 权限的设备上使用 Android 中的 ALSA。
如果您想在原装设备上通过 native 代码播放音频,您至少有两种选择:
- 使用官方稳定的API:
OpenSL ES
(这需要Android 2.3+版本) - Android 有一个原生的
OpenAL
实现,它使用 JNI 调用 JavaAudioTrack
:https://github.com/AerialX/openal-soft-android (这适用于 Android 2.1+ 版本)
我建议仅当您拥有需要移植到 Android 的现有代码,或者出于某种原因必须支持 Android 2.1 版时才使用 OpenAL
。在其他情况下,OpenSL ES
是正确的选择。
关于Android alsa snd_pcm_open default no such file o 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19445832/