问题标签 [oboe]
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.
android - 如何捕获音频数据并保存到 wav 文件?
我正在尝试将(捕获)音频数据记录到新的 wav 文件中。我正在使用 Oboe c++ 根据此示例代码缓冲音频
这就是我将音频数据从混音器捕获到 RecordBuffer 数组的方式:
停止记录并获取 Java 代码的短数组
然后在 Java 代码中,我创建了 wav 文件:
结果非常接近,但质量很差。有谁知道我做错了什么?顺便说一句,只有当我每个播放 1 个样本时它才能正常工作。
android - 使用 Oboe 库进行反馈中和的音频 I/O
我正在开发一个需要低延迟音频 I/O 的 Android DSP 项目。出于这个原因,我正在使用双簧管库。在LiveEffect示例中,演示了同步录制和回放。但是,对于声反馈中和,我需要另一种方式,即首先通过内置扬声器生成白噪声信号,然后使用麦克风记录它。我尝试使用这个被问到的问题修改LiveEffect示例,即将录制流设置为 Master(回调)并为播放流使用非阻塞写入方法。但是当我在 Pixel XL (Android 9.0) 上运行我的代码时出现以下错误:
这是我的回调:
我的方法对于生成信号然后通过麦克风捕获它是否正确?如果是这样,有人可以帮我解决这个错误吗?先感谢您。
android - 我在哪里可以找到适用于带有双簧管的新 android studio 项目的 CMakeLists.txt?
我正在用双簧管开始一个新项目。我在Github/Oboe上使用完全相同的 CMakeLists.txt 。
老实说,这是我的第一个android原生项目。我对 C++ 有扎实的了解,但我一生中从未使用过 CMake。我已经尝试了几个小时来“修复”示例 CMakeLists.txt 文件(到处研究以了解每一行的作用),但这很累,因为我就像玻璃器皿上的大象。每次我触摸一条线,错误都会因为我而“变异”。
我的目标不是学习 CMake(至少现在,尽管我在不久的将来肯定会需要它),而是让 lib 工作,这样我就可以开始完成工作了。
所以这是我的问题:我在哪里可以找到 CMakeLists.txt 的工作副本,其中双簧管作为单一依赖项开始制造噪音?如果它根本不存在,并且我必须在对本机编程进行任何移动之前肯定学习 CMake 相关的东西,那么任何起点或建议都将受到高度赞赏。
我已经阅读了 NDK CMake 指南,并搜索了很多带有错误“无法为不是由该项目构建的目标 'xxxxxxx' 指定链接库”的 SO 问题,但这个错误甚至从双簧管 CMakeLists.txt 文件中上升。
提前致谢。
android - 使用双簧管更改播放速度
我正在开发一款节奏游戏,它的一个特点是每回合结束时,背景音轨都会提高播放速度。目前,我正在为每个背景音轨生成具有不同节奏的不同 pcm 文件。不幸的是,这会显着增加应用程序的大小。我在想是否有什么方法可以使用双簧管来改变它的播放速度?有没有人试过这个?您能否为我指出如何使用 ndk 执行此操作的正确方向?感谢帮助
android - Android双簧管 - 如何在打开后更改音频流的速率/频率
使用 Android SoundPool 时,您可以使用以下 API 更改播放速率并调整速率:
我的问题是如何在 Android 双簧管库中这样做。我知道您可以将频率设置为 AudioStreamBuilder,但是一旦打开了流,您可以即时更改速率吗?
c++ - 原始文件未播放或播放不正确 - 双簧管 (Android-ndk)
我正在尝试在我的 android 应用程序中播放原始(int16 PCM)编码的音频文件。我一直在关注和阅读 Oboe 文档/示例,以尝试播放我自己的音频文件之一。
我需要播放的音频文件大约为 6kb,即 1592 帧(立体声)。
没有声音播放,或者在启动时播放声音/抖动(输出不同 - 见下文)
故障排除
更新 我已经切换到用于缓冲区队列的浮点数,而不是将所有内容都保留为 int16_t(并在完成后转换回 int16_t),尽管现在我又没有声音了。
音频似乎没有播放,或者在启动时播放(这是错误的)。我按“开始”后应该播放声音。
当应用程序仅使用 int16_t 实现时,过早的声音与缓冲区大小有关。如果缓冲区大小小于音频文件,则声音会非常快且被削波(在缓冲区大小较小时更像无人机)。比原始音频大小更大,它似乎在循环播放,并且在更高的缓冲区大小下变得更安静。按下开始按钮时,声音也会变得“更柔和”。我什至不完全确定这是否意味着正在播放原始音频,它可能只是来自 Android 的随机无意义的抖动。
当用浮点数填充缓冲区并随后转换为 int16_t 时,不会播放音频。
(我试过运行 systrace,但老实说我不知道我在找什么)
- 流打开正常。
- 缓冲区大小无法调整
createPlaybackStream()
(尽管它仍以某种方式将其设置为突发大小的两倍) - 流开始正常。
- 原始资源加载正常。
执行
我目前在构建器中尝试的内容:
- 将回调设置为
this
, 或onAudioReady()
- 将性能模式设置为
LowLatency
- 将共享模式设置为
Exclusive
- 将缓冲区容量设置为(大于我的音频文件帧数)
- 将突发大小(每次回调的帧数)设置为(等于或小于缓冲区容量 / 2 的任意值)
我在这里使用节奏游戏示例中的Player
类和类: https ://github.com/google/oboe/blob/master/samples/RhythmGame 。我正在使用这些类来加载我的资源并播放声音。 将音频数据写入输出缓冲区。AAssetManager
Player.renderAudio
以下是我的音频引擎中的相关方法:
android - 如何在双簧管 onAudioReady 方法中放大音频数据?
我想放大使用双簧管库由麦克风录制的音频数据。我像这样创建了 AudioEngine.cpp:https://github.com/google/oboe/blob/master/samples/LiveEffect/src/main/cpp/LiveEffectEngine.cpp 这是具有 audioData 的类:
android - 如何使用 Android 的双簧管/AAudio 从多个麦克风读取数据
我对使用 Android Oboe 库访问手机上的两个麦克风很感兴趣。大多数手机都有双麦克风配置,我想同时从两者读取数据。我扩展了双簧管的“LiveAffect”样本,并尝试了以下方法:
有两个双簧管::AudioStream,一个用于我手机上的每个麦克风(注 9 和像素 1)。只运行一个流工作正常,我能够读取数据并播放/保存到文件。但是启动两个流都不起作用(尝试通过以下方式启动第二个流时出现以下错误
stream->requestStart()
:E/AUDIO-APP:错误启动流。ErrorInvalidState)。显然,启动两个输入流是一个 Android 限制,正如这个 SO 问题中所讨论的那样:Android Oboe Library: 2 个流从 2 个录制设备录制可能吗?有一个流但有 2 个频道。
->setChannelCount(oboe::ChannelCount::Stereo);
我的 Note 9 上的两个麦克风属于同一组,但是当我打开一个带有 2 个通道(我尝试过使用AudioStreamBuilder
设置,例如 setting->setInputPreset(oboe::InputPreset::Camcorder)
。没有任何InputPresets
设置修复它,仍然在两个通道中镜像数据。
两次尝试都无法使用 OpenSL 后端。
android - 什么可能会改变声音输出
我正在开发一个 Android 应用程序,该应用程序处理我需要向其发送一些信号的设备(如特定的方波,在设备的固件中硬编码)。
Superpowered Audio 一切正常,但现在我正在迁移到双簧管,这些信号不再起作用。我的信号生成代码没有改变,所以我想知道在哪里可以改变输出。
在我的广播接收器中,我有这段代码可以将输出音量设置为最大值:
清单包含以下内容:
播放流配置如下:
播放了一些声音,我听的时候可以听到,所以我的回调正常工作,但设备无法解析信号。手机未处于“请勿打扰”模式,我禁用了均衡器。
我正在运行 OxygenOS 9.0.6 (Android 9) 的 OnePlus 5t 上测试所有这些,但我没有想法。