Как использовать SuperpoweredNBandEQ для выравнивания аудиопотока устройства? - PullRequest
0 голосов
/ 22 января 2019

Попробуйте создать 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);
    }

Я пытаюсь обработать медиапоток, но я могу сделать это только с микрофоном

...