问题标签 [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 回答
455 浏览

android - OpenSL - 音频播放器对象搜索不佳

我正在编写一个 Android 应用程序,该应用程序需要能够以高精度查找大型 mp3 音频文件(约 90 分钟)中的特定点。

目前,我正在使用 OpenSL 方法和音频播放器对象,该对象具有指定 mp3 文件和 MIME 信息的 URI 数据源。

为了测试这一点,我使用播放器上的 SLSeekITF 接口来寻找特定点(以毫秒为单位)。但是,我发现搜索性能很差且不一致。通常,音频与应有的位置相差 1-10 秒。有时领先,有时落后。使用较短的 mp3 文件时性能稍好一些,但还远远不够接近。

Seek 模式(“准确”和“快速”)似乎对 SLSeekITF 没有任何影响。

在其他平台上,我可以让搜索位置非常准确 < 50 毫秒,这几乎看不到,所以我知道这是可能的。

- 有谁知道如何从 OpenSL 音频播放器中获得更好的准确性?- 此实施是否存在已知问题?- 是否有其他 mp3 解码器可以提供更好的性能?

谢谢

0 投票
1 回答
1958 浏览

android - 使用 OpenSL 在 android 中进行语音通话

我正在为我的论文做一个 VoIP 应用程序。我想知道是否有人可以帮助我解决这种情况:我有两个线程,AudioThread 和 AudioSendThread。第一个是通过 DatagramSocket 接收音频数据包并在手机中播放的侦听器。第二个是录音机,可以抓取 20 毫秒的声音并将其发送到另一台设备。我已经在 java 中实现了它,但它真的很慢,所以我决定尝试 OpenSL,但我没有找到任何类似这样的文档。

这是音频发送线程

还有这个 AudioThread

}

其他原生方法由 NDK 的 NativeAudio 示例获取

感谢大家的任何建议!

0 投票
2 回答
2496 浏览

android - 在 Android 上使用 OpenSL 从内存中播放 PCM WAVE 声音

我正在尝试设置 OpenSL AudioPlayer 以使用我分配的内存来播放 wav 文件。我想这样做,这样我就可以拥有多个共享相同数据并节省内存的 AudioPlayer。

我试图给 openSL 整个文件并告诉它它是带有 format_mime 的 WAVE

我自己解析了 WAVE 数据并加载了 format_pcm

parsefmtChunk 函数是

(是否应该以某种方式使用字节速率和块对齐来填充 pcm 结构?)

但是每当我创建音频播放器时,我都会得到 SL_RESULT_CONTENT_UNSUPPORTED

这是我从我的 parsefmt 函数 Channels:2 samplesPerSec:44100 bitsPerSample:16 中记录的内容

0 投票
1 回答
1845 浏览

android - Android Opensles 使用 FFmpeg 重新采样 PCM

我正在尝试在 android 中使用 ffmpeg 和 opensles 播放音频流。问题似乎是当将解码和重新采样的帧从 ffmpeg 传递到 opensles 时,因为我能听到的声音听起来很机器人并且有划痕。

来自ffmpeg的解码帧:

在这种情况下,Opensles 需要:

Opensles 设置:

这是对opensles进行重采样和排队的伪代码:

我会很感激任何帮助,谢谢。

0 投票
1 回答
2631 浏览

android - 在 OpenSL ES 记录器对象上请求接口 SL_IID_ANDROIDSIMPLEBUFFERQUEUE 返回 SL_RESULT_FEATURE_UNSUPPORTED

我使用 Android NDK 和 OpenSL ES 编写了一个基本的记录器应用程序。它编译和链接很好,但是当我尝试在 Galaxy Nexus 设备上运行它时,我收到以下错误:

W/libOpenSLES(10708): Leaving Object::GetInterface (SL_RESULT_FEATURE_UNSUPPORTED)

这在线上发生:

res = (*recorderObj)->GetInterface(recorderObj, SL_IID_ANDROIDSIMPLEBUFFERQUEUE, &recorderBufferQueueItf);

这是否意味着不支持在 Galaxy Nexus 设备上使用 OpenSL ES 进行录制,或者我只是犯了一个错误?下面是相关代码:

任何有关此问题的帮助都将受到欢迎:)

0 投票
1 回答
1162 浏览

android - 旧 Android 设备上的 OpenSL slCreateEngine 错误

