📄 song_drv.lst
字号:
224
225 /*F**************************************************************************
226 * NAME: song_get_level
227 *----------------------------------------------------------------------------
228 * PARAMS:
229 *
230 * return:
231 * level of sound selected
232 *----------------------------------------------------------------------------
233 * PURPOSE:
234 * Returns selected sound level
235 *----------------------------------------------------------------------------
236 * EXAMPLE:
237 *----------------------------------------------------------------------------
238 * NOTE:
239 *----------------------------------------------------------------------------
240 * REQUIREMENTS:
C51 COMPILER V6.20c SONG_DRV 07/10/2002 15:17:36 PAGE 5
241 *****************************************************************************/
242 Byte song_get_level (void)
243 {
244 1 switch (song_sound)
245 1 {
246 2 case SND_VOLUME:
247 2 {
248 3 return (MP3VOL);
249 3 }
250 2
251 2 case SND_BASS:
252 2 {
253 3 return (MP3BAS);
254 3 }
255 2
256 2 case SND_MEDIUM:
257 2 {
258 3 return (MP3MED);
259 3 break;
260 3 }
261 2
262 2 case SND_TREBLE:
263 2 {
264 3 return (MP3TRE);
265 3 }
266 2 }
267 1 }
268
269
270 /*F**************************************************************************
271 * NAME: song_init
272 *----------------------------------------------------------------------------
273 * PARAMS:
274 *
275 * return:
276 * header status: SONG_NO_ERR: header ok
277 * SONG_LAYER_ERR: not a layer 3 file
278 * SONG_BR_ERR: bit rate not supported
279 * SONG_FS_ERR: bad frequency sampling
280 * SONG_SYNC_ERR: no header found
281 *----------------------------------------------------------------------------
282 * PURPOSE:
283 * Initialize song playing depending on the frame
284 *----------------------------------------------------------------------------
285 * EXAMPLE:
286 *----------------------------------------------------------------------------
287 * NOTE:
288 *----------------------------------------------------------------------------
289 * REQUIREMENTS:
290 *****************************************************************************/
291 Byte song_init (void)
292 {
293 1 Byte b, c;
294 1
295 1 while (!Feof())
296 1 {
297 2 if (Fgetc() == MP3_SYNC_H)
298 2 { /* high order sync found */
299 3 b = Fgetc();
300 3 if ((b & MP3_MSK_SYNC) == MP3_SYNC_L)
301 3 { /* low order sync found */
302 4 if ((b & MP3_MSK_LAYER) != MP3_LAYER_III)
C51 COMPILER V6.20c SONG_DRV 07/10/2002 15:17:36 PAGE 6
303 4 {
304 5 return SONG_LAYER_ERR; /* bad layer */
305 5 }
306 4
307 4 c = Fgetc();
308 4 b = (b & MP3_MSK_VER) >> 1; /* keep MPEG Version B3 -> B2 */
309 4 b |= (c & MP3_MSK_FS) >> 2; /* read FS B3:2 -> B1:0 */
310 4 c &= MP3_MSK_BR;
311 4
312 4 switch (b)
313 4 {
314 5 case MP3_FS_44:
315 5 {
316 6 if ((c == MP3_BR_FREE) || (c > MP3_BR_256))
317 6 {
318 7 return SONG_BR_ERR; /* bad bit-rate */
319 7 }
320 6 break;
321 6 }
322 5 case MP3_FS_48:
323 5 {
324 6 if ((c == MP3_BR_FREE) || (c > MP3_BR_320))
325 6 {
326 7 return SONG_BR_ERR; /* bad bit-rate */
327 7 }
328 6 break;
329 6 }
330 5 case MP3_FS_32:
331 5 {
332 6 if ((c == MP3_BR_FREE) || (c > MP3_BR_224))
333 6 {
334 7 return SONG_BR_ERR; /* bad bit-rate */
335 7 }
336 6 break;
337 6 }
338 5 case MP3_FS_22:
339 5 case MP3_FS_24:
340 5 case MP3_FS_16:
341 5 {
342 6 if (c == MP3_BR_FREE)
343 6 {
344 7 return SONG_BR_ERR; /* bad bit-rate */
345 7 }
346 6 break;
347 6 }
348 5 default:
349 5 {
350 6 return SONG_FS_ERR; /* bad sampling frequency */
351 6 }
352 5 }
353 4 song_audio_init(); /* init audio interface */
354 4 clock_song_init(b); /* program the song clocks */
355 4 Dac_emphasis(Fgetc() & MP3_MSK_EMP);/* config DAC emphasis */
356 4 return SONG_NO_ERR;
357 4 }
358 3 }
359 2 }
360 1 return SONG_SYNC_ERR; /* bad MP3 file */
361 1 }
362
363
364 /*F**************************************************************************
C51 COMPILER V6.20c SONG_DRV 07/10/2002 15:17:36 PAGE 7
365 * NAME: song_audio_init
366 *----------------------------------------------------------------------------
367 * PARAMS:
368 *
369 * return:
370 *----------------------------------------------------------------------------
371 * PURPOSE:
372 * Audio interface initialization in song mode
373 *----------------------------------------------------------------------------
374 * EXAMPLE:
375 *----------------------------------------------------------------------------
376 * NOTE:
377 * DAC_NB_BIT defined in config.h
378 *----------------------------------------------------------------------------
379 * REQUIREMENTS:
380 *****************************************************************************/
381 void song_audio_init (void)
382 {
383 1 Aud_set_pcm_32(DAC_NB_BIT);
384 1 Aud_set_song();
385 1 Aud_enable();
386 1 Aud_disable_int(); /* disable audio interrupt */
387 1 Dac_unmute();
388 1 }
389
390
391 /*F**************************************************************************
392 * NAME: song_start
393 *----------------------------------------------------------------------------
394 * PARAMS:
395 *
396 * return:
397 *----------------------------------------------------------------------------
398 * PURPOSE:
399 * Start song playing
400 *----------------------------------------------------------------------------
401 * EXAMPLE:
402 *----------------------------------------------------------------------------
403 * NOTE:
404 *----------------------------------------------------------------------------
405 * REQUIREMENTS:
406 *****************************************************************************/
407 void song_start (void)
408 {
409 1 Aud_song_play(); /* start sample request */
410 1 mp3_init(); /* enable mp3 decoder */
411 1 }
412
413
414 /*F**************************************************************************
415 * NAME: song_stop
416 *----------------------------------------------------------------------------
417 * PARAMS:
418 *
419 * return:
420 *----------------------------------------------------------------------------
421 * PURPOSE:
422 * Stop song playing
423 *----------------------------------------------------------------------------
424 * EXAMPLE:
425 *----------------------------------------------------------------------------
426 * NOTE:
C51 COMPILER V6.20c SONG_DRV 07/10/2002 15:17:36 PAGE 8
427 *----------------------------------------------------------------------------
428 * REQUIREMENTS:
429 *****************************************************************************/
430 void song_stop (void)
431 {
432 1 Dac_mute(); /* silence */
433 1 aud_stop(); /* disable audio */
434 1 mp3_stop(); /* disable mp3 macrocell */
435 1 clock_disable(); /* disable clocks */
436 1 }
437
438
439
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 342 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 1
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -