问题标签 [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 - 如何更改音频音高?
我正在使用Oboe C++ 库在我的 android 应用程序中播放声音。我想改变我的音频样本的音高。所以,我开始创建“ mPos ”浮点值来保存当前播放的帧,并在每一步添加“ mPitch ”值。
似乎使用新的音高可以正确播放音频,但是当音高高(例如 1.2)并发出奇怪的噪音以及音高低(例如 0.212)时,它是自身的两倍。
这是我第一次进行音频编程,在发布这个问题之前我做了很多研究。我什至直接向“双簧管”支持发送消息但没有响应。有谁知道如何正确实施 Pitch?
流长度始终为192
channelCount总是2
代码:
android - 如何从两个扬声器播放?
我有 Pixel 2XL,这个设备有 2 个扬声器,一个在顶部,一个在底部。
所以,对于声音播放,我使用双簧管库
https://github.com/google/oboe/tree/master/samples/hello-oboe
但我注意到声音仅从顶部的一个扬声器播放。
但例如,PlayMarket 上有一个应用程序 - SoundCloud,如果我尝试从该应用程序播放某些内容,我会听到声音从顶部和底部的两个扬声器发出。
所以,我假设应该在双簧管库上有一个设置,以便设置我需要如何从哪个扬声器播放声音等等。
但我没有找到任何关于它的信息。
怎么做?
android - 永远不会调用 Oboe 的 onAudioReady 回调方法
我正在将双簧管库用于在 Qt 中开发的音乐 android 应用程序。
在我从 AudioStreamCallback 派生的声音处理类中,我使用构建器创建录制和播放流,这工作正常,我收到 AAUDIO_OK 作为打开两个流的结果。我已将此类注册为两个流上的回调,但由于某种原因,我的 onAudioReady 回调方法从未为任何一个流调用。我在下面简化了我的代码,但这让我发疯,我一定是在做一些基本上错误的事情,但我无法弄清楚。
因此,当我在 android 模拟器中运行应用程序时,我会在控制台中得到以下信息:
c++ - 通过 Flutter 从 C++ 插件访问资产
由于延迟低,我正在尝试将 Google Oboe 用于 3D 音频处理应用程序。该应用程序将有一个 C++ 后端,它负责处理,前端由 Flutter 完成。我正在运行一些测试以查看它是否可以工作,但我在将资产从 Flutter 加载到双簧管时遇到问题。我检查了 Oboe 的repo中的示例 RhythmGame ,使用 Java 完成,但无法安静地找到直接从 Dart 到 C++ 的方法。前后端的连接是通过dart::ffi
这是我到目前为止所尝试的。根据 Richard Heap在此处发布的示例,我将noise
变量从正弦波更改为 wav 文件中歌曲的短片段:
然后 Dart 中的这个函数调用原生库的 Dart 包装器:
Dart 中的包装器是:
_streamWrite
是 C++ 中的本机函数:
现在我能听到这首歌,但它的失真太大了。尝试使用正弦时,我也能听到它,但它也有一些失真。我还没有在双簧管中使用回调模式,因为我想先试试这是否有效。
c++ - 在 Flutter 应用程序中使用来自 Android NDK 的 AssetManager 类
我一直在尝试在我的 Flutter 应用程序中使用 Android NDK 的AssetManager类来访问音频文件,该类与Google Oboe一起使用。按照Oboe 存储库中的这个示例,我了解到他们是AssetManager
这样从 Java 获取的:
基本上,jAssetManager
它们通过 JNI 接口从 Java 传递给 C++ 函数的参数。现在我没有使用 JNI,因为我使用的是 Flutter 和 Dart,而 Dart 中与 C++ 函数通信的方式是通过dart:ffi,但是由于我可以创建一个的唯一方法AssetManager
是 with AAssetManager_fromJava(env, jAssetManager)
,所以我需要这两个参数我找不到用 Flutter 和 Dart 替换的方法。
我做了一些研究,当我创建 Flutter FFI 插件时,显然 Dart 代码与 Kotlin 代码通信,然后调用本机 C++ 函数。
这是我的 C++ 函数:
这是该函数的 Dart 包装器:
这是我在 FFI 插件实现中找到的 Kotlin 代码:
最后,这是 Oboe 的人们如何使用 JNI 和 Java 处理它的:
android - 错误:未定义对 'oboe::AudioStreamBuilder::openStream(oboe::AudioStream**)' 的引用
我正在尝试从我的 Android NDK 应用程序中使用 Google Oboe。当我尝试使用 native-lib.cpp 中的 oboe::AudioStreamBuilder 时,一切正常。但是,当我尝试从一个类中使用 oboe::AudioStreamBuilder 时,我在重建项目时收到错误消息“错误:未定义对 'oboe::AudioStreamBuilder::openStream(oboe::AudioStream**)' 的引用”。
这是可以的 native-lib.cpp :
这是无法编译的类:
CMakeLists.txt 文件:
android - 如何让这个类成为单身人士?
我正在尝试将这门课作为单身人士,但没有成功。你会怎么做?我在互联网上看到我应该对头文件和 cpp 文件进行修改。我只尝试通过更改 cpp 文件...我需要做的是能够从 JNI 调用中访问布尔“isRecording”。
谢谢。
双簧管录音机.cpp
双簧管录音机.h
android - 开始双簧管录音后主 UI 线程被阻塞
我编写了一个基本应用程序,它开始使用双簧管库进行录音。在 MainActivity 中有 2 个按钮调用 2 个 JNI 函数,它们是:
- 录制音频()
- 停止录制()
在 native-lib.cpp 中,这两个 JNI 函数定义如下:
OboeAudioRecorder 类是一个单例。
当我点击开始录制的按钮时,录制已经开始了。但是当我想单击停止录制的按钮时,无法单击该按钮。我认为双簧管录音的开始阻塞了主 UI 线程。
OboeAudioRecorder 单例类可以在以下位置查看: https ://github.com/reuniware/OboeAudioRecorder/blob/master/app/src/main/cpp/OboeAudioRecorder.cpp
如何避免这种情况?谢谢。
android - 与android ndk混合后是否可以访问音频输出流?
我正在尝试修改来自例如媒体播放器应用程序的音频输出流,然后再将其发送到 android 上的扬声器。这在理论上有可能吗?
android - 使用双簧管时,设置输入和输出流时通道数是否可能不匹配?
使用Android双簧管库时,是否可以将输入通道设置为单声道,将输出通道设置为立体声?然后通过使用单声道到立体声转换中给出的类似方法将单声道样本值写入立体声输出通道?
无需任何转换并直接将通道设置为单声道和立体声会导致输出高音。