Advertisement
Guest User

Untitled

a guest
Feb 20th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. applyEffect(const char *input, const char *output, int effectId) {
  2.  
  3. SuperpoweredDecoder *decoder = new SuperpoweredDecoder();
  4.  
  5. const char *openError = decoder->open(input, false);
  6. if (openError) {
  7. delete decoder;
  8. return false;
  9. };
  10.  
  11. FILE *fd = createWAV(output, decoder->samplerate, 2);
  12. if (!fd) {
  13. delete decoder;
  14. return false;
  15. };
  16.  
  17. float effectMix = 0.5f;
  18. SuperpoweredFX *effect = NULL;
  19. if (effectId == 0) {
  20. effect = new SuperpoweredEcho(decoder->samplerate);
  21. ((SuperpoweredEcho *) effect)->setMix(effectMix);
  22. } else if (effectId == 1) {
  23. effect = new SuperpoweredReverb(decoder->samplerate);
  24. ((SuperpoweredReverb *) effect)->setMix(effectMix);
  25. }
  26.  
  27. if (effect == NULL) {
  28. delete decoder;
  29. return false;
  30. }
  31.  
  32. effect->enable(true);
  33.  
  34. // Create a buffer for the 16-bit integer samples coming from the decoder.
  35. short int *intBuffer = (short int *)malloc(decoder->samplesPerFrame * 2 * sizeof(short int) + 16384);
  36. // Create a buffer for the 32-bit floating point samples required by the effect.
  37. float *floatBuffer = (float *)malloc(decoder->samplesPerFrame * 2 * sizeof(float) + 1024);
  38.  
  39. // Processing.
  40. while (true) {
  41. // Decode one frame. samplesDecoded will be overwritten with the actual decoded number of samples.
  42. unsigned int samplesDecoded = decoder->samplesPerFrame;
  43. if (decoder->decode(intBuffer, &samplesDecoded) == SUPERPOWEREDDECODER_ERROR) {
  44. break;
  45. }
  46. if (samplesDecoded < 1) {
  47. break;
  48. }
  49.  
  50. // Apply the effect.
  51.  
  52. // Convert the decoded PCM samples from 16-bit integer to 32-bit floating point.
  53. SuperpoweredShortIntToFloat(intBuffer, floatBuffer, samplesDecoded);
  54.  
  55. effect->process(floatBuffer, floatBuffer, samplesDecoded);
  56.  
  57. // Convert the PCM samples from 32-bit floating point to 16-bit integer.
  58. SuperpoweredFloatToShortInt(floatBuffer, intBuffer, samplesDecoded);
  59. }
  60.  
  61. // Write the audio to disk.
  62. fwrite(intBuffer, 1, samplesDecoded * 4, fd);
  63.  
  64. };
  65.  
  66. // Cleanup.
  67. closeWAV(fd);
  68. delete decoder;
  69. delete effect;
  70. free(intBuffer);
  71. free(floatBuffer);
  72. return true;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement