AudioSource.h
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:4k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. // VirtualDub - Video processing and capture application
  2. // Copyright (C) 1998-2001 Avery Lee
  3. //
  4. // This program is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // (at your option) any later version.
  8. //
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU General Public License for more details.
  13. //
  14. // You should have received a copy of the GNU General Public License
  15. // along with this program; if not, write to the Free Software
  16. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17. #ifndef f_AUDIOSOURCE_H
  18. #define f_AUDIOSOURCE_H
  19. #include <stdio.h>
  20. #include <windows.h>
  21. #include <vfw.h>
  22. #include "DubSource.h"
  23. #include "all.h"
  24. #include "crc.h"
  25. //#include "mibitstr.h"
  26. #include "header.h"
  27. #include "codec.h"
  28. class IAVIReadHandler;
  29. class IAVIReadStream;
  30. class AudioSource : public DubSource {
  31. public:
  32. WAVEFORMATEX *getWaveFormat() {
  33. return (WAVEFORMATEX *)getFormat();
  34. }
  35. };
  36. class AudioSourceWAV : public AudioSource {
  37. private:
  38. HMMIO hmmioFile;
  39. MMCKINFO chunkRIFF;
  40. MMCKINFO chunkDATA;
  41. LONG lCurrentSample;
  42. LONG bytesPerSample;
  43. public:
  44. AudioSourceWAV(char *fn, LONG inputBufferSize);
  45. ~AudioSourceWAV();
  46. BOOL init();
  47. virtual int _read(LONG lStart, LONG lCount, LPVOID lpBuffer, LONG cbBuffer, LONG *lSamplesRead, LONG *lBytesRead);
  48. };
  49. class AudioSourceAVI : public AudioSource {
  50. private:
  51. IAVIReadHandler *pAVIFile;
  52. IAVIReadStream *pAVIStream;
  53. BOOL _isKey(LONG lSample);
  54. public:
  55. AudioSourceAVI(IAVIReadHandler *pAVIFile);
  56. ~AudioSourceAVI();
  57. void Reinit();
  58. bool isStreaming();
  59. void streamBegin(bool fRealTime);
  60. void streamEnd();
  61. BOOL init();
  62. int _read(LONG lStart, LONG lCount, LPVOID lpBuffer, LONG cbBuffer, LONG *lSamplesRead, LONG *lBytesRead);
  63. };
  64. class AudioSourceMP3 : public AudioSource {
  65. private:
  66. Header *header;
  67. Ibitstream *stream;
  68. FILE *f;
  69. uint32 pos;
  70. public:
  71. AudioSourceMP3(char *fn);
  72. ~AudioSourceMP3();
  73. BOOL init();
  74. virtual int _read(LONG lStart, LONG lCount, LPVOID lpBuffer, LONG cbBuffer, LONG *lSamplesRead, LONG *lBytesRead);
  75. };
  76. class AudioSourceAC3 : public AudioSource {
  77. private:
  78. FILE *ac3File;
  79. MMCKINFO chunkRIFF;
  80. MMCKINFO chunkDATA;
  81. LONG lCurrentSample;
  82. LONG bytesPerSample;
  83. public:
  84. AudioSourceAC3(char *fn, LONG inputBufferSize);
  85. ~AudioSourceAC3();
  86. BOOL init();
  87. virtual int _read(LONG lStart, LONG lCount, LPVOID lpBuffer, LONG cbBuffer, LONG *lSamplesRead, LONG *lBytesRead);
  88. };
  89. class AudioSourceOggVorbis : public AudioSource {
  90. private:
  91. FILE *f;
  92. ogg_sync_state   oy; /* sync and verify incoming physical bitstream */
  93. ogg_stream_state os; /* take physical pages, weld into a logical stream of packets */
  94. ogg_page         og; /* one Ogg bitstream page.  Vorbis packets are inside */
  95. ogg_packet       op; /* one raw packet of data for decode */
  96.  
  97. vorbis_info      vi; /* struct that stores all the static vorbis bitstream
  98. settings */
  99. vorbis_comment   vc; /* struct that stores all the bitstream user comments */
  100. vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */
  101. vorbis_block     vb; /* local working space for packet->PCM decode */
  102. int eos;
  103. __int64 pos;
  104. LONG lCurrentSample;
  105. int pcm_samples;
  106. int pcm_written;
  107. BOOL streamInit();
  108. void readPage();
  109. void decodePage();
  110. public:
  111. AudioSourceOggVorbis(char *fn);
  112. ~AudioSourceOggVorbis();
  113. BOOL init();
  114. virtual int _read(LONG lStart, LONG lCount, LPVOID lpBuffer, LONG cbBuffer, LONG *lSamplesRead, LONG *lBytesRead);
  115. };
  116. #endif