1

我尝试为 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 与音频设备进行交互是真的吗?

谢谢大家!

4

2 回答 2

1

您只能在有根设备上使用 Android 中的 ALSA。

如果您想在库存设备上播放本机代码中的音频,您至少有两种选择:

  1. 使用官方稳定的API:(OpenSL ES这需要Android 2.3+版本)
  2. Android有一个使用 JNI 调用 Java 的本机OpenAL实现AudioTrackhttps ://github.com/AerialX/openal-soft-android (这将适用于 Android 2.1+ 版本)

我建议OpenAL仅在您拥有需要移植到 Android 的现有代码时使用,或者由于某种原因,您必须支持 Android 2.1 版。在其他情况下OpenSL ES是正确的选择。

于 2013-10-20T20:50:14.127 回答
1

我不认为Android支持ALSA。ALSA api 不适用于原生 Android 代码 (NDK)

对于 Android,您应该使用“opensles”模块,它为原生接口提供音频驱动程序。

Baresip 支持多个音频驱动程序,例如用于 Linux 的“alsa”模块或用于 Android NDK 的“opensles”。有关 opensles 模块的详细信息,请参见此处:

http://www.creytiv.com/doxygen/baresip-dox/html/opensles_8c.html

于 2013-10-20T14:05:21.600 回答