2017-02-18 23 views
2

При реализации проекта с использованием сверхмощных для Android звуковых эффектов, таких как flunge, echo, reverb и т. Д. Я могу сделать запись через собственный и файл записи во внешнем хранилище, а затем использовать суперсильный пример кроссфейдера. Я открываю этот файл и применяю к нему эффекты, которые работают хорошо.Как записать файл на внешнее хранилище с помощью сверхмощного SDK в Android?

Теперь мне нужно написать выходной файл во внешнем хранилище с помощью прикладных эффектов, но не знаю, как это сделать. Есть примеры iOS для этого, как SuperpoweredOfflineProcessingExample, , но я не нашел его решение для Android-файла. Любая помощь будет высоко оценена, чтобы сделать аудиовыход wav-файла с эффектами.

+0

См. Этот пост, это может помочь вам: http://stackoverflow.com/questions/28989182/superpowered-sdk-implementing-superpoweredrecorder-h-and-setting-up-recording-p – yakobom

ответ

2

У меня было требование применить эффект только к записанному звуку (так что у меня есть оригинальный wav и применить к нему эффект). Вот shapshot метода, который применяется в силу исходного файла и сохранить его в отдельный файл:

applyEffect(const char *input, const char *output, int effectId) { 

SuperpoweredDecoder *decoder = new SuperpoweredDecoder(); 

const char *openError = decoder->open(input, false); 
if (openError) { 
    delete decoder; 
    return false; 
}; 

FILE *fd = createWAV(output, decoder->samplerate, 2); 
if (!fd) { 
    delete decoder; 
    return false; 
}; 

float effectMix = 0.5f; 
SuperpoweredFX *effect = NULL; 
if (effectId == 0) { 
    effect = new SuperpoweredEcho(decoder->samplerate); 
    ((SuperpoweredEcho *) effect)->setMix(effectMix); 
} else if (effectId == 1) { 
    effect = new SuperpoweredReverb(decoder->samplerate); 
    ((SuperpoweredReverb *) effect)->setMix(effectMix); 
} 

if (effect == NULL) { 
    delete decoder; 
    return false; 
} 

effect->enable(true); 

// Create a buffer for the 16-bit integer samples coming from the decoder. 
short int *intBuffer = (short int *)malloc(decoder->samplesPerFrame * 2 * sizeof(short int) + 16384); 
// Create a buffer for the 32-bit floating point samples required by the effect. 
float *floatBuffer = (float *)malloc(decoder->samplesPerFrame * 2 * sizeof(float) + 1024); 

// Processing. 
while (true) { 
    // Decode one frame. samplesDecoded will be overwritten with the actual decoded number of samples. 
    unsigned int samplesDecoded = decoder->samplesPerFrame; 
    if (decoder->decode(intBuffer, &samplesDecoded) == SUPERPOWEREDDECODER_ERROR) { 
     break; 
    } 
    if (samplesDecoded < 1) { 
     break; 
    } 

    // Apply the effect. 

    // Convert the decoded PCM samples from 16-bit integer to 32-bit floating point. 
    SuperpoweredShortIntToFloat(intBuffer, floatBuffer, samplesDecoded); 

    effect->process(floatBuffer, floatBuffer, samplesDecoded); 

    // Convert the PCM samples from 32-bit floating point to 16-bit integer. 
    SuperpoweredFloatToShortInt(floatBuffer, intBuffer, samplesDecoded); 
    } 

    // Write the audio to disk. 
    fwrite(intBuffer, 1, samplesDecoded * 4, fd); 

}; 

// Cleanup. 
closeWAV(fd); 
delete decoder; 
delete effect; 
free(intBuffer); 
free(floatBuffer); 
return true; 

}

Новый файл будет создан с прикладной эффект. Надеюсь, вам это поможет!

+0

, когда я применяю реверберацию в звук становится медленнее и становится глубже (его шаг меняется). Я работал в течение 2 дней, пытаясь исправить это, но не смог добиться успеха. Я попытался изменить частоту дискретизации, размер буфера, но не успел. Вы можете мне помочь ? – ACAkgul

 Смежные вопросы

  • Нет связанных вопросов^_^