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
SD_PlayerSkeleton.cpp
- Committer:
- MikamiUitOpen
- Date:
- 2016-11-16
- Revision:
- 8:59d3f9c81c4f
- Parent:
- 7:930d50953ec2
- Child:
- 9:1ba92e340dce
File content as of revision 8:59d3f9c81c4f:
//-------------------------------------------------------------- // SD プレーヤー用抽象基底クラス // // 2016/11/16, Copyright (c) 2016 MIKAMI, Naoki //-------------------------------------------------------------- #include "SD_PlayerSkeleton.hpp" namespace Mikami { SD_PlayerSkeleton::SD_PlayerSkeleton(string str, int fs, bool resetButton) : FRAME_SIZE_(2048), sn_(FRAME_SIZE_), mySai_(SaiIO::OUTPUT, FRAME_SIZE_, fs), sdReader_(FRAME_SIZE_), fileName_(""), title_(214, 4, str, Label::CENTER, Font16), selector_(0, 22, 256, 37, sdReader_), menu_(BG_LEFT_, 2, BG_WIDTH_, BG_HEIGHT_, 5, (string[]){"OPEN", "PLAY", "PAUSE", "RESUME", "STOP"}, 0, 2, 1) { if (!selector_.CreateTable()) BlinkLabel errLabel(240, 100, "SD CARD ERROR", Label::CENTER); menu_.InactivateAll(); menu_.Activate(0); if (resetButton) reset_ = new ResetButton(); else reset_ = NULL; } // SD プレーヤーの処理の実行 void SD_PlayerSkeleton::Execute() { bool playAfterPause = false; int32_t loopCount; WaitTouched(0); // OPEN がタッチされるまで待つ while (true) { if (playAfterPause) // PAUSE 後の PLAY の場合 loopCount = SD_Open(); else // PAUSE 後の PLAY ではない場合 { if (WaitTouched() == 0) SelectFile(); loopCount = SD_Open(); WaitTouched(1); // PLAY がタッチされるまで待つ } selector_.Erase(0, 0, BG_LEFT_-4, 272); title_.Draw(); Display(); // アプリ固有の表示処理(仮想関数) if (reset_ != NULL) reset_->Draw(); menu_.Inactivate(0); // OPEN ボタン無効 menu_.Activate(2); // PAUSE ボタン有効 menu_.Activate(4); // STOP ボタン有効 playAfterPause = false; bool stopOk = false; Clear(); // アプリ固有のクリア処理(仮想関数) mySai_.PlayOut(); // Play 開始 // ファイルのデータがなくなるまで繰り返す for (int k=0; k<loopCount; k++) { int touch42 = -1; menu_.GetTouchedNumber(touch42); if (touch42 == 4) break; // STOP if (touch42 == 2) // PAUSE ボタンがタッチされた場合の処理 { menu_.Inactivate(2); // PAUSE ボタン無効 menu_.Activate(3); // RESUME ボタン有効 mySai_.PauseOut(); // PLAY か RESUME か STOP がタッチされるまで待つ switch (WaitTouched()) { case 1: playAfterPause = true; // 最初から PLAY break; case 3: mySai_.ResumeOut(); // PAUSE 箇所から PLAY 再開 menu_.Activate(2); menu_.Inactivate(3); menu_.TouchedColor(1); break; case 4: stopOk = true; // STOP break; } } if (playAfterPause || stopOk) break; DoIfHandled(); // アプリ固有の1フレーム分の信号処理(純粋仮想関数) SignalProcessing(); } mySai_.StopOut(); menu_.Activate(0); // OPEN ボタン有効 menu_.Draw(1); // PLAY ボタンの色を初期状態にする for (int n=2; n<5; n++) // その他のボタンは無効 menu_.Inactivate(n); sdReader_.Close(); // SD のファイルのクローズ } } // 選択されたファイル名から拡張子を除いたものを取得 string SD_PlayerSkeleton::GetFileNameNoExt() { string fName = fileName_; int k = fName.rfind("."); if (k != string::npos) return fName.erase(k); else return fName; } // SD カードのファイルのオープン int32_t SD_PlayerSkeleton::SD_Open() { if (fileName_.empty()) SelectFile(); sdReader_.Open(fileName_); sdReader_.IsWavFile(); return sdReader_.GetSize()/FRAME_SIZE_; } // ファイルの選択 void SD_PlayerSkeleton::SelectFile() { selector_.DisplayFileList(); title_.Draw("Select file"); menu_.Inactivate(1); // PLAY ボタン無効 do if (selector_.Select(fileName_)) menu_.Activate(1); // PLAY ボタン有効 while (!menu_.Touched(1)); // PLAY ボタンがタッチされるまで繰り返す } // パネルが操作された場合の処理 void SD_PlayerSkeleton::DoIfHandled() { if (reset_ != NULL) reset_->Do(); Modefy(); // アプリ固有のパラメータ変更(仮想関数) } // メニューのボタンがタッチされるまで DoIfHandled() を実行しながら待つ int SD_PlayerSkeleton::WaitTouched() { int touchNum; while (!menu_.GetTouchedNumber(touchNum)) DoIfHandled(); return touchNum; } }