00001 //------------------------------------------------------------------------------ 00002 // Lamp : Open source game middleware 00003 // Copyright (C) 2004 Junpei Ohtani ( Email : junpee@users.sourceforge.jp ) 00004 // 00005 // This library is free software; you can redistribute it and/or 00006 // modify it under the terms of the GNU Lesser General Public 00007 // License as published by the Free Software Foundation; either 00008 // version 2.1 of the License, or (at your option) any later version. 00009 // 00010 // This library is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 // Lesser General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU Lesser General Public 00016 // License along with this library; if not, write to the Free Software 00017 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00018 //------------------------------------------------------------------------------ 00019 00020 /** @file 00021 * Waveリーダヘッダ 00022 * @author Junpee 00023 */ 00024 00025 #ifndef WAVE_READER_H_ 00026 #define WAVE_READER_H_ 00027 00028 #include <Sound/Reader/SoundReader.h> 00029 #include <Core/InputOutput/FilePath.h> 00030 00031 namespace Lamp{ 00032 00033 //------------------------------------------------------------------------------ 00034 /** 00035 * Waveリーダ 00036 */ 00037 class WaveReader : public SoundReader{ 00038 public: 00039 /** 00040 * コンストラクタ 00041 * @param filePath ファイルパス 00042 */ 00043 WaveReader(const FilePath& filePath); 00044 00045 /** 00046 * デストラクタ 00047 */ 00048 virtual ~WaveReader(); 00049 00050 //-------------------------------------------------------------------------- 00051 /** 00052 * サイズの取得 00053 * @return サイズ 00054 */ 00055 virtual u_int getSize() const{ 00056 Assert(initialized_); 00057 return size_; 00058 } 00059 00060 /** 00061 * サンプル数の取得 00062 * @return サンプル数 00063 */ 00064 virtual int getSample() const{ 00065 Assert(initialized_); 00066 return sample_; 00067 } 00068 00069 /** 00070 * チャンネル数の取得 00071 * @return チャンネル数 00072 */ 00073 virtual int getChannel() const{ 00074 Assert(initialized_); 00075 return channel_; 00076 } 00077 00078 /** 00079 * ビット数の取得 00080 * @return ビット数 00081 */ 00082 virtual int getBit() const{ 00083 Assert(initialized_); 00084 return bit_; 00085 } 00086 00087 /** 00088 * コメントの取得 00089 * @return コメント 00090 */ 00091 virtual const String& getComment(){ 00092 Assert(initialized_); 00093 return comment_; 00094 } 00095 00096 //-------------------------------------------------------------------------- 00097 /** 00098 * 位置の設定 00099 * @param cursor 設定する位置 00100 */ 00101 virtual void setCursor(u_int cursor); 00102 00103 /** 00104 * 位置の取得 00105 * @return 位置 00106 */ 00107 virtual u_int getCursor(){ return cursor_; } 00108 00109 //-------------------------------------------------------------------------- 00110 /** 00111 * ヘッダ読み込み 00112 * @return 成功すればtrue 00113 */ 00114 virtual bool readHeader(); 00115 00116 /** 00117 * 読み込み 00118 * @param buffer 読み込みバッファ 00119 * @param size 読み込みサイズ 00120 * @return 読み込んだサイズ。終端なら0、失敗すれば-1 00121 */ 00122 virtual int read(void* buffer, u_int size); 00123 00124 //-------------------------------------------------------------------------- 00125 /** 00126 * ファイルがWaveファイルか 00127 * @param filePath ファイルパス 00128 * @return Waveファイルならtrue 00129 */ 00130 static bool isWaveFileName(const FilePath& filePath){ 00131 return filePath.getExtension().equals("wav"); 00132 } 00133 00134 private: 00135 // ファイルパス 00136 FilePath filePath_; 00137 // ファイルハンドル 00138 HMMIO handle_; 00139 // RIFFチャンク 00140 MMCKINFO riffChunk_; 00141 // データチャンク 00142 MMCKINFO dataChunk_; 00143 // コメント 00144 String comment_; 00145 // データオフセット 00146 int dataOffset_; 00147 // 読み込み位置 00148 u_int cursor_; 00149 // サイズ 00150 u_int size_; 00151 // サンプル数 00152 int sample_; 00153 // チャンネル数 00154 int channel_; 00155 // ビット数 00156 int bit_; 00157 // 初期化済みフラグ 00158 bool initialized_; 00159 00160 }; 00161 00162 //------------------------------------------------------------------------------ 00163 } // End of namespace Lamp 00164 #endif // End of WAVE_READER_H_ 00165 //------------------------------------------------------------------------------