AudioDecoderProvider.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #define LOG_TAG "AudioDecoderProvider"
  2. #include "audio/android/AudioDecoderProvider.h"
  3. #include "audio/android/AudioDecoderSLES.h"
  4. #include "audio/android/AudioDecoderOgg.h"
  5. #include "audio/android/AudioDecoderMp3.h"
  6. #include "audio/android/AudioDecoderWav.h"
  7. #include "platform/CCFileUtils.h"
  8. namespace cocos2d { namespace experimental {
  9. AudioDecoder* AudioDecoderProvider::createAudioDecoder(SLEngineItf engineItf, const std::string &url, int bufferSizeInFrames, int sampleRate, const FdGetterCallback &fdGetterCallback)
  10. {
  11. AudioDecoder* decoder = nullptr;
  12. std::string extension = FileUtils::getInstance()->getFileExtension(url);
  13. ALOGV("url:%s, extension:%s", url.c_str(), extension.c_str());
  14. if (extension == ".ogg")
  15. {
  16. decoder = new AudioDecoderOgg();
  17. if (!decoder->init(url, sampleRate))
  18. {
  19. delete decoder;
  20. decoder = nullptr;
  21. }
  22. }
  23. else if (extension == ".mp3")
  24. {
  25. decoder = new AudioDecoderMp3();
  26. if (!decoder->init(url, sampleRate))
  27. {
  28. delete decoder;
  29. decoder = nullptr;
  30. }
  31. }
  32. else if (extension == ".wav")
  33. {
  34. decoder = new AudioDecoderWav();
  35. if (!decoder->init(url, sampleRate))
  36. {
  37. delete decoder;
  38. decoder = nullptr;
  39. }
  40. }
  41. else
  42. {
  43. auto slesDecoder = new AudioDecoderSLES();
  44. if (slesDecoder->init(engineItf, url, bufferSizeInFrames, sampleRate, fdGetterCallback))
  45. {
  46. decoder = slesDecoder;
  47. }
  48. else
  49. {
  50. delete slesDecoder;
  51. }
  52. }
  53. return decoder;
  54. }
  55. void AudioDecoderProvider::destroyAudioDecoder(AudioDecoder** decoder)
  56. {
  57. if (decoder != nullptr && *decoder != nullptr)
  58. {
  59. delete (*decoder);
  60. (*decoder) = nullptr;
  61. }
  62. }
  63. }} // namespace cocos2d { namespace experimental {