Library for Skeleton of SD card player. SD カードプレーヤのための骨組みとして使うためのライブラリ.このライブラリを登録した際のプログラム:「F746_SD_Player_Demo」
Dependencies: SDFileSystem_Warning_Fixed
Dependents: F746_SD_Player_Demo F746_SD_VarableFilter F746_SD_GraphicEqualizer F746_MySoundMachine ... more
FileSelectorWav.cpp@0:d310bb78455d, 2016-08-15 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Mon Aug 15 04:38:45 2016 +0000
- Revision:
- 0:d310bb78455d
- Child:
- 2:511479736d6e
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:d310bb78455d | 1 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:d310bb78455d | 2 | // FileSelector class |
MikamiUitOpen | 0:d310bb78455d | 3 | // SD カード内のファイル名の一覧を表示し,ファイルを選択する |
MikamiUitOpen | 0:d310bb78455d | 4 | // |
MikamiUitOpen | 0:d310bb78455d | 5 | // 2016/07/27, Copyright (c) 2016 MIKAMI, Naoki |
MikamiUitOpen | 0:d310bb78455d | 6 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:d310bb78455d | 7 | |
MikamiUitOpen | 0:d310bb78455d | 8 | #include "FileSelectorWav.hpp" |
MikamiUitOpen | 0:d310bb78455d | 9 | |
MikamiUitOpen | 0:d310bb78455d | 10 | namespace Mikami |
MikamiUitOpen | 0:d310bb78455d | 11 | { |
MikamiUitOpen | 0:d310bb78455d | 12 | bool FileSelector::CreateTable() |
MikamiUitOpen | 0:d310bb78455d | 13 | { |
MikamiUitOpen | 0:d310bb78455d | 14 | DIR* dp = opendir("/sd"); |
MikamiUitOpen | 0:d310bb78455d | 15 | fileCount_ = 0; |
MikamiUitOpen | 0:d310bb78455d | 16 | if (dp != NULL) |
MikamiUitOpen | 0:d310bb78455d | 17 | { |
MikamiUitOpen | 0:d310bb78455d | 18 | dirent* entry; |
MikamiUitOpen | 0:d310bb78455d | 19 | for (int n=0; n<256; n++) |
MikamiUitOpen | 0:d310bb78455d | 20 | { |
MikamiUitOpen | 0:d310bb78455d | 21 | entry = readdir(dp); |
MikamiUitOpen | 0:d310bb78455d | 22 | if (entry == NULL) break; |
MikamiUitOpen | 0:d310bb78455d | 23 | |
MikamiUitOpen | 0:d310bb78455d | 24 | string strName = entry->d_name; |
MikamiUitOpen | 0:d310bb78455d | 25 | if ( (strName.find(".wav") != string::npos) || |
MikamiUitOpen | 0:d310bb78455d | 26 | (strName.find(".WAV") != string::npos) ) |
MikamiUitOpen | 0:d310bb78455d | 27 | { |
MikamiUitOpen | 0:d310bb78455d | 28 | sdReader_.Open(strName); // ファイルオープン |
MikamiUitOpen | 0:d310bb78455d | 29 | |
MikamiUitOpen | 0:d310bb78455d | 30 | // PCM,16 ビットステレオ,標本化周波数 44.1 kHz 以外のファイルは除外 |
MikamiUitOpen | 0:d310bb78455d | 31 | if (sdReader_.IsWavFile()) |
MikamiUitOpen | 0:d310bb78455d | 32 | fileNames_[fileCount_++] = strName; |
MikamiUitOpen | 0:d310bb78455d | 33 | sdReader_.Close(); |
MikamiUitOpen | 0:d310bb78455d | 34 | } |
MikamiUitOpen | 0:d310bb78455d | 35 | |
MikamiUitOpen | 0:d310bb78455d | 36 | if (fileCount_ >= MAX_FILES_) break; |
MikamiUitOpen | 0:d310bb78455d | 37 | } |
MikamiUitOpen | 0:d310bb78455d | 38 | closedir(dp); |
MikamiUitOpen | 0:d310bb78455d | 39 | } |
MikamiUitOpen | 0:d310bb78455d | 40 | else |
MikamiUitOpen | 0:d310bb78455d | 41 | return false; |
MikamiUitOpen | 0:d310bb78455d | 42 | |
MikamiUitOpen | 0:d310bb78455d | 43 | if (fileCount_ == 0) return false; |
MikamiUitOpen | 0:d310bb78455d | 44 | |
MikamiUitOpen | 0:d310bb78455d | 45 | if (rect_ != NULL) delete rect_; |
MikamiUitOpen | 0:d310bb78455d | 46 | Array<string> nonString(fileCount_, ""); |
MikamiUitOpen | 0:d310bb78455d | 47 | rect_ = new ButtonGroup(X_, Y_, W_H_, W_H_, fileCount_, |
MikamiUitOpen | 0:d310bb78455d | 48 | nonString, 0, V_L_-W_H_, 1, |
MikamiUitOpen | 0:d310bb78455d | 49 | -1, Font12, 0, GuiBase::ENUM_BACK, |
MikamiUitOpen | 0:d310bb78455d | 50 | BASE_COLOR_, TOUCHED_COLOR_); |
MikamiUitOpen | 0:d310bb78455d | 51 | for (int n=0; n<fileCount_; n++) rect_->Erase(n); |
MikamiUitOpen | 0:d310bb78455d | 52 | CreateLabels(); |
MikamiUitOpen | 0:d310bb78455d | 53 | prevFileCount_ = fileCount_; |
MikamiUitOpen | 0:d310bb78455d | 54 | return true; |
MikamiUitOpen | 0:d310bb78455d | 55 | } |
MikamiUitOpen | 0:d310bb78455d | 56 | |
MikamiUitOpen | 0:d310bb78455d | 57 | // ファイルを選択する |
MikamiUitOpen | 0:d310bb78455d | 58 | bool FileSelector::Select(string &fileName) |
MikamiUitOpen | 0:d310bb78455d | 59 | { |
MikamiUitOpen | 0:d310bb78455d | 60 | int n; |
MikamiUitOpen | 0:d310bb78455d | 61 | if (rect_->GetTouchedNumber(n)) |
MikamiUitOpen | 0:d310bb78455d | 62 | { |
MikamiUitOpen | 0:d310bb78455d | 63 | fileNameLabels_[n]->Draw(GetFileNameNoExt(n), TOUCHED_COLOR_); |
MikamiUitOpen | 0:d310bb78455d | 64 | if ((prev_ >= 0) && (prev_ != n)) |
MikamiUitOpen | 0:d310bb78455d | 65 | fileNameLabels_[prev_]->Draw(GetFileNameNoExt(prev_)); |
MikamiUitOpen | 0:d310bb78455d | 66 | prev_ = n; |
MikamiUitOpen | 0:d310bb78455d | 67 | fileName = fileNames_[n]; |
MikamiUitOpen | 0:d310bb78455d | 68 | return true; |
MikamiUitOpen | 0:d310bb78455d | 69 | } |
MikamiUitOpen | 0:d310bb78455d | 70 | else |
MikamiUitOpen | 0:d310bb78455d | 71 | return false; |
MikamiUitOpen | 0:d310bb78455d | 72 | } |
MikamiUitOpen | 0:d310bb78455d | 73 | |
MikamiUitOpen | 0:d310bb78455d | 74 | // ファイルの一覧の表示 |
MikamiUitOpen | 0:d310bb78455d | 75 | void FileSelector::DisplayFileList(bool sortEnable) |
MikamiUitOpen | 0:d310bb78455d | 76 | { |
MikamiUitOpen | 0:d310bb78455d | 77 | if (sortEnable) |
MikamiUitOpen | 0:d310bb78455d | 78 | std::sort((string *)fileNames_, |
MikamiUitOpen | 0:d310bb78455d | 79 | (string *)fileNames_+fileCount_); |
MikamiUitOpen | 0:d310bb78455d | 80 | |
MikamiUitOpen | 0:d310bb78455d | 81 | Erase(X_, Y_, MAX_NAME_LENGTH_*((sFONT *)(&Font16))->Width, 272-Y_); |
MikamiUitOpen | 0:d310bb78455d | 82 | rect_->DrawAll(); |
MikamiUitOpen | 0:d310bb78455d | 83 | for (int n=0; n<fileCount_; n++) |
MikamiUitOpen | 0:d310bb78455d | 84 | fileNameLabels_[n]->Draw(GetFileNameNoExt(n)); |
MikamiUitOpen | 0:d310bb78455d | 85 | } |
MikamiUitOpen | 0:d310bb78455d | 86 | |
MikamiUitOpen | 0:d310bb78455d | 87 | // ファイルの一覧の消去 |
MikamiUitOpen | 0:d310bb78455d | 88 | void FileSelector::Erase(uint16_t x, uint16_t y, uint16_t width, uint16_t height, |
MikamiUitOpen | 0:d310bb78455d | 89 | uint32_t color) |
MikamiUitOpen | 0:d310bb78455d | 90 | { |
MikamiUitOpen | 0:d310bb78455d | 91 | lcd_->SetTextColor(color); |
MikamiUitOpen | 0:d310bb78455d | 92 | lcd_->FillRect(x, y, width, height); |
MikamiUitOpen | 0:d310bb78455d | 93 | } |
MikamiUitOpen | 0:d310bb78455d | 94 | |
MikamiUitOpen | 0:d310bb78455d | 95 | // Label を生成 |
MikamiUitOpen | 0:d310bb78455d | 96 | void FileSelector::CreateLabels() |
MikamiUitOpen | 0:d310bb78455d | 97 | { |
MikamiUitOpen | 0:d310bb78455d | 98 | fileNameLabels_.SetSize(fileCount_); |
MikamiUitOpen | 0:d310bb78455d | 99 | |
MikamiUitOpen | 0:d310bb78455d | 100 | for (int n=0; n<fileCount_; n++) |
MikamiUitOpen | 0:d310bb78455d | 101 | fileNameLabels_[n] = new Label(X_+30, Y_+5+V_L_*n, "", |
MikamiUitOpen | 0:d310bb78455d | 102 | Label::LEFT, Font16, |
MikamiUitOpen | 0:d310bb78455d | 103 | BASE_COLOR_); |
MikamiUitOpen | 0:d310bb78455d | 104 | } |
MikamiUitOpen | 0:d310bb78455d | 105 | |
MikamiUitOpen | 0:d310bb78455d | 106 | // 拡張子を削除した文字列を取得 |
MikamiUitOpen | 0:d310bb78455d | 107 | string FileSelector::GetFileNameNoExt(int n) |
MikamiUitOpen | 0:d310bb78455d | 108 | { |
MikamiUitOpen | 0:d310bb78455d | 109 | string name = fileNames_[n]; |
MikamiUitOpen | 0:d310bb78455d | 110 | name.erase(name.find(".")); |
MikamiUitOpen | 0:d310bb78455d | 111 | return name.substr(0, MAX_NAME_LENGTH_); |
MikamiUitOpen | 0:d310bb78455d | 112 | } |
MikamiUitOpen | 0:d310bb78455d | 113 | } |