📄 voice_task.lst
字号:
463 2 {
464 3 disp_clock_reset(); /* reset clock timer */
465 3
466 3 for (i = 255; i != 0; i--)
467 3 {
468 4 voice_buffer[i] = 0x00;
469 4 }
470 3 voice_buffer[0] = 0x00;
471 3
472 3 if (File_entry_root(FILE_WAV) == OK) /* WAV file in root dir? */
473 3 {
474 4 do
475 4 {
476 5 (char *)file_name = File_get_name(); /* Get file name */
477 5 if ((file_name[0] == 'V') &&
478 5 (file_name[1] == 'O') &&
479 5 (file_name[2] == 'I') &&
480 5 (file_name[3] == 'C') &&
481 5 (file_name[4] == 'E') &&
482 5 ((file_name[5] >= '0') && (file_name[5] <= '9')) &&
483 5 ((file_name[6] >= '0') && (file_name[6] <= '9')) &&
484 5 ((file_name[7] >= '0') && (file_name[7] <= '9'))
485 5 )
486 5 {
487 6 /* Calculate actual index */
488 6 i = (Byte)(file_name[5] - '0') * 100;
C51 COMPILER V7.06 VOICE_TASK 05/05/2005 12:12:04 PAGE 9
489 6 i += (Byte)(file_name[6] - '0') * 10;
490 6 i += (Byte)(file_name[7] - '0') * 1;
491 6 voice_buffer[i] = 0xFF;
492 6 }
493 5 }
494 4 while (File_goto_next() == OK); /* Do it still we have not reached the last file */
495 4 }
496 3 else
497 3 {
498 4 file_name = buff;
499 4 }
500 3
501 3 i = 0;
502 3 if (voice_buffer[i] != 0x00)
503 3 {
504 4 i++;
505 4 while ((voice_buffer[i] != 0x00) && (i != 0)) i++; /* determine a free index */
506 4 }
507 3
508 3 if (voice_buffer[i] == 0) /* Find a free indice ? */
509 3 {
510 4 file_name[0] = 'V';
511 4 file_name[1] = 'O';
512 4 file_name[2] = 'I';
513 4 file_name[3] = 'C';
514 4 file_name[4] = 'E';
515 4 file_name[5] = '0' + (i / 100);
516 4 file_name[6] = '0' + ((i % 100) / 10);
517 4 file_name[7] = '0' + (((i % 100) % 10));
518 4 file_name[8] = 'W';
519 4 file_name[9] = 'A';
520 4 file_name[10] = 'V';
521 4
522 4 if (Fcreate(file_name, ATTR_FILE) != OK) /* Create file */
523 4 {
524 5 voice_state = VOICE_ERROR;
525 5 }
526 4 else
527 4 {
528 5 print_file_name(); /* display new file name */
529 5 voc_cpt = 0;
530 5 print_state_record(); /* display record icon */
531 5 voc_rec_init();
532 5 disp_clock_start(); /* start clock timer */
533 5 voice_state = VOICE_RECORD;
534 5 }
535 4 }
536 3 else
537 3 {
538 4 voice_state = VOICE_ERROR;
539 4 }
540 3 break;
541 3 }
542 2
543 2
544 2 case VOICE_RECORD:
545 2 {
546 3 while ((Byte)voc_cpt != gl_pointer)
547 3 {
548 4 Fputc(voice_buffer[(Byte)voc_cpt]);
549 4 if (Feod()) /* check end of disk */
550 4 {
C51 COMPILER V7.06 VOICE_TASK 05/05/2005 12:12:04 PAGE 10
551 5 Voc_rec_stop(); /* stop voice sampling */
552 5 voice_state = VOICE_REC_STOP;
553 5 break; /* exit while loop */
554 5 }
555 4 voc_cpt++;
556 4 }
557 3
558 3 if (gl_key_press) /* a key is pressed? */
559 3 {
560 4 switch (gl_key)
561 4 {
562 5 case KEY_PAUSE:
563 5 disp_clock_stop(); /* suspend clock timer */
564 5 Voc_rec_pause();
565 5 print_state_pause(); /* display pause icon */
566 5 voice_state = VOICE_REC_PAUSE;
567 5 break;
568 5
569 5 case KEY_STOP:
570 5 Voc_rec_stop(); /* stop voice sampling */
571 5 voice_state = VOICE_REC_STOP;
572 5 break;
573 5
574 5 default:
575 5 break;
576 5 }
577 4 gl_key_press = FALSE; /* ack key usage */
578 4 }
579 3 break;
580 3 }
581 2
582 2
583 2 case VOICE_REC_PAUSE:
584 2 {
585 3 if (gl_key_press) /* a key is pressed? */
586 3 {
587 4 switch (gl_key)
588 4 {
589 5 case KEY_REC:
590 5 disp_clock_start(); /* restart clock timer */
591 5 print_state_record(); /* display record icon */
592 5 Voc_rec_start(); /* restart sampling */
593 5 voice_state = VOICE_RECORD;
594 5 break;
595 5
596 5 case KEY_STOP:
597 5 Voc_rec_stop(); /* stop voice sampling */
598 5 voice_state = VOICE_REC_STOP;
599 5 break;
600 5
601 5 default:
602 5 break;
603 5 }
604 4 gl_key_press = FALSE; /* ack key usage */
605 4 }
606 3 break;
607 3 }
608 2
609 2
610 2 case VOICE_REC_STOP:
611 2 {
612 3 /* update wave header */
C51 COMPILER V7.06 VOICE_TASK 05/05/2005 12:12:04 PAGE 11
613 3 Fseek(-voc_cpt); /* beginning of file */
614 3 Fputc(((Byte*)&gl_wav_header)[0]); /* 'R' */
615 3 Fputc(((Byte*)&gl_wav_header)[1]); /* 'I' */
616 3 Fputc(((Byte*)&gl_wav_header)[2]); /* 'F' */
617 3 Fputc(((Byte*)&gl_wav_header)[3]); /* 'F' */
618 3 voc_cpt -= 8;
619 3 Fputc(((Byte*)&voc_cpt)[3]); /* wave length */
620 3 Fputc(((Byte*)&voc_cpt)[2]);
621 3 Fputc(((Byte*)&voc_cpt)[1]);
622 3 Fputc(((Byte*)&voc_cpt)[0]);
623 3
624 3 for (i = 8; i != WAV_HEADER_SIZE-4; i++)
625 3 {
626 4 Fputc(((Byte code *)&gl_wav_header)[i]);
627 4 }
628 3 voc_cpt -= 36;
629 3 Fputc(((Byte*)&voc_cpt)[3]); /* data length */
630 3 Fputc(((Byte*)&voc_cpt)[2]);
631 3 Fputc(((Byte*)&voc_cpt)[1]);
632 3 Fputc(((Byte*)&voc_cpt)[0]);
633 3 for (i = 255; i != 0; i--)
634 3 {
635 4 Fputc(0x80); /* fill first sector data */
636 4 }
637 3 for (i = 257 - WAV_HEADER_SIZE; i != 0; i--)
638 3 {
639 4 Fputc(0x80); /* fill first sector data */
640 4 }
641 3 Fclose();
642 3 disp_end_of_play();
643 3 disp_clock_reset(); /* reset clock timer */
644 3 print_file_type(); /* display wav icon */
645 3 voice_state = VOICE_IDLE;
646 3 break;
647 3 }
648 2
649 2
650 2 case VOICE_ERROR:
651 2 {
652 3 disp_clock_reset(); /* reset clock timer */
653 3 print_state_error(); /* display error icon */
654 3 disp_name_stop();
655 3 voice_state = VOICE_IDLE;
656 3 break;
657 3 }
658 2
659 2
660 2 case VOICE_DELETE:
661 2 {
662 3 i = Fdelete();
663 3 if ((i == DEL_RET_OK) || (i == DEL_RET_ERROR_DIR))
664 3 { /* at least 1 *.wav file in root */
665 4 Frefresh(FILE_WAV);
666 4 print_file_name(); /* display file name */
667 4 voice_state = VOICE_IDLE;
668 4 }
669 3 else
670 3 { /* no more *.wav file */
671 4 print_state_blank(); /* select blank icon */
672 4 print_screen(VOICE_SCREEN); /* display voice screen */
673 4 print_voice_vol(Voc_get_volume()); /* display volume level */
674 4 voice_state = VOICE_NO_MSG;
C51 COMPILER V7.06 VOICE_TASK 05/05/2005 12:12:04 PAGE 12
675 4 }
676 3 break;
677 3 }
678 2 }
679 1 }
680
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1757 ----
CONSTANT SIZE = 34 ----
XDATA SIZE = 256 15
PDATA SIZE = ---- ----
DATA SIZE = 4 1
IDATA SIZE = 1 ----
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 + -