?
Diff: SD_WavReader.hpp
- Revision:
- 0:cacfc9e25452
diff -r 000000000000 -r cacfc9e25452 SD_WavReader.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SD_WavReader.hpp Tue Jun 04 21:58:08 2019 +0000 @@ -0,0 +1,74 @@ +//-------------------------------------------------------------- +// SD_WavReader class ---- Header +// SD カードの *.wav ファイルの内容を読み出す +// 以下のフォーマット以外は扱わない +// PCM,16 ビットステレオ,標本化周波数 44.1 kHz +// +// 2016/06/17, Copyright (c) 2016 MIKAMI, Naoki +//-------------------------------------------------------------- + +#ifndef SD_WAV_READER_HPP +#define SD_WAV_READER_HPP + +#include "SDFileSystem.h" +#include "BlinkLabel.hpp" +#define DEBUG_ARRAY_CHECK +#include "Array.hpp" +#include <string> + +namespace Mikami +{ + class SD_WavReader + { + public: + SD_WavReader(int32_t bufferSize); + ~SD_WavReader(); + + void Open(const string fileName); + + void Close() { fclose(fp_); } + + // ファイルのヘッダ読み込み + // 戻り値: *.wav で,16 ビットステレオ, + // 標本化周波数:44.1 kHz の場合 true + bool IsWavFile(); + + // ファイルからステレオデータの取得 + void ReadStereo(Array<int16_t>& dataL, Array<int16_t>& dataR); + + // ファイルからデータをモノラルに変換しての取得 + void ReadAndToMono(Array<int16_t>& data); + + // データサイズ(標本化点の数)の取得 + int32_t GetSize(); + + private: + const string STR_; + + struct WaveFormatEx + { + uint16_t wFormatTag; // 1: PCM + uint16_t nChannels; // 1:モノラル,2: ステレオ + uint32_t nSamplesPerSec; // 標本化周波数 (Hz) + uint32_t nAvgBytesPerSec; // 転送速度 (bytes/s) + uint16_t nBlockAlign; // 4: 16ビットステレオの場合 + uint16_t wBitsPerSample; // データのビット数,8 または 16 + uint16_t cbSize; // PCM の場合使わない + }; + + SDFileSystem *sd_; + FILE *fp_; + + bool ok_; + int32_t size_; // データサイズ(標本化点の数) + Array<int16_t> buffer; // ステレオをモノラルに変換する際の作業領域 + + void ErrorMsg(char msg[]) + { BlinkLabel errLabel(240, 100, msg, Label::CENTER); } + + // disallow copy constructor and assignment operator + SD_WavReader(const SD_WavReader&); + SD_WavReader& operator=(const SD_WavReader&); + }; +} +#endif // SD_BINARY_READER_HPP