4

我对如何在 Android 上本地设置音调感到困惑。我尝试从使用 OpenSL ES 的 NDK 中更改原生声音样本,但在请求接口时,我得到了一个 SL_RESULT_FEATURE_UNSUPPORTED 用于几乎所有与音高相关的内容。尝试的接口:SL_IID_PITCH、SL_IID_RATEPITCH、SL_3DDOPPLER

// create audio player
const SLInterfaceID ids[3] = { SL_IID_BUFFERQUEUE, SL_IID_PITCH, SL_IID_VOLUME};
const SLboolean req[3] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE};
result = (*engineEngine)->CreateAudioPlayer(engineEngine, &bqPlayerObject, &audioSrc, &audioSnk,
        3, ids, req);
assert(SL_RESULT_SUCCESS == result);

结果总是 SL_RESULT_UNSUPPORTED

我的目标是 android-19。我也尝试了许多其他方法无济于事。难道我做错了什么?是否有不需要使用 Java 的替代方案?

谢谢!

4

2 回答 2

4

Android 具有 OpenSL 的最小实现,并且不支持这些接口。您可以在 NDK 文档或此处找到支持的内容(以及已添加的内容)的描述- 该链接与 NDK 中的文档完全相同。

不幸的是,除了编写自己的算法来更改 PCM 数据之外,没有其他简单的选择。

于 2013-12-21T05:11:18.067 回答
0

The Synthesis ToolKit (STK) has a pitch shift effect that may work for you. https://ccrma.stanford.edu/software/stk/

As Dave pointed out, there is no native solution. At present, I would say Android is not the place to look for good native audio support.

于 2014-01-03T18:48:16.497 回答