/decoders/audio/all.d

http://github.com/wilkie/djehuty · D · 134 lines · 98 code · 24 blank · 12 comment · 16 complexity · 6931726ea5165e5469ad07b3153ea5cf MD5 · raw file

  1. module decoders.audio.all;
  2. import io.audio;
  3. import io.wavelet;
  4. import core.time;
  5. import core.string;
  6. import core.stream;
  7. import core.definitions;
  8. import decoders.decoder;
  9. import decoders.audio.decoder;
  10. version(NoWaveAudio) {
  11. }
  12. else {
  13. public import decoders.audio.wav : WAVDecoder;
  14. }
  15. version(NoMp2Audio) {
  16. }
  17. else {
  18. public import decoders.audio.mp2 : MP2Decoder;
  19. }
  20. version(NoMp3Audio) {
  21. }
  22. else {
  23. public import decoders.audio.mp3 : MP3Decoder;
  24. }
  25. // MP1
  26. // MP3
  27. // MP4
  28. // AUD
  29. // SND
  30. // XM
  31. // IT
  32. // RA
  33. // WMA
  34. // OGG
  35. template RunCodec(string codec) {
  36. const char[] RunCodec = `
  37. audioCodec = new ` ~ codec ~ `Decoder();
  38. pos = stream.position;
  39. if ((ret = audioCodec.decode(stream, buffer, wf)) != StreamData.Invalid) {
  40. return ret;
  41. }
  42. stream.position = pos;
  43. `;
  44. }
  45. template MixinType(string typename) {
  46. const char[] MixinType = "alias " ~ typename ~ " ToType;";
  47. }
  48. template ToType(string typename) {
  49. mixin(MixinType!(typename));
  50. }
  51. template TestCodec(string codec) {
  52. AudioDecoder TestCodec(string extension) {
  53. AudioDecoder ret = new ToType!(codec ~ "Decoder");
  54. if (ret.extension == extension) {
  55. return ret;
  56. }
  57. return null;
  58. }
  59. }
  60. AudioDecoder findBestCodec(string extension) {
  61. AudioDecoder ret;
  62. version(NoWaveAudio) {
  63. }
  64. else {
  65. ret = TestCodec!("WAV")(extension);
  66. if (ret !is null) {
  67. return ret;
  68. }
  69. }
  70. version(NoMp2Audio) {
  71. }
  72. else {
  73. ret = TestCodec!("MP2")(extension);
  74. if (ret !is null) {
  75. return ret;
  76. }
  77. }
  78. version(NoMp3Audio) {
  79. }
  80. else {
  81. ret = TestCodec!("MP3")(extension);
  82. if (ret !is null) {
  83. return ret;
  84. }
  85. }
  86. return null;
  87. }
  88. StreamData runAllCodecs(ref AudioDecoder audioCodec, Stream stream, Wavelet buffer, ref AudioInfo wf) {
  89. StreamData ret;
  90. ulong pos;
  91. version(NoWaveAudio) {
  92. }
  93. else {
  94. mixin(RunCodec!("WAV"));
  95. }
  96. version(NoMp2Audio) {
  97. }
  98. else {
  99. mixin(RunCodec!("MP2"));
  100. }
  101. version(NoMp3Audio) {
  102. }
  103. else {
  104. mixin(RunCodec!("MP3"));
  105. }
  106. audioCodec = null;
  107. return StreamData.Invalid;
  108. }
  109. // Codecs:
  110. //mixin(CreateCodecArray!());