1#include"Page.h"
2#include"MusicPage.h"
3#include"FileListPage.h"
4#include"Resources.h"
5
6staticu32 ReadMusicDir(charMusicDirPath)
7{
8FILINFO finfo;
9
10gMusicTotalNum=0;
11
12#if_USE_LFN
13finfo.lfname=Fs_LongFileName;
14finfo.lfsize=sizeof(Fs_LongFileName);
15#endif
16
17if(f_opendir(&gMusicDir, MusicDirPath)!=FR_OK)
18{
19Debug("Open Music Dir error!\n\r");
20returnFALSE;
21}
22
23while(f_readdir(&gMusicDir,&finfo)==FR_OK)
24{
25if(finfo.fattrib&AM_ARC)
26{
27if(!finfo.fname[0])break;
28if(!( CheckSuffix(finfo.lfname,".wav")&CheckSuffix(finfo.lfname,".wma")&CheckSuffix(finfo.lfname,".mp3")) )
29{
30gMusicSet[gMusicTotalNum]=OS_Mallco(strlen(finfo.lfname)+1);
31strcpy((void)gMusicSet[gMusicTotalNum],(void)finfo.lfname);
32gMusicTotalNum++;
33}
34}
35}
36
37returnTRUE;
38}
39
40staticu32 PlayMusic(intSelection)
41{
42if(Selection==-1)return0;
43
44Debug("Select:%d.%s\n\r",Selection,gMusicSet[Selection]);
45
46if(gCurrentSelection!=Selection)
47{
48if(gCurrentSelection!=-1)
49{
50if(f_close(&gMusicObj)!=FR_OK)
51{
52Debug("Close music file error!\n\r");
53}
54}
55
56gCurrentSelection=Selection;
57gPlayOperate=Play_Start;
58}
59
60DispPlayName(gMusicSet[gCurrentSelection]);
61DispPlayMsg("正在播放...");
62
63return0;
64}
65
66//-----------------------本页系统函数----------------------
67//当本页面成为系统当前页面时会运行的程序
68//一旦本页面变成非当前页面,系统会等待此
69//任务完成工作后暂停本线程。通过RunMutex实现
70staticcharMusicBuf[5128];
71staticvoidMusicPageRun_Task(voidTask_Parameters)
72{
73FRESULT Res;
74UINT ReadByte,count,j;
75//char MusicBuf[5122];
76charMusicPath[64];
77charpMusic;
78
79Debug("Music Page Run Task\n\r");
80
81while(1)
82{
83PageRunTaskLoopStart();
84switch(gPlayOperate)
85{
86casePlay_Nothing:
87OS_TaskDelayMs(200);
88break;
89casePlay_Start:
90if((gCurrentSelection==-1)||gCurrentSelection>=gMusicTotalNum)
91{
92gPlayOperate=Play_Nothing;
93break;
94}
95
96MusicPath[0]=0;
97strcat((void)MusicPath,(void)MUSIC_DIR_PATH"/");
98strcat((void)MusicPath,(void)gMusicSet[gCurrentSelection]);
99if((Res=f_open(&gMusicObj ,MusicPath, FA_OPEN_EXISTING|FA_READ) )!=FR_OK )
100{
101Debug("Open music flie error %d!:%s\n\r",Res,MusicPath);
102break;
103}
104Debug("Playing...\n\r");
105gPlayOperate=Play_Continue;
106break;
107casePlay_Continue:
108Res=f_read(&gMusicObj, MusicBuf,sizeof(MusicBuf),&ReadByte);
109if(!Res&&ReadByte)
110{
111pMusic=MusicBuf;
112
113for(count=0;count<ReadByte;count+=32)
114{
115VS_XDCS_SET(0);
116for(j=32;j>0;j--)//每次送32个数据
117{
118SPI1_Write_Byte(pMusic++);
119}
120VS_XDCS_SET(1);
121
122while(!VS_DREQ)
123{
124
125}
126}
127
128}
129else
130{
131Debug("Read music file %s end!\n\r",MusicPath);
132
133VS_XDCS_SET(0);
134for(count=64;count;count--)
135{
136for(j=32;j>0;j--)//每次送32个数据
137{
138SPI1_Write_Byte(0);
139}
140while(!VS_DREQ);//OS_TaskDelayMs(5);
141}
142VS_XDCS_SET(1);
143
144if((gCurrentSelection+1)<gMusicTotalNum)
145{
146PlayMusic(gCurrentSelection+1);
147}
148else
149{
150PlayMusic(0);
151}
152}
153break;
154casePlay_Stop:
155Debug("Stop playing %s\n\r",MusicPath);
156if(f_close(&gMusicObj)!=FR_OK)
157{
158Debug("Close music file error!\n\r");
159}
160gPlayOperate=Play_Start;
161break;
162casePlay_ChangeVol:
163Debug("Set music output vol to %d\n\r",VolumeTable[gMusicVol]);
164Mp3SetVolume(VolumeTable[gMusicVol],VolumeTable[gMusicVol]);
165if(gCurrentSelection==-1)
166{
167DispPlayMsg("请选择文件!");
168gPlayOperate=Play_Start;
169}
170else
171{
172DispPlayMsg("正在播放...");
173gPlayOperate=Play_Continue;
174}
175break;
176}
177PageRunTaskLoopStop();
178}
179}
180
181//在每次本页面变成系统当前页面时会调用的程序
182staticintSystemEventHandlerMusicPage(SYSTEM_EVENT_TYPE SysEvent ,intIntParam,voidpSysParam)
183{
184staticu8 PageFristInit_Flag=0;
185GUI_REGION DrawRegion;
186inti;
187
188switch(SysEvent)
189{
190caseSys_Page_Init:
191caseSys_SubPage_Return:
192if(!PageFristInit_Flag)//页面首次创建时需要做的事情
193{
194gMusicPageRunMutex=OS_SemaphoreCreateMutex();
195OS_TaskCreate(MusicPageRun_Task , ( signed OS_CHAR)"MusicPageRun", OS_MINI_STACK_SIZE, NULL, MUSIC_TASK_PRIORITY, NULL );
196
197gCurrentSelection=-1;
198gPlayOperate=Play_Nothing;
199
200gMusicVol=6;
201Mp3Start(VolumeTable[gMusicVol],VolumeTable[gMusicVol]);
202}
203DrawRegion.x=DrawRegion.y=0;
204DrawRegion.w=1;
205DrawRegion.h=320;
206Gui_FillImageArray_H((u8)gImage_MainBg,240,&DrawRegion);
207DispTime();
208break;
209caseSys_TouchRegionSetFinish:
210DispPlayName("");
211DispPlayMsg("请选择文件!");
212
213if(!PageFristInit_Flag)//页面首次创建时需要做的事情
214{
215PageFristInit_Flag=1;
216ReadMusicDir(MUSIC_DIR_PATH);
217for(i=0;i<gMusicTotalNum;i++)
218{
219Debug("%d:%s\n\r",i,gMusicSet[i]);
220}
221}
222
223if(IntParam!=-1)
224{
225Debug("Play %s\n\r",gMusicSet[IntParam]);
226PlayMusic(IntParam);
227}
228else
229{
230PlayMusic(gCurrentSelection);
231}
232break;
233caseSys_Page_Clean:
234break;
235caseSys_Rtc_Min:
236DispTime();
237break;
238}
239
240return0;
241}
242
243staticintTouchEventHandlerMusicPage(intKey,TOUCH_EVENT_TYPE InEvent , TOUCH_INFOpTouchInfo)
244{
245FILE_LIST_PAGE_SET FileListParam;
246
247if(InEvent!=Touch_Key_Release)return0;
248
249switch(Key)
250{
251caseMusicKey_ExtiKey0:
252PrtScreen();
253break;
254caseMusicKey_VolumeUp:
255if(gMusicVol<VOL_STEP-1)
256{
257gMusicVol++;
258gPlayOperate=Play_ChangeVol;
259}
260break;
261caseMusicKey_VolumeDown:
262if(gMusicVol>0)
263{
264gMusicVol--;
265gPlayOperate=Play_ChangeVol;
266}
267break;
268caseMusicKey_PreOne:
269if(gCurrentSelection>0)
270{
271PlayMusic(gCurrentSelection-1);
272}
273else
274{
275PlayMusic(gMusicTotalNum-1);
276}
277break;
278caseMusicKey_NextOne:
279if((gCurrentSelection+1)<gMusicTotalNum)
280{
281PlayMusic(gCurrentSelection+1);
282}
283else
284{
285PlayMusic(0);
286}
287break;
288caseMusicKey_Find:
289FileListParam.pCallerPageRid="0.1";
290FileListParam.pFileSet=gMusicSet;
291FileListParam.FileTotalNum=gMusicTotalNum;
292GotoPage("0.1.1",gCurrentSelection,&FileListParam);
293break;
294caseMusicKey_Pause:
295if(gCurrentSelection!=-1)
296{
297DispPlayMsg("暂停播放");
298gPlayOperate=Play_Nothing;
299}
300break;
301caseMusicKey_Play:
302if(gCurrentSelection==-1)
303{
304DispPlayMsg("请选择文件!");
305gPlayOperate=Play_Start;
306}
307else
308{
309DispPlayMsg("正在播放...");
310gPlayOperate=Play_Continue;
311}
312break;
313caseMusicKey_Return:
314GotoPage("0",-1,NULL);
315break;
316}
317
318return0;
319}原文链接: https://www.cnblogs.com/jukeshang/archive/2011/03/09/1978580.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/22155
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!