问题标签 [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.

0 投票
1 回答
1048 浏览

android - 如何捕获音频数据并保存到 wav 文件?

我正在尝试将(捕获)音频数据记录到新的 wav 文件中。我正在使用 Oboe c++ 根据此示例代码缓冲音频

这就是我将音频数据从混音器捕获到 RecordBuffer 数组的方式:

停止记录并获取 Java 代码的短数组

然后在 Java 代码中,我创建了 wav 文件:

结果非常接近,但质量很差。有谁知道我做错了什么?顺便说一句,只有当我每个播放 1 个样本时它才能正常工作。

0 投票
1 回答
341 浏览

android - 使用 Oboe 库进行反馈中和的音频 I/O

我正在开发一个需要低延迟音频 I/O 的 Android DSP 项目。出于这个原因,我正在使用双簧管库。在LiveEffect示例中,演示了同步录制和回放。但是,对于声反馈中和,我需要另一种方式,即首先通过内置扬声器生成白噪声信号,然后使用麦克风记录它。我尝试使用这个被问到的问题修改LiveEffect示例,即将录制流设置为 Master(回调)并为播放流使用非阻塞写入方法。但是当我在 Pixel XL (Android 9.0) 上运行我的代码时出现以下错误:

这是我的回调:

我的方法对于生成信号然后通过麦克风捕获它是否正确?如果是这样,有人可以帮我解决这个错误吗?先感谢您。

0 投票
2 回答
2677 浏览

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 文件中上升。

提前致谢。

0 投票
2 回答
312 浏览

android - 使用双簧管更改播放速度

我正在开发一款节奏游戏,它的一个特点是每回合结束时,背景音轨都会提高播放速度。目前,我正在为每个背景音轨生成具有不同节奏的不同 pcm 文件。不幸的是,这会显着增加应用程序的大小。我在想是否有什么方法可以使用双簧管来改变它的播放速度?有没有人试过这个?您能否为我指出如何使用 ndk 执行此操作的正确方向?感谢帮助

0 投票
1 回答
265 浏览

android - Android双簧管 - 如何在打开后更改音频流的速率/频率

使用 Android SoundPool 时,您可以使用以下 API 更改播放速率并调整速率:

我的问题是如何在 Android 双簧管库中这样做。我知道您可以将频率设置为 AudioStreamBuilder,但是一旦打开了流,您可以即时更改速率吗?

0 投票
1 回答
746 浏览

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 。我正在使用这些类来加载我的资源并播放声音。 将音频数据写入输出缓冲区。AAssetManagerPlayer.renderAudio

以下是我的音频引擎中的相关方法:

0 投票
1 回答
288 浏览

android - 如何在双簧管 onAudioReady 方法中放大音频数据?

我想放大使用双簧管库由麦克风录制的音频数据。我像这样创建了 AudioEngine.cpp:https://github.com/google/oboe/blob/master/samples/LiveEffect/src/main/cpp/LiveEffectEngine.cpp 这是具有 audioData 的类:

0 投票
2 回答
964 浏览

android - 如何使用 Android 的双簧管/AAudio 从多个麦克风读取数据

我对使用 Android Oboe 库访问手机上的两个麦克风很感兴趣。大多数手机都有双麦克风配置,我想同时从两者读取数据。我扩展了双簧管的“LiveAffect”样本,并尝试了以下方法:

  1. 有两个双簧管::AudioStream,一个用于我手机上的每个麦克风(注 9 和像素 1)。只运行一个流工作正常,我能够读取数据并播放/保存到文件。但是启动两个流都不起作用(尝试通过以下方式启动第二个流时出现以下错误stream->requestStart()E/AUDIO-APP:错误启动流。ErrorInvalidState)。显然,启动两个输入流是一个 Android 限制,正如这个 SO 问题中所讨论的那样:Android Oboe Library: 2 个流从 2 个录制设备录制可能吗?

  2. 有一个流但有 2 个频道。->setChannelCount(oboe::ChannelCount::Stereo);我的 Note 9 上的两个麦克风属于同一组,但是当我打开一个带有 2 个通道(我尝试过使用AudioStreamBuilder设置,例如 setting ->setInputPreset(oboe::InputPreset::Camcorder)。没有任何InputPresets设置修复它,仍然在两个通道中镜像数据。

两次尝试都无法使用 OpenSL 后端。

0 投票
1 回答
103 浏览

android - 如何同时从 2 个内置扬声器产生 2 种不同的声音

是否可以在 Android 上同时从 2 个内置扬声器(1=主扬声器,2=听筒扬声器)播放 2 种不同的声音,最好使用双簧管C++ 库。

在这个线程中,有人问了一个类似的问题,但针对 2 种不同的音频设备。就我而言,我只想通过 2 个不同的扬声器在同一个音频设备上播放。

可以使用立体声通道同时记录来自内置麦克风的数据。扬声器的类似方法不起作用。

非常感谢任何帮助,谢谢。

笔记:

音频设备一词是指能够接收或发送音频的设备。音频设备可以连接多个麦克风和/或扬声器,它们表示为不同的通道。

调试设备是运行 Android 9 的 Google Pixel XL

0 投票
1 回答
113 浏览

android - 什么可能会改变声音输出

我正在开发一个 Android 应用程序,该应用程序处理我需要向其发送一些信号的设备(如特定的方波,在设备的固件中硬编码)。

Superpowered Audio 一切正常,但现在我正在迁移到双簧管,这些信号不再起作用。我的信号生成代码没有改变,所以我想知道在哪里可以改变输出。

在我的广播接收器中,我有这段代码可以将输出音量设置为最大值:

清单包含以下内容:

播放流配置如下:

播放了一些声音,我听的时候可以听到,所以我的回调正常工作,但设备无法解析信号。手机未处于“请勿打扰”模式,我禁用了均衡器。

我正在运行 OxygenOS 9.0.6 (Android 9) 的 OnePlus 5t 上测试所有这些,但我没有想法。