问题标签 [opensl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1914 浏览

android - 使用 OpenSL ES 时“没有更多可用的轨道名称”

我正在使用 OpenSL ES,而我的 android 应用程序需要多个频道,因此我创建了多个播放器对象(加上我需要播放的每个 mp3 文件的播放器对象)。这适用于一个应用程序,但是当我运行我创建的另一个应用程序时,它将无法播放任何声音和日志文件说

好的,我已经读到这意味着我没有可用的对象,我应该释放一些对象。

但是,根据http://mobilepearls.com/labs/native-android-api/opensles/

适用于 Android 的 OpenSL ES 支持每个应用程序使用一个引擎,最多支持 32 个对象

那么每个应用程序有 32 个对象,还是全局 32 个对象?如果是这样,每次我的应用程序变为非活动状态(onPause/onStop)时,我都被迫销毁()(并重新创建)播放器对象?

0 投票
2 回答
1786 浏览

android - OpenSL ES 在 Samsung Galaxy SII (GT-I9100) 上随机崩溃

我在安卓上使用 OpenSL ES。它似乎工作得很好。

但是,过了一会儿,我的应用程序在三星 Galaxy SII (GT-I9100) 上崩溃了。其他手机(ZTE Blade、Galaxy Nexus、HTC evo 3D)似乎不会以这种方式崩溃。

这是来自 logcat 的日志,不管它有什么好处:

很难说什么时候会发生这种崩溃,但可能是在开始播放 mp3 文件之后。另一方面,我注意到 BufferQueue 中经常有回调函数。我还注意到“INFO_FORMAT_CHANGED”似乎经常出现在崩溃之前(但不确定它是否相关)。

但如前所述,崩溃是罕见的。我主要对调试方法感兴趣。例如,有没有办法知道堆栈上有什么?我尝试使用 addr2line-command,但我从手机中提取的这些 .so 文件不知何故被打乱且不可读。

0 投票
2 回答
1953 浏览

android - 使用 OpenSL ES Android 同时播放多个音效

我正在使用 OpenSL ES 在我的项目中播放音乐和声音。我使用原生音频样本作为开始,它可以很好地再现背景音乐和单个声音,但是当我尝试同时再现两个或多个声音时,声音不会同时再现,因为声音缓冲区在播放时排队播放所有以前的缓冲区。

然后,经过一番研究,我找到了两种解决方法,简而言之:

  1. 使用多个音频播放器(因此缓冲队列)来重现声音。
  2. 将音效缓冲区混合到一个缓冲区中,然后加入队列。

我的问题是: 您认为最好的方法是什么?我忽略了更好的方法吗?

提前致谢。

0 投票
1 回答
3774 浏览

android - 是否可以直接从 OpenSL ES(适用于 Android)中的音频资产获取字节缓冲区?

我想使用 OpenSL ES FileDescriptor 对象从音频资产中获取字节缓冲区,因此我可以将其反复排入 SimpleBufferQueue,而不是使用 SL 接口来播放/停止/查找文件。

我想直接管理样本字节有三个主要原因:

  1. OpenSL 使用 AudioTrack 层来播放/停止/等播放器对象。这不仅引入了不必要的开销,而且还存在一些错误,并且播放器的快速启动/停止会导致很多问题。
  2. 我需要直接为自定义 DSP 效果操作字节缓冲区。
  3. 我要播放的剪辑很小,都可以加载到内存中以避免文件 I/O 开销。另外,将我自己的缓冲区排入队列将允许我通过将 0 写入输出接收器来减少延迟,并在播放时简单地切换到采样字节,而不是停止、暂停和播放 AudioTrack。

好的,所以理由完成了 - 这是我尝试过的 - 我有一个Sample结构,它本质上包含一个输入和输出轨道,以及一个保存样本的字节数组。输入是我的 FileDescriptor 播放器,输出是 SimpleBufferQueue 对象。这是我的结构:

在初始化文件播放器fdPlayerObject并为我的字节缓冲区分配内存之后

我得到了它的 BufferQueue 接口

然后我实例化一个输出播放器

当我想播放样本时,我正在使用:

但是,这会导致我的应用程序冻结并关闭。这里不对劲。 另外,我不希望每次都从文件描述符的 BufferQueue 中获取样本。相反,我想将它永久存储在一个字节数组中,并在我喜欢的时候将它排入输出。

0 投票
4 回答
2757 浏览

android - OpenSL 中的 RecorderObject 没有实现在 Android 上设置音量或配置的接口

我试图获取Android上的SLDeviceVolumeItf界面,但出现错误:RecorderObjectSL_RESULT_FEATURE_UNSUPPORTED.

我读到 OpenSL ES 的 Android 实现不支持AudioRecorder. 真的吗?

如果是,有解决方法吗?我有一个 VOIP 应用程序,它在 Galaxy Nexus 上运行不佳,因为麦克风增益非常高。

我还尝试将SL_IID_ANDROIDCONFIGURATION设置streamType为新的VOICE_COMMUNINCATION音频源,但我再次收到错误 12(不支持)。

recorderObject 已创建,但我无法获取SL_IID_ANDROIDCONFIGURATION接口。我在 Galaxy Nexus (ICS)、HTC sense (ICS) 和 Motorola Blur (Gingerbread) 上进行了尝试。我正在使用 NDK 版本 6。

0 投票
1 回答
1756 浏览

android-ndk - 使用 OpenSL ES 的 Android NDK 测试应用

我开发了一个 NDK 应用程序(我从控制台运行)并在使用 Android 4.0.3 的 TI AM37x 硬件上运行。这个应用程序正在使用 OpenSL API,我正在尝试在硬件上播放来自 SDCard 的歌曲。相同的路径正在使用 NDK 示例代码(URI 播放),但我无法从我的应用程序中听到音频。有人有什么主意吗?我的代码流程如下:

0 投票
1 回答
710 浏览

android-ndk - Android ndk 中的欠载通知

我正在尝试使用 NDK(又使用开放式 SLES)在 Android 上创建一个基于流的音频应用程序。我有基本的流媒体设置工作。我需要知道在 Android 中如何处理欠载(或超载)?错误回调是如何实现的?如何获取 AudioPlayer 缺乏数据的持续时间?

提前致谢。

0 投票
2 回答
51725 浏览

android - 在 Android 中使用 OpenSL ES 而不是 AudioTrack 的原因是什么?

目前我正在使用 AudioTrack 将来自本机层的音频数据传递给它来播放。

看来我可以在本机层使用 OpenSL ES 而不是 Java 中的 AudioTrack。与 AudioTrack 相比,OpenSL ES 提供的假定优势是什么?

0 投票
1 回答
1090 浏览

android-emulator - OpenSL ES 无法在 Android 模拟器上播放音频

我将 amrnb 解码为 PCM,然后将正确的 pcm 缓冲区放入 Enqueue 缓冲区(我确定 PCM 数据是正确的),但听不到声音。并且在提供缓冲区时,记录输出:

我的代码如下,我的问题是:

  1. 使用 OpenSL ES 时有什么问题吗?
  2. OpenSL ES 真的只能在真机上运行吗?

示例代码:

0 投票
1 回答
1301 浏览

android - 如何指定 AudioRecorder 对象的输入源?

我正在AudioRecord使用 OpenSL 将音频捕获循环从 Java(使用类)移植到本机库。

原因是在分析之后,捕获循环在我们的测试手机中消耗的 CPU 在 OpenSL 中减少了大约 2%。这是一个意义重大的收获!

Java AudioRecord 类的构造函数接收一个source可以配置为多个值的参数(MIC, CAMCORDER, VOICE_DOWNLINK等)

到目前为止,我还没有找到 OpenSL 中源参数的等价物(如果存在)。

有人知道是否有办法为 AudioRecorder 对象指定此 Source 参数吗?

干杯!