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

android - Why OpenSL ES won't play audio every time an application is started

I'm implementing audio playback into my game engine using OpenSL ES on Android. So far I'm supporting Android file descriptor data locators (AndroidFD) only. The problem is, that the audio playback won't always work if I'm using wrapper classes for OpenSL ES.

The wrappers:

AudioEngine.cpp

Sound.cpp

Game.cpp

When the application starts, the sound won't always play. If I write all OpenSL ES code above inside Game::initialise(), the sound will always play. I can't figure out why the same code won't work inside the wrapper classes.

I ran the application on Samsung Galaxy S III (GT-I9305), Android 4.2.2, CyanogenMod 10.1.3-i9305

0 投票
0 回答
791 浏览

android - 带有 SL_ANDROID_STREAM_VOICE 的 Android 上的 OpenSL ES。麦克风输入极低

我正在使用 OpenSL ES 和 SL_ANDROID_STREAM_VOICE 将原生 Android 应用程序中的音频路由到耳朵(电话)扬声器而不是主扬声器。耳机的输出工作正常,但现在音频输入录音非常柔和。在这种情况下,有什么方法可以增强或重新配置麦克风?可接受通过 OpenSL ES 的 SDK 或 NDK。

谢谢!

0 投票
1 回答
2885 浏览

android - 如何配置 OpenSL 以使用除主扬声器或耳机以外的耳机

我已经在 android NDK 中尝试过原生音频代码示例。当我尝试录制一些语音然后播放时,它工作正常。它使用主扬声器(扬声器)进行语音播放。我想修改代码,以便在耳机而不是主扬声器中播放语音。有什么帮助吗?

0 投票
1 回答
393 浏览

android - 如何在 Android 中将人声转换为音符?

我正在尝试将来自 Android 麦克风的模拟数据存储到诸如 a4、b1 之类的音符中。我尝试使用aubio.org。但它是用 C 语言编写的。有没有其他开源代码可以做到这一点。如果奥比奥是这样做的方法,我该怎么做。

0 投票
0 回答
239 浏览

android - 如何使用 robotsium 测试是否在本机级别播放音频?

或者这甚至可能吗?我没有使用 MediaPlayer 或任何 java 级别的组件,而是使用 GStreamer 框架,该框架通过本机层的 OpenSL 运行。

我猜我必须使用 NDK 以某种方式连接到音频引擎。任何提示将不胜感激。

0 投票
0 回答
40 浏览

android - Android - 实时分析来电音频

有没有办法可以检查/分析正在进行的通话的传入语音/音频。我需要的只是一种检测对方是否在说话的方法(1 或 0)。无需复杂的处理。

我已经知道这种MediaRecorder.AudioSource.VOICE_DOWNLINK方式并且它只适用于几部手机。但我需要一些功能强大的东西,它至少适用于 75% 的手机。

我知道如果可能的话,将需要一些本机(JNI)代码。

我需要确认的是,由于手机的硬件架构,我应该寻找一种方法还是完全不可能(即使使用本机代码)?一些支持这一点的链接将非常有帮助。

0 投票
1 回答
531 浏览

android - 多个音频播放器(Java 或 C++),可实时修改

寻求有关在 Android 上播放音频的帮助。我们有一个 OpenGL 应用程序(Java + C++),现在我们想要播放声音效果。播放器应允许在播放时修改播放速率和音量。可能是 OpenSL 或 Audiotrack。

第一个问题? 是否有任何免费或商业库/包装器可以做这件事?(可能是 java 或本机)

..,如果没有,我会解释我们到目前为止所做的,以及我们遇到的问题。

我们使用 AudioTrack 实例创建了 MusicPlayer 类(扩展 AsyncTask)。在活动的 onResume() 中,我们创建了它的 5 个实例,在线程池上执行它。在任务的doInBackground()中,我们有一个运行循环检查状态变化、加载文件和写入缓冲区。在 JNI 中,我们有存储事件队列并每 10 毫秒将它们发送到 java 一次的单例。它以某种方式起作用,但距离被接受还差得很远。我们遇到以下问题:

  1. 当文件开始播放时,我们可以在开始时听到短促的噪音。比如点击什么的。
  2. 即使我们刷新或释放 AudioTrack,声音似乎也在队列中播放(尤其是当需要快速更改缓冲区时)
  3. 我们无法在 MODE_STREAM 中创建循环
  4. 当我们修改 AsyncTask 的局部变量 CHANGE_RATE 和 RATE 时,它应该调用 audioTrack.setPlaybackRate(RATE)。确实如此,但什么也没有发生。

我曾经用 Obj-C for iOS 编写,并且有很多“即用型”解决方案(例如 cocoacontrols)。从未想过在 Android 上处理声音会是一场噩梦;/ 任何帮助将不胜感激:)

0 投票
1 回答
542 浏览

android - 在 Android / OpenSL 中,我可以释放缓冲区队列中的单个缓冲区并将其排入队列,而不是清除整个缓冲区吗?

我正在开发一个Android纯粹C/C++的应用程序,该应用程序需要连续录制声音并同步处理数据,所以我想知道当我在openSL中使用缓冲区队列来录制声音时,我是否可以释放那些被填充的并在缓冲区队列中加入新的空队列?

我已经考虑了在所有缓冲区都填满时清除整个缓冲区队列并通过使用回调重新排队新缓冲区的解决方案,但我担心这个过程可能需要一些时间,并且我会在期间丢失数据时间。

0 投票
1 回答
2078 浏览

android - 什么是 SLDataLocator_AndroidSimpleBufferQueue (Android 4.3)?

下面的“2”代表什么:

从我读过的内容来看,它是缓冲区的数量。

为什么是2?为什么不只是 1 ?如果 2 更好,为什么不 10 让它变得更好呢?

谢谢

0 投票
2 回答
1552 浏览

java - Android OpenSL“pAudioSrc:数据格式 2 不允许” - 拒绝 SL_DATAFORMAT_PCM?

我正在尝试AudioPlayer使用缓冲队列源和输出混合接收器创建一个。我已将源配置为与 ndk 示例中显示的非常相似的 pcm 格式,但 OpenSL 拒绝SL_DATAFORMAT_PCM(“数据格式 2”)。这对我来说没有任何意义。

这是错误(在三星 Galaxy S2 上):

这是相关的代码:

有谁知道这是什么原因造成的?谢谢!