Попробуйте создать 31-полосный эквалайзер, который будет работать со всем мультимедийным контентом устройства, используя класс SuperpoweredNBandEQ (). Я могу заставить его работать только с микрофоном, а не с мультимедиа.
Мой тестовый код:
static SuperpoweredAndroidAudioIO *audioIO;
static SuperpoweredNBandEQ *eq;
static float *floatBuffer;
// This is called periodically by the audio engine.
static bool audioProcessing (
void * __unused clientdata, // custom pointer
short int *audio, // buffer of interleaved samples
int numberOfFrames, // number of frames to process
int __unused samplerate // sampling rate
) {
SuperpoweredShortIntToFloat(audio, floatBuffer, (unsigned int)numberOfFrames);
SuperpoweredFloatToShortInt(floatBuffer, audio,(unsigned int)numberOfFrames);
eq->process(floatBuffer, floatBuffer, (unsigned int)numberOfFrames);
return true;
}
extern "C" JNIEXPORT void
Java_com_oxidocs_equalizer_Home_StartAudio(
JNIEnv * __unused env,
jobject __unused obj,
jint samplerate,
jint buffersize
){
float bands []= {20,25,31,40,50,63,80,100,125,160,200,250,315,400,500,630,800,1000,12500,1600,2000,2500,3150,4000,5000,6300,8000,10000,12500,16000,20000};
// allocate audio buffer
floatBuffer = (float *)malloc(sizeof(float) * 2 * buffersize);
// initialize Eq
eq = new SuperpoweredNBandEQ((unsigned int) samplerate, bands);
// init audio with audio callback function
audioIO = new SuperpoweredAndroidAudioIO (
samplerate, // sampling rate
buffersize, // buffer size
false, // enableInput
true, // enableOutput
audioProcessing, // process callback function
NULL, // clientData
-1, // inputStreamType (-1 = default)
SL_ANDROID_STREAM_MEDIA, // outputStreamType (-1 = default)
buffersize * 2 // latencySamples
);
}
extern "C" JNIEXPORT void
Java_com_oxidocs_equalizer_Home_StartEqualizer (
JNIEnv * __unused env,
jobject __unused obj
){
eq->setBand((unsigned int)23, (float)36.0 );
eq->enable(true);
}
Я пытаюсь обработать медиапоток, но я могу сделать это только с микрофоном