我正在编写一个通过 OpenSL ES 使用缓冲区队列音频播放器的 Android 应用程序。我的应用程序在最近的设备上运行良好,但我在使用 HTC Wildfire S 时遇到了问题。

特别是,调用 slCreateEngine 函数会产生 SL_RESULT_RESOURCE_ERROR。文档中没有太多关于此错误的信息。

在调用 slCreateEngine 之前,我还在 LogCat 中看到了这些错误:

  • 无法打开 MM_PARSER_LIB,dlerror = 无法加载库:load_library[1105]:未找到库“libmmparser.so”
  • 无法打开 MM_PARSER_LITE_LIB,dlerror = 无法加载库:load_library[1105]:找不到库“libmmparser_lite.so”

我有一些理论:

  • 设备内存受限,无法实例化引擎对象
  • 该设备不支持 OpenSL ES 音频接口(此线程表明并非所有设备都支持它: https ://groups.google.com/forum/#!topic/android-ndk/Px-7NvaLmjo )

HTC Wildfire S 的规格如下:

  • Android 2.3.4(据我所知,通过运营商更新)
  • 高通 MSM7227(ARMv6 处理器)
  • 512MB 内存

我知道从 Gingerbread 开始支持 Open SL ES,但这并不意味着所有设备都具有此功能。由于此应用程序的其他要求,我必须使用 NDK 进行音频处理和播放,不能使用 Media Player 或 AudioTrack。

问题:

  1. 有谁知道什么可能导致此设备上报告的错误?
  2. 有没有办法确定哪些设备与 OpenSL ES 兼容?
  3. ARMv6 设备是否必然与 OpenSL ES 不兼容?

编辑 查看我对 HerrLip 的评论

  • NDK 文件夹中的 NativeAudio 示例在此设备上运行,并且 slCreateEngine 成功执行。这消除了我对该设备和其他 ARMv6 设备不受支持的怀疑。
  • 在 NativeAudio 示例中仍然无法加载 libmmparser.so 和 libmmparser_lite.so 库,但这似乎不是问题,因为它可以在设备上运行。
  • 我的应用程序比 NativeAudio 示例要多得多。也许内存限制会阻止 slCreateEngine 函数调用获取所需的资源。
0 投票
2 回答
1417 浏览

android - openSL Enqueue 只一个接一个地播放缓冲区?为什么不混?

在openSL中,当我创建一个simpleBufferQueue时,为什么它只能一个接一个地播放缓冲区?这种情况有什么帮助?更实际的用法是当我可以使用 5 个或更多缓冲区创建它时,它可以在我加入缓冲区后立即混合/同时播放它们!

到目前为止,一起播放声音的唯一方法是创建多个简单的缓冲区队列 AudioPlayers。

如果我在 openSL 文档中读到任何错误,请帮助和纠正!

0 投票
0 回答
1230 浏览

android - android 仅支持 OpenSL ES 中的 SLAndroidSimpleBufferQueueItf 吗?

SLAndroidSimpleBufferQueueItf 是 android openSL ES 支持的唯一缓冲区队列接口吗?此接口仅在 RegisterCallBack() 期间返回一个自定义指针集,但无法获取一些信息,因为哪个缓冲区至少通过某个 ID 或指针获取回调。有人可以提供一些关于如何识别回调中的缓冲区的提示吗?

谢谢。

0 投票
0 回答
89 浏览

android - 当我连接耳机时,音频硬件延迟会发生变化。[安卓]

连接耳机时,音频硬件延迟(从扬声器到麦克风)发生变化。这种差异的原因可能是什么?无论是否连接耳机,如何使硬件延迟保持不变?

任何意见和答案表示赞赏!

0 投票
1 回答
128 浏览

android - OpenSL 多轨

我一直在尝试为 Android 制作循环踏板。我有 1 条轨道运行良好。我想知道实现多个轨道需要什么样的资源/接口。我正在使用 OpenSL ES,并且我已经阅读了规范文档。

到目前为止的一些想法:

如何在输出混音中包含 n 个音轨?他们不会互相复合吗?我将如何标准化输出组合?一旦录制了一首曲目,我如何将这两个曲目合二为一?

为什么这些功能支持不足?我是在滥用图书馆还是使用了错误的图书馆?

我对音乐/声音编程非常感兴趣,并希望熟悉最常用的技术。