?

Committer:
phungductung
Date:
Tue Jun 04 21:58:08 2019 +0000
Revision:
0:cacfc9e25452
?;

Who changed what in which revision?

UserRevisionLine numberNew 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