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:
1:c7968701f7b3
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:d310bb78455d 1 //--------------------------------------------------------------
MikamiUitOpen 0:d310bb78455d 2 // SD プレーヤー用抽象基底クラス
MikamiUitOpen 0:d310bb78455d 3 //
MikamiUitOpen 0:d310bb78455d 4 // 2016/07/17, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:d310bb78455d 5 //--------------------------------------------------------------
MikamiUitOpen 0:d310bb78455d 6
MikamiUitOpen 0:d310bb78455d 7 #include "SD_PlayerSkeleton.hpp"
MikamiUitOpen 0:d310bb78455d 8
MikamiUitOpen 0:d310bb78455d 9 namespace Mikami
MikamiUitOpen 0:d310bb78455d 10 {
MikamiUitOpen 0:d310bb78455d 11 SD_PlayerSkeleton::SD_PlayerSkeleton(string str, int fs)
MikamiUitOpen 0:d310bb78455d 12 : FRAME_SIZE_(2048), sn_(FRAME_SIZE_),
MikamiUitOpen 0:d310bb78455d 13 mySai_(SaiIO::OUTPUT, FRAME_SIZE_, fs),
MikamiUitOpen 0:d310bb78455d 14 sdReader_(FRAME_SIZE_),
MikamiUitOpen 0:d310bb78455d 15 title_(214, 4, str, Label::CENTER, Font16),
MikamiUitOpen 0:d310bb78455d 16 selector_(4, 22, 7, 37, sdReader_),
MikamiUitOpen 0:d310bb78455d 17 menu_(BG_LEFT_, 2, BG_WIDTH_, BG_HEIGHT_, 5,
MikamiUitOpen 0:d310bb78455d 18 (string[]){"OPEN", "PLAY", "PAUSE", "RESUME", "STOP"},
MikamiUitOpen 0:d310bb78455d 19 0, 2, 1)
MikamiUitOpen 0:d310bb78455d 20 {
MikamiUitOpen 0:d310bb78455d 21 if (!selector_.CreateTable())
MikamiUitOpen 0:d310bb78455d 22 BlinkLabel errLabel(240, 100, "SD CARD ERROR", Label::CENTER);
MikamiUitOpen 0:d310bb78455d 23
MikamiUitOpen 0:d310bb78455d 24 menu_.InactivateAll();
MikamiUitOpen 0:d310bb78455d 25 menu_.Activate(0);
MikamiUitOpen 0:d310bb78455d 26 }
MikamiUitOpen 0:d310bb78455d 27
MikamiUitOpen 0:d310bb78455d 28 void SD_PlayerSkeleton::Execute()
MikamiUitOpen 0:d310bb78455d 29 {
MikamiUitOpen 0:d310bb78455d 30 bool playOk = false;
MikamiUitOpen 0:d310bb78455d 31 bool whileFirst = true;
MikamiUitOpen 0:d310bb78455d 32 int32_t loopCount;
MikamiUitOpen 0:d310bb78455d 33
MikamiUitOpen 0:d310bb78455d 34 while (true)
MikamiUitOpen 0:d310bb78455d 35 {
MikamiUitOpen 0:d310bb78455d 36 if (!playOk)
MikamiUitOpen 0:d310bb78455d 37 {
MikamiUitOpen 0:d310bb78455d 38 if (whileFirst)
MikamiUitOpen 0:d310bb78455d 39 {
MikamiUitOpen 0:d310bb78455d 40 whileFirst = false;
MikamiUitOpen 0:d310bb78455d 41 while (!menu_.Touched(0)) // OPEN がタッチされるまで待つ
MikamiUitOpen 0:d310bb78455d 42 Modefy();
MikamiUitOpen 0:d310bb78455d 43 SelectFile();
MikamiUitOpen 0:d310bb78455d 44 }
MikamiUitOpen 0:d310bb78455d 45 else
MikamiUitOpen 0:d310bb78455d 46 {
MikamiUitOpen 0:d310bb78455d 47 menu_.Activate(1); // PLAY 有効
MikamiUitOpen 0:d310bb78455d 48 int touch10;
MikamiUitOpen 0:d310bb78455d 49 while (!menu_.GetTouchedNumber(touch10))
MikamiUitOpen 0:d310bb78455d 50 Modefy();
MikamiUitOpen 0:d310bb78455d 51 if (touch10 == 0) SelectFile();
MikamiUitOpen 0:d310bb78455d 52 }
MikamiUitOpen 0:d310bb78455d 53
MikamiUitOpen 0:d310bb78455d 54 loopCount = SD_Open();
MikamiUitOpen 0:d310bb78455d 55 while (!menu_.Touched(1)) // PLAY がタッチされるまで待つ
MikamiUitOpen 0:d310bb78455d 56 Modefy();
MikamiUitOpen 0:d310bb78455d 57 }
MikamiUitOpen 0:d310bb78455d 58 else
MikamiUitOpen 0:d310bb78455d 59 loopCount = SD_Open();
MikamiUitOpen 0:d310bb78455d 60
MikamiUitOpen 0:d310bb78455d 61 selector_.Erase(0, 0, BG_LEFT_-4, 272);
MikamiUitOpen 0:d310bb78455d 62 title_.Draw();
MikamiUitOpen 0:d310bb78455d 63
MikamiUitOpen 0:d310bb78455d 64 Display(); // アプリ固有の表示処理
MikamiUitOpen 0:d310bb78455d 65
MikamiUitOpen 0:d310bb78455d 66 menu_.Inactivate(0); // OPEN 無効
MikamiUitOpen 0:d310bb78455d 67 menu_.Activate(2); // PAUSE 有効
MikamiUitOpen 0:d310bb78455d 68 menu_.Activate(4); // STOP 有効
MikamiUitOpen 0:d310bb78455d 69
MikamiUitOpen 0:d310bb78455d 70 playOk = false;
MikamiUitOpen 0:d310bb78455d 71 bool stopOk = false;
MikamiUitOpen 0:d310bb78455d 72
MikamiUitOpen 0:d310bb78455d 73 Clear(); // アプリ固有のクリア処理
MikamiUitOpen 0:d310bb78455d 74
MikamiUitOpen 0:d310bb78455d 75 mySai_.PlayOut(); // Play 開始
MikamiUitOpen 0:d310bb78455d 76
MikamiUitOpen 0:d310bb78455d 77 for (int k=0; k<loopCount; k++)
MikamiUitOpen 0:d310bb78455d 78 {
MikamiUitOpen 0:d310bb78455d 79 int touch42 = -1;
MikamiUitOpen 0:d310bb78455d 80 menu_.GetTouchedNumber(touch42);
MikamiUitOpen 0:d310bb78455d 81 if (touch42 == 4) break; // STOP
MikamiUitOpen 0:d310bb78455d 82 if (touch42 == 2) // PAUSE
MikamiUitOpen 0:d310bb78455d 83 {
MikamiUitOpen 0:d310bb78455d 84 menu_.Inactivate(2); // PAUSE 無効
MikamiUitOpen 0:d310bb78455d 85 menu_.Activate(3); // RESUME 有効
MikamiUitOpen 0:d310bb78455d 86 mySai_.PauseOut();
MikamiUitOpen 0:d310bb78455d 87
MikamiUitOpen 0:d310bb78455d 88 // PLAY か RESUME か STOP がタッチされるまで待つ
MikamiUitOpen 0:d310bb78455d 89 int touch134 = -1;
MikamiUitOpen 0:d310bb78455d 90 while (!menu_.GetTouchedNumber(touch134))
MikamiUitOpen 0:d310bb78455d 91 Modefy();
MikamiUitOpen 0:d310bb78455d 92 switch (touch134)
MikamiUitOpen 0:d310bb78455d 93 {
MikamiUitOpen 0:d310bb78455d 94 case 1: playOk = true; // 最初から PLAY
MikamiUitOpen 0:d310bb78455d 95 break;
MikamiUitOpen 0:d310bb78455d 96 case 3: mySai_.ResumeOut(); // PAUSE したところから PLAY 再開
MikamiUitOpen 0:d310bb78455d 97 menu_.Activate(2);
MikamiUitOpen 0:d310bb78455d 98 menu_.Inactivate(3);
MikamiUitOpen 0:d310bb78455d 99 menu_.TouchedColor(1);
MikamiUitOpen 0:d310bb78455d 100 break;
MikamiUitOpen 0:d310bb78455d 101 case 4: stopOk = true; // STOP
MikamiUitOpen 0:d310bb78455d 102 break;
MikamiUitOpen 0:d310bb78455d 103 }
MikamiUitOpen 0:d310bb78455d 104 }
MikamiUitOpen 0:d310bb78455d 105 if (playOk || stopOk) break;
MikamiUitOpen 0:d310bb78455d 106
MikamiUitOpen 0:d310bb78455d 107 Modefy();
MikamiUitOpen 0:d310bb78455d 108 // 1フレーム分の信号処理の実行
MikamiUitOpen 0:d310bb78455d 109 SignalProcessing();
MikamiUitOpen 0:d310bb78455d 110 }
MikamiUitOpen 0:d310bb78455d 111 mySai_.StopOut();
MikamiUitOpen 0:d310bb78455d 112 menu_.Activate(0); // OPEN 有効
MikamiUitOpen 0:d310bb78455d 113 if (!playOk) menu_.Activate(1); // PLAY 有効
MikamiUitOpen 0:d310bb78455d 114 for (int n=2; n<5; n++) // その他は無効
MikamiUitOpen 0:d310bb78455d 115 menu_.Inactivate(n);
MikamiUitOpen 0:d310bb78455d 116 sdReader_.Close(); // SD のファイルのクローズ
MikamiUitOpen 0:d310bb78455d 117 }
MikamiUitOpen 0:d310bb78455d 118 }
MikamiUitOpen 0:d310bb78455d 119
MikamiUitOpen 0:d310bb78455d 120 // SD カードのファイルのオープン
MikamiUitOpen 0:d310bb78455d 121 int32_t SD_PlayerSkeleton::SD_Open()
MikamiUitOpen 0:d310bb78455d 122 {
MikamiUitOpen 0:d310bb78455d 123 sdReader_.Open(fileName_);
MikamiUitOpen 0:d310bb78455d 124 sdReader_.IsWavFile();
MikamiUitOpen 0:d310bb78455d 125 return sdReader_.GetSize()/FRAME_SIZE_;
MikamiUitOpen 0:d310bb78455d 126 }
MikamiUitOpen 0:d310bb78455d 127
MikamiUitOpen 0:d310bb78455d 128 // ファイルの選択
MikamiUitOpen 0:d310bb78455d 129 // selectedName: 選択されたファイル名
MikamiUitOpen 0:d310bb78455d 130 void SD_PlayerSkeleton::SelectFile()
MikamiUitOpen 0:d310bb78455d 131 {
MikamiUitOpen 0:d310bb78455d 132 selector_.DisplayFileList();
MikamiUitOpen 0:d310bb78455d 133 title_.Draw("Select file");
MikamiUitOpen 0:d310bb78455d 134 do
MikamiUitOpen 0:d310bb78455d 135 {
MikamiUitOpen 0:d310bb78455d 136 if (selector_.Select(fileName_))
MikamiUitOpen 0:d310bb78455d 137 menu_.Activate(1); // PLAY 有効
MikamiUitOpen 0:d310bb78455d 138 wait_ms(200);
MikamiUitOpen 0:d310bb78455d 139 } while (!menu_.Touched(1)); // PLAY がタッチされるまで繰り返す
MikamiUitOpen 0:d310bb78455d 140 }
MikamiUitOpen 0:d310bb78455d 141 }