首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android alsa snd_pcm_open默认没有这样的文件o目录

Android alsa snd_pcm_open默认没有这样的文件o目录
EN

Stack Overflow用户
提问于 2013-10-18 17:13:02
回答 2查看 1.9K关注 0票数 1

我尝试在Android上实现baresip,它使用自定义的alsa模块来控制音频设备。

此模块将此代码用于打开设备处理程序:

代码语言:javascript
复制
err = snd_pcm_open(&st->write, device, SND_PCM_STREAM_PLAYBACK, 0);

我尝试将'default','plug:hw:0,0','hw:0,0','hw:00,0‘传入此函数。所有结果都返回error -2,这意味着没有这样的文件。

我有两个问题。是否有可能将一些字符串传入此函数以正确处理音频设备?一般来说,使用此功能直接从jni与音频设备交互是真的吗?

谢谢大家!

EN

回答 2

Stack Overflow用户

发布于 2013-10-20 22:05:22

我不认为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

票数 1
EN

Stack Overflow用户

发布于 2013-10-21 04:50:14

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

如果要在常用设备上播放本机代码中的音频,您至少有两个选择:

  1. 使用官方的稳定接口:OpenSL ES (这需要安卓版本的2.3+)
  2. 有一个用于安卓的原生OpenAL实现,它使用JNI来调用Java AudioTrackhttps://github.com/AerialX/openal-soft-android (这将适用于安卓版本的2.1+)

<代码>G29

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19445832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档