无损音乐

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[512
8];

71staticvoidMusicPageRun_Task(voidTask_Parameters)

72{

73FRESULT Res;

74UINT ReadByte,count,j;

75//char MusicBuf[512
2];

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_INFO
pTouchInfo)

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

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午12:05
下一篇 2023年2月8日 上午12:06

相关推荐