?
SD_WavReader.hpp@0:cacfc9e25452, 2019-06-04 (annotated)
- Committer:
- phungductung
- Date:
- Tue Jun 04 21:58:08 2019 +0000
- Revision:
- 0:cacfc9e25452
?;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
phungductung | 0:cacfc9e25452 | 1 | //-------------------------------------------------------------- |
phungductung | 0:cacfc9e25452 | 2 | // SD_WavReader class ---- Header |
phungductung | 0:cacfc9e25452 | 3 | // SD カードの *.wav ファイルの内容を読み出す |
phungductung | 0:cacfc9e25452 | 4 | // 以下のフォーマット以外は扱わない |
phungductung | 0:cacfc9e25452 | 5 | // PCM,16 ビットステレオ,標本化周波数 44.1 kHz |
phungductung | 0:cacfc9e25452 | 6 | // |
phungductung | 0:cacfc9e25452 | 7 | // 2016/06/17, Copyright (c) 2016 MIKAMI, Naoki |
phungductung | 0:cacfc9e25452 | 8 | //-------------------------------------------------------------- |
phungductung | 0:cacfc9e25452 | 9 | |
phungductung | 0:cacfc9e25452 | 10 | #ifndef SD_WAV_READER_HPP |
phungductung | 0:cacfc9e25452 | 11 | #define SD_WAV_READER_HPP |
phungductung | 0:cacfc9e25452 | 12 | |
phungductung | 0:cacfc9e25452 | 13 | #include "SDFileSystem.h" |
phungductung | 0:cacfc9e25452 | 14 | #include "BlinkLabel.hpp" |
phungductung | 0:cacfc9e25452 | 15 | #define DEBUG_ARRAY_CHECK |
phungductung | 0:cacfc9e25452 | 16 | #include "Array.hpp" |
phungductung | 0:cacfc9e25452 | 17 | #include <string> |
phungductung | 0:cacfc9e25452 | 18 | |
phungductung | 0:cacfc9e25452 | 19 | namespace Mikami |
phungductung | 0:cacfc9e25452 | 20 | { |
phungductung | 0:cacfc9e25452 | 21 | class SD_WavReader |
phungductung | 0:cacfc9e25452 | 22 | { |
phungductung | 0:cacfc9e25452 | 23 | public: |
phungductung | 0:cacfc9e25452 | 24 | SD_WavReader(int32_t bufferSize); |
phungductung | 0:cacfc9e25452 | 25 | ~SD_WavReader(); |
phungductung | 0:cacfc9e25452 | 26 | |
phungductung | 0:cacfc9e25452 | 27 | void Open(const string fileName); |
phungductung | 0:cacfc9e25452 | 28 | |
phungductung | 0:cacfc9e25452 | 29 | void Close() { fclose(fp_); } |
phungductung | 0:cacfc9e25452 | 30 | |
phungductung | 0:cacfc9e25452 | 31 | // ファイルのヘッダ読み込み |
phungductung | 0:cacfc9e25452 | 32 | // 戻り値: *.wav で,16 ビットステレオ, |
phungductung | 0:cacfc9e25452 | 33 | // 標本化周波数:44.1 kHz の場合 true |
phungductung | 0:cacfc9e25452 | 34 | bool IsWavFile(); |
phungductung | 0:cacfc9e25452 | 35 | |
phungductung | 0:cacfc9e25452 | 36 | // ファイルからステレオデータの取得 |
phungductung | 0:cacfc9e25452 | 37 | void ReadStereo(Array<int16_t>& dataL, Array<int16_t>& dataR); |
phungductung | 0:cacfc9e25452 | 38 | |
phungductung | 0:cacfc9e25452 | 39 | // ファイルからデータをモノラルに変換しての取得 |
phungductung | 0:cacfc9e25452 | 40 | void ReadAndToMono(Array<int16_t>& data); |
phungductung | 0:cacfc9e25452 | 41 | |
phungductung | 0:cacfc9e25452 | 42 | // データサイズ(標本化点の数)の取得 |
phungductung | 0:cacfc9e25452 | 43 | int32_t GetSize(); |
phungductung | 0:cacfc9e25452 | 44 | |
phungductung | 0:cacfc9e25452 | 45 | private: |
phungductung | 0:cacfc9e25452 | 46 | const string STR_; |
phungductung | 0:cacfc9e25452 | 47 | |
phungductung | 0:cacfc9e25452 | 48 | struct WaveFormatEx |
phungductung | 0:cacfc9e25452 | 49 | { |
phungductung | 0:cacfc9e25452 | 50 | uint16_t wFormatTag; // 1: PCM |
phungductung | 0:cacfc9e25452 | 51 | uint16_t nChannels; // 1:モノラル,2: ステレオ |
phungductung | 0:cacfc9e25452 | 52 | uint32_t nSamplesPerSec; // 標本化周波数 (Hz) |
phungductung | 0:cacfc9e25452 | 53 | uint32_t nAvgBytesPerSec; // 転送速度 (bytes/s) |
phungductung | 0:cacfc9e25452 | 54 | uint16_t nBlockAlign; // 4: 16ビットステレオの場合 |
phungductung | 0:cacfc9e25452 | 55 | uint16_t wBitsPerSample; // データのビット数,8 または 16 |
phungductung | 0:cacfc9e25452 | 56 | uint16_t cbSize; // PCM の場合使わない |
phungductung | 0:cacfc9e25452 | 57 | }; |
phungductung | 0:cacfc9e25452 | 58 | |
phungductung | 0:cacfc9e25452 | 59 | SDFileSystem *sd_; |
phungductung | 0:cacfc9e25452 | 60 | FILE *fp_; |
phungductung | 0:cacfc9e25452 | 61 | |
phungductung | 0:cacfc9e25452 | 62 | bool ok_; |
phungductung | 0:cacfc9e25452 | 63 | int32_t size_; // データサイズ(標本化点の数) |
phungductung | 0:cacfc9e25452 | 64 | Array<int16_t> buffer; // ステレオをモノラルに変換する際の作業領域 |
phungductung | 0:cacfc9e25452 | 65 | |
phungductung | 0:cacfc9e25452 | 66 | void ErrorMsg(char msg[]) |
phungductung | 0:cacfc9e25452 | 67 | { BlinkLabel errLabel(240, 100, msg, Label::CENTER); } |
phungductung | 0:cacfc9e25452 | 68 | |
phungductung | 0:cacfc9e25452 | 69 | // disallow copy constructor and assignment operator |
phungductung | 0:cacfc9e25452 | 70 | SD_WavReader(const SD_WavReader&); |
phungductung | 0:cacfc9e25452 | 71 | SD_WavReader& operator=(const SD_WavReader&); |
phungductung | 0:cacfc9e25452 | 72 | }; |
phungductung | 0:cacfc9e25452 | 73 | } |
phungductung | 0:cacfc9e25452 | 74 | #endif // SD_BINARY_READER_HPP |