Android attachAuxEffect和OpenSL ES
在Android中使用时,您可以调用以附加音频效果。在使用OpenSL ES进行音频播放时,是否有类似的方法或途径?我似乎找不到类似的方法。在NDK home/samples/native audio目录中有一个关于如何使用OpenSL ES本机音频的示例 看看这段代码(我们在这里应用了混响效果):Android attachAuxEffect和OpenSL ES,android,audiotrack,opensl,Android,Audiotrack,Opensl,在Android中使用时,您可以调用以附加音频效果。在使用OpenSL ES进行音频播放时,是否有类似的方法或途径?我似乎找不到类似的方法。在NDK home/samples/native audio目录中有一个关于如何使用OpenSL ES本机音频的示例 看看这段代码(我们在这里应用了混响效果): 请注意,Android OpenSL ES实现是OpenSL ES的一个子集,OpenSL ES是OpenSL的一个子集:某些效果可能无法在所有设备上使用。可以找到关于这方面的非常简短的解释。我熟悉
请注意,Android OpenSL ES实现是OpenSL ES的一个子集,OpenSL ES是OpenSL的一个子集:某些效果可能无法在所有设备上使用。可以找到关于这方面的非常简短的解释。我熟悉这段代码,但是您提供的代码片段并不能完成调用“attachAuxEffect”并传递效果id的任务。@WilliamSeemann我不这么认为。AudioTrack是一个高级API,它屏蔽了底层音频框架的许多复杂性(如源到汇路径);这意味着OpensSL ES API可能“不同”,但实现了相同的功能。
...
// create the engine and output mix objects
void Java_com_example_nativeaudio_NativeAudio_createEngine(JNIEnv* env, jclass clazz)
{
SLresult result;
// create engine
result = slCreateEngine(&engineObject, 0, NULL, 0, NULL, NULL);
assert(SL_RESULT_SUCCESS == result);
(void)result;
// realize the engine
result = (*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE);
assert(SL_RESULT_SUCCESS == result);
(void)result;
// get the engine interface, which is needed in order to create other objects
result = (*engineObject)->GetInterface(engineObject, SL_IID_ENGINE, &engineEngine);
assert(SL_RESULT_SUCCESS == result);
(void)result;
// create output mix, with environmental reverb specified as a non-required interface
const SLInterfaceID ids[1] = {SL_IID_ENVIRONMENTALREVERB};
const SLboolean req[1] = {SL_BOOLEAN_FALSE};
result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 1, ids, req);
assert(SL_RESULT_SUCCESS == result);
(void)result;
// realize the output mix
result = (*outputMixObject)->Realize(outputMixObject, SL_BOOLEAN_FALSE);
assert(SL_RESULT_SUCCESS == result);
(void)result;
// get the environmental reverb interface
// this could fail if the environmental reverb effect is not available,
// either because the feature is not present, excessive CPU load, or
// the required MODIFY_AUDIO_SETTINGS permission was not requested and granted
result = (*outputMixObject)->GetInterface(outputMixObject, SL_IID_ENVIRONMENTALREVERB,
&outputMixEnvironmentalReverb);
if (SL_RESULT_SUCCESS == result) {
result = (*outputMixEnvironmentalReverb)->SetEnvironmentalReverbProperties(
outputMixEnvironmentalReverb, &reverbSettings);
(void)result;
}
// ignore unsuccessful result codes for environmental reverb, as it is optional for this example
}