SPKT
Dependencies: SDFileSystem_Warning_Fixed
Dependents: DISCO-F746_WAV_PLAYER WAV
SD_PlayerSkeleton.cpp
- Committer:
- MikamiUitOpen
- Date:
- 2016-10-02
- Revision:
- 2:511479736d6e
- Parent:
- 1:c7968701f7b3
- Child:
- 4:d730d024ac32
File content as of revision 2:511479736d6e:
//-------------------------------------------------------------- // SD プレーヤー用抽象基底クラス // // 2016/10/01, Copyright (c) 2016 MIKAMI, Naoki //-------------------------------------------------------------- #include "SD_PlayerSkeleton.hpp" namespace Mikami { SD_PlayerSkeleton::SD_PlayerSkeleton(string str, int fs, bool reset) : FRAME_SIZE_(2048), sn_(FRAME_SIZE_), mySai_(SaiIO::OUTPUT, FRAME_SIZE_, fs), sdReader_(FRAME_SIZE_), 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), resetActive_(reset) { if (!selector_.CreateTable()) BlinkLabel errLabel(240, 100, "SD CARD ERROR", Label::CENTER); menu_.InactivateAll(); menu_.Activate(0); if (resetActive_) reset_ = new ResetButton(); } void SD_PlayerSkeleton::Execute() { bool playOk = false; bool whileFirst = true; int32_t loopCount; while (true) { if (!playOk) { if (whileFirst) { whileFirst = false; while (!menu_.Touched(0)) // OPEN がタッチされるまで待つ CheckCtrl(); SelectFile(); } else { menu_.Activate(1); // PLAY 有効 int touch10; while (!menu_.GetTouchedNumber(touch10)) CheckCtrl(); if (touch10 == 0) SelectFile(); } loopCount = SD_Open(); while (!menu_.Touched(1)) // PLAY がタッチされるまで待つ CheckCtrl(); } else loopCount = SD_Open(); selector_.Erase(0, 0, BG_LEFT_-4, 272); title_.Draw(); Display(); // アプリ固有の表示処理 if (resetActive_) reset_->Draw(); menu_.Inactivate(0); // OPEN 無効 menu_.Activate(2); // PAUSE 有効 menu_.Activate(4); // STOP 有効 playOk = 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 がタッチされるまで待つ int touch134 = -1; while (!menu_.GetTouchedNumber(touch134)) CheckCtrl(); switch (touch134) { case 1: playOk = 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 (playOk || stopOk) break; CheckCtrl(); // 1フレーム分の信号処理の実行 SignalProcessing(); } mySai_.StopOut(); menu_.Activate(0); // OPEN 有効 if (!playOk) menu_.Activate(1); // PLAY 有効 for (int n=2; n<5; n++) // その他は無効 menu_.Inactivate(n); sdReader_.Close(); // SD のファイルのクローズ } } // SD カードのファイルのオープン int32_t SD_PlayerSkeleton::SD_Open() { sdReader_.Open(fileName_); sdReader_.IsWavFile(); return sdReader_.GetSize()/FRAME_SIZE_; } // ファイルの選択 // selectedName: 選択されたファイル名 void SD_PlayerSkeleton::SelectFile() { selector_.DisplayFileList(); title_.Draw("Select file"); do { if (selector_.Select(fileName_)) menu_.Activate(1); // PLAY 有効 wait_ms(200); } while (!menu_.Touched(1)); // PLAY がタッチされるまで繰り返す } // パネル操作のチェック void SD_PlayerSkeleton::CheckCtrl() { if (resetActive_) reset_->Do(); Modefy(); } }