Output the audio signal (*.bin) with filtering by IIR filter in the SD card using onboard CODEC. For *.wav file, F746_SD_WavPlayer and F746_SD_GraphicEqualiser are published on mbed. SD カードのオーディオ信号 (*.bin) を遮断周波数可変の IIR フィルタを通して,ボードに搭載されているCODEC で出力する.*.wav 形式のファイル用には,F746_SD_WavPlayer と F746_SD_GraphicEqualiser を mbed で公開している.
Dependencies: BSP_DISCO_F746NG_patch_fixed F746_GUI LCD_DISCO_F746NG SDFileSystem_Warning_Fixed TS_DISCO_F746NG mbed
MyClasses_Functions/SD_BinaryReader.hpp@5:4a99dabc9180, 2016-04-17 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sun Apr 17 08:44:43 2016 +0000
- Revision:
- 5:4a99dabc9180
- Parent:
- 0:6748e3332e85
6
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:6748e3332e85 | 1 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:6748e3332e85 | 2 | // SD_BinaryReader class |
MikamiUitOpen | 0:6748e3332e85 | 3 | // SD カードの内容を読み出す |
MikamiUitOpen | 0:6748e3332e85 | 4 | // 最初の4バイト:データサイズ |
MikamiUitOpen | 0:6748e3332e85 | 5 | // それ以降: int16_t のデータ |
MikamiUitOpen | 0:6748e3332e85 | 6 | // |
MikamiUitOpen | 0:6748e3332e85 | 7 | // 2016/04/07, Copyright (c) 2016 MIKAMI, Naoki |
MikamiUitOpen | 0:6748e3332e85 | 8 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:6748e3332e85 | 9 | |
MikamiUitOpen | 0:6748e3332e85 | 10 | #ifndef SD_BINARY_READER_HPP |
MikamiUitOpen | 0:6748e3332e85 | 11 | #define SD_BINARY_READER_HPP |
MikamiUitOpen | 0:6748e3332e85 | 12 | |
MikamiUitOpen | 0:6748e3332e85 | 13 | #include "SDFileSystem.h" |
MikamiUitOpen | 0:6748e3332e85 | 14 | #include "BlinkLabel.hpp" |
MikamiUitOpen | 0:6748e3332e85 | 15 | #include <string> |
MikamiUitOpen | 0:6748e3332e85 | 16 | |
MikamiUitOpen | 0:6748e3332e85 | 17 | namespace Mikami |
MikamiUitOpen | 0:6748e3332e85 | 18 | { |
MikamiUitOpen | 0:6748e3332e85 | 19 | class SD_BinaryReader |
MikamiUitOpen | 0:6748e3332e85 | 20 | { |
MikamiUitOpen | 0:6748e3332e85 | 21 | public: |
MikamiUitOpen | 0:6748e3332e85 | 22 | SD_BinaryReader() : STR_("sd"), ok_(false) |
MikamiUitOpen | 0:6748e3332e85 | 23 | { |
MikamiUitOpen | 0:6748e3332e85 | 24 | sd_ = new SDFileSystem(STR_.c_str()); |
MikamiUitOpen | 0:6748e3332e85 | 25 | sd_->mount(); |
MikamiUitOpen | 0:6748e3332e85 | 26 | } |
MikamiUitOpen | 0:6748e3332e85 | 27 | |
MikamiUitOpen | 0:6748e3332e85 | 28 | ~SD_BinaryReader() |
MikamiUitOpen | 0:6748e3332e85 | 29 | { |
MikamiUitOpen | 0:6748e3332e85 | 30 | sd_->unmount(); |
MikamiUitOpen | 0:6748e3332e85 | 31 | delete sd_; |
MikamiUitOpen | 0:6748e3332e85 | 32 | } |
MikamiUitOpen | 0:6748e3332e85 | 33 | |
MikamiUitOpen | 0:6748e3332e85 | 34 | void Open(const string fileName) |
MikamiUitOpen | 0:6748e3332e85 | 35 | { |
MikamiUitOpen | 0:6748e3332e85 | 36 | string name = (string)"/" + STR_ + "/" + fileName; |
MikamiUitOpen | 0:6748e3332e85 | 37 | fp_ = fopen(name.c_str(), "rb"); |
MikamiUitOpen | 0:6748e3332e85 | 38 | if (fp_ == NULL) ErrorMsg("open error!!"); |
MikamiUitOpen | 0:6748e3332e85 | 39 | } |
MikamiUitOpen | 0:6748e3332e85 | 40 | |
MikamiUitOpen | 0:6748e3332e85 | 41 | void Close() { fclose(fp_); } |
MikamiUitOpen | 0:6748e3332e85 | 42 | |
MikamiUitOpen | 0:6748e3332e85 | 43 | // ファイルからデータサイズの読み出し |
MikamiUitOpen | 0:6748e3332e85 | 44 | // 戻り値: int16_t 型のデータサイズ |
MikamiUitOpen | 0:6748e3332e85 | 45 | int32_t ReadSize() |
MikamiUitOpen | 0:6748e3332e85 | 46 | { |
MikamiUitOpen | 0:6748e3332e85 | 47 | fread(&size_, sizeof(int), 1, fp_); |
MikamiUitOpen | 0:6748e3332e85 | 48 | ok_ = true; |
MikamiUitOpen | 0:6748e3332e85 | 49 | return size_; |
MikamiUitOpen | 0:6748e3332e85 | 50 | } |
MikamiUitOpen | 0:6748e3332e85 | 51 | |
MikamiUitOpen | 0:6748e3332e85 | 52 | // ファイルからデータの取得 |
MikamiUitOpen | 0:6748e3332e85 | 53 | void Read(int16_t data[], uint32_t size) |
MikamiUitOpen | 0:6748e3332e85 | 54 | { |
MikamiUitOpen | 0:6748e3332e85 | 55 | if (!ok_) ErrorMsg("Get data FAILED"); |
MikamiUitOpen | 0:6748e3332e85 | 56 | fread(data, sizeof(int16_t), size, fp_); |
MikamiUitOpen | 0:6748e3332e85 | 57 | } |
MikamiUitOpen | 0:6748e3332e85 | 58 | |
MikamiUitOpen | 0:6748e3332e85 | 59 | // データサイズの取得 |
MikamiUitOpen | 0:6748e3332e85 | 60 | // 戻り値: int16_t 型のデータサイズ |
MikamiUitOpen | 0:6748e3332e85 | 61 | int32_t GetSize() |
MikamiUitOpen | 0:6748e3332e85 | 62 | { |
MikamiUitOpen | 0:6748e3332e85 | 63 | if (!ok_) ErrorMsg("Get data size FAILED"); |
MikamiUitOpen | 0:6748e3332e85 | 64 | return size_; |
MikamiUitOpen | 0:6748e3332e85 | 65 | } |
MikamiUitOpen | 0:6748e3332e85 | 66 | |
MikamiUitOpen | 0:6748e3332e85 | 67 | private: |
MikamiUitOpen | 0:6748e3332e85 | 68 | const string STR_; |
MikamiUitOpen | 0:6748e3332e85 | 69 | |
MikamiUitOpen | 0:6748e3332e85 | 70 | SDFileSystem *sd_; |
MikamiUitOpen | 0:6748e3332e85 | 71 | FILE *fp_; |
MikamiUitOpen | 0:6748e3332e85 | 72 | |
MikamiUitOpen | 0:6748e3332e85 | 73 | bool ok_; |
MikamiUitOpen | 0:6748e3332e85 | 74 | int32_t size_; // word count, word = int16_t |
MikamiUitOpen | 0:6748e3332e85 | 75 | |
MikamiUitOpen | 0:6748e3332e85 | 76 | void ErrorMsg(char msg[]) |
MikamiUitOpen | 0:6748e3332e85 | 77 | { |
MikamiUitOpen | 0:6748e3332e85 | 78 | BlinkLabel errLabel(240, 100, msg, Label::CENTER); |
MikamiUitOpen | 0:6748e3332e85 | 79 | } |
MikamiUitOpen | 0:6748e3332e85 | 80 | |
MikamiUitOpen | 0:6748e3332e85 | 81 | // disallow copy constructor and assignment operator |
MikamiUitOpen | 0:6748e3332e85 | 82 | SD_BinaryReader(const SD_BinaryReader&); |
MikamiUitOpen | 0:6748e3332e85 | 83 | SD_BinaryReader& operator=(const SD_BinaryReader&); |
MikamiUitOpen | 0:6748e3332e85 | 84 | }; |
MikamiUitOpen | 0:6748e3332e85 | 85 | } |
MikamiUitOpen | 0:6748e3332e85 | 86 | #endif // SD_BINARY_READER_HPP |