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

Committer:
MikamiUitOpen
Date:
Mon Aug 15 04:38:45 2016 +0000
Revision:
0:d310bb78455d
Child:
2:511479736d6e
1

Who changed what in which revision?

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