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
Diff: SD_PlayerSkeleton.cpp
- Revision:
- 0:d310bb78455d
- Child:
- 1:c7968701f7b3
diff -r 000000000000 -r d310bb78455d SD_PlayerSkeleton.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SD_PlayerSkeleton.cpp Mon Aug 15 04:38:45 2016 +0000 @@ -0,0 +1,141 @@ +//-------------------------------------------------------------- +// SD プレーヤー用抽象基底クラス +// +// 2016/07/17, Copyright (c) 2016 MIKAMI, Naoki +//-------------------------------------------------------------- + +#include "SD_PlayerSkeleton.hpp" + +namespace Mikami +{ + SD_PlayerSkeleton::SD_PlayerSkeleton(string str, int fs) + : FRAME_SIZE_(2048), sn_(FRAME_SIZE_), + mySai_(SaiIO::OUTPUT, FRAME_SIZE_, fs), + sdReader_(FRAME_SIZE_), + title_(214, 4, str, Label::CENTER, Font16), + selector_(4, 22, 7, 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); + } + + 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 がタッチされるまで待つ + Modefy(); + SelectFile(); + } + else + { + menu_.Activate(1); // PLAY 有効 + int touch10; + while (!menu_.GetTouchedNumber(touch10)) + Modefy(); + if (touch10 == 0) SelectFile(); + } + + loopCount = SD_Open(); + while (!menu_.Touched(1)) // PLAY がタッチされるまで待つ + Modefy(); + } + else + loopCount = SD_Open(); + + selector_.Erase(0, 0, BG_LEFT_-4, 272); + title_.Draw(); + + Display(); // アプリ固有の表示処理 + + 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)) + Modefy(); + 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; + + Modefy(); + // 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 がタッチされるまで繰り返す + } +}