home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 3 / FreeSoftwareCollection3pd199x-jp.img / oh_fm / voicedmp / hvrec.bas < prev    next >
BASIC Source File  |  1980-01-02  |  12KB  |  220 lines

  1. 10000 '
  2. 10001 ' 16進数の音声データを録音する。 : By たろぴょん
  3. 10002 '
  4. 10003 ' save "HVREC.BAS",A : 'filename
  5. 10004 '
  6. 10005 ' Last Update 1989.10.24
  7. 10006 '
  8. 10100 '
  9. 10110 DEFINT A-Z
  10. 10120 SR = 8000 : 'サンプリングレート
  11. 10130 VM = 100  : '再生音量
  12. 10140 SR_MAX=(SR*.4!+32)\2
  13. 10150 DIM R0(SR_MAX),R1(SR_MAX),R2(SR_MAX),R3(SR_MAX)
  14. 10160 DIM R4(SR_MAX),R5(SR_MAX),R6(SR_MAX),R7(SR_MAX)
  15. 10170 DIM R8(SR_MAX),R9(SR_MAX),RA(SR_MAX),RB(SR_MAX)
  16. 10180 DIM RC(SR_MAX),RD(SR_MAX),RE(SR_MAX),RF(SR_MAX)
  17. 10190 DIM R_FLG(16) : FOR I=0 TO 15 : R_FLG(I)=0: NEXT
  18. 11000 '
  19. 11001 ' MAIN ROUTINE
  20. 11002 '
  21. 11003 *MAIN
  22. 11010 *MENU
  23. 11020 PRINT : PRINT "***** 16進数の音声データを録音する。 *****" : PRINT 
  24. 11100 '
  25. 11110 *MENU_10 : PRINT 
  26. 11120 PRINT "***** メニュー *****"
  27. 11130 PRINT "*"
  28. 11140 PRINT "*   Command ? [1:録音 [2:再生 [3:ロード [4:セーブ [5:終了 ";
  29. 11150 INPUT A$ : A=VAL(A$) : IF A<1 OR A>5 THEN GOTO *MENU_10
  30. 11160 ON A GOTO *L_REC,*L_PLAY,*L_LOAD,*L_SAVE
  31. 11200 '
  32. 11201 ' EXIT
  33. 11202 '
  34. 11210 ON ERROR GOTO *EXIT_ERROR
  35. 11220 GOTO *S_RETURN
  36. 11230 *EXIT_ERROR
  37. 11240 END
  38. 12000 '
  39. 12001 ' レコーディング
  40. 12002 '
  41. 12003 *L_REC
  42. 12010 PRINT : PRINT "***** 録音 *****" : PRINT 
  43. 12020 PRINT "録音されている文字 0123456789ABCDEF":                                PRINT "                   ";
  44. 12030 FOR I=0 TO 15 : IF R_FLG(I) THEN PRINT "*"; ELSE PRINT "-";
  45. 12040 NEXT : PRINT 
  46. 12050 *L_R10
  47. 12060 PRINT "    [1:すべて録音する [2:指定の(16進)文字のみ [0:メニュー ";
  48. 12070 INPUT A$ : A=VAL(A$):IF A=0 THEN GOTO *MENU 
  49. 12080 IF A<1 OR A>2 THEN GOTO *L_R10
  50. 12090 IF A=2 THEN GOTO *L_R20
  51. 12100 '
  52. 12101 ' 全録音
  53. 12102 '
  54. 12110 RNO=0
  55. 12120 WHILE RNO<16
  56. 12130   GOSUB *REC_SUB
  57. 12140   IF R=(-1) THEN GOTO *L_R30 'Exit
  58. 12150   RNO=RNO+1
  59. 12160 WEND
  60. 12170 *L_R30 : PRINT : GOTO *L_REC
  61. 12200 '
  62. 12201 ' 指定の数値だけ録音する。
  63. 12202 '
  64. 12203 *L_R20
  65. 12210 PRINT "録音する文字は? (0-9,A-B) ";:INPUT A$
  66. 12220 A=VAL("&H"+A$):IF A$<>"0" AND A=0 THEN GOTO *L_REC
  67. 12230 IF A<0 OR A>15 THEN GOTO *L_REC
  68. 12240 RNO=A : GOSUB *REC_SUB
  69. 12250 GOTO *L_REC
  70. 12500 '
  71. 12501 ' 実際の録音パート [in:RNO [out:R
  72. 12502 '
  73. 12504 *REC_SUB
  74. 12510 PRINT : PRINT "----- 録音する文字 (";HEX$(RNO);") -----";
  75. 12520 PRINT " [SPACE:実行 [ESC:取消 ";
  76. 12530 *L_R090 : WHILE INKEY$<>"":WEND
  77. 12540 A$="":WHILE A$="" : A$=INKEY$ : WEND
  78. 12550 IF A$=CHR$(27) THEN R=1:RETURN 'Cancel
  79. 12560 IF A$<>" " AND A$<>CHR$(13) THEN *L_R100
  80. 12570 FOR I=0 TO 2000 : NEXT : PRINT "*"; 'Wait
  81. 12580 ON RNO+1 GOSUB *REC_0,*REC_1,*REC_2,*REC_3,*REC_4,*REC_5,*REC_6,*REC_7,*REC_8,*REC_9,*REC_A,*REC_B,*REC_C,*REC_D,*REC_E,*REC_F
  82. 12590 R_FLG(RNO)=1 : PRINT " OK !!" : R=0 : RETURN
  83. 12600 *REC_0 : PCMREC R0,SR : RETURN
  84. 12610 *REC_1 : PCMREC R1,SR : RETURN
  85. 12620 *REC_2 : PCMREC R2,SR : RETURN
  86. 12630 *REC_3 : PCMREC R3,SR : RETURN
  87. 12640 *REC_4 : PCMREC R4,SR : RETURN
  88. 12650 *REC_5 : PCMREC R5,SR : RETURN
  89. 12660 *REC_6 : PCMREC R6,SR : RETURN
  90. 12670 *REC_7 : PCMREC R7,SR : RETURN
  91. 12680 *REC_8 : PCMREC R8,SR : RETURN
  92. 12690 *REC_9 : PCMREC R9,SR : RETURN
  93. 12700 *REC_A : PCMREC RA,SR : RETURN
  94. 12710 *REC_B : PCMREC RB,SR : RETURN
  95. 12720 *REC_C : PCMREC RC,SR : RETURN
  96. 12730 *REC_D : PCMREC RD,SR : RETURN
  97. 12740 *REC_E : PCMREC RE,SR : RETURN
  98. 12750 *REC_F : PCMREC RF,SR : RETURN
  99. 13000 '
  100. 13001 ' 再生
  101. 13002 '
  102. 13004 *L_PLAY
  103. 13010 PRINT : PRINT "**** 再生 *****" : PRINT 
  104. 13020 PRINT "        0123456789ABCDEF"
  105. 13030 PRINT "        ";
  106. 13040 FOR RNO=0 TO 15
  107. 13050   IF R_FLG(RNO)=0 THEN PRINT "-"; ELSE PRINT "*"; : GOSUB *PLAY_SUB
  108. 13060 NEXT
  109. 13070 PRINT
  110. 13080 GOTO *MENU
  111. 13200 '
  112. 13204 *PLAY_SUB
  113. 13210 IF RNO<0 OR RNO>15 THEN R=-1 : RETURN
  114. 13220 IF R_FLG(RNO)=0 THEN R=1 : RETURN
  115. 13230 ON RNO+1 GOSUB *PLY_0,*PLY_1,*PLY_2,*PLY_3,*PLY_4,*PLY_5,*PLY_6,*PLY_7,*PLY_8,*PLY_9,*PLY_A,*PLY_B,*PLY_C,*PLY_D,*PLY_E,*PLY_F
  116. 13240 FOR I=0 TO 4000 : NEXT 'wait
  117. 13250 R=0 : RETURN
  118. 13300 *PLY_0 : PCMPLAY R0,VM : RETURN
  119. 13310 *PLY_1 : PCMPLAY R1,VM : RETURN
  120. 13320 *PLY_2 : PCMPLAY R2,VM : RETURN
  121. 13330 *PLY_3 : PCMPLAY R3,VM : RETURN
  122. 13340 *PLY_4 : PCMPLAY R4,VM : RETURN
  123. 13350 *PLY_5 : PCMPLAY R5,VM : RETURN
  124. 13360 *PLY_6 : PCMPLAY R6,VM : RETURN
  125. 13370 *PLY_7 : PCMPLAY R7,VM : RETURN
  126. 13380 *PLY_8 : PCMPLAY R8,VM : RETURN
  127. 13390 *PLY_9 : PCMPLAY R9,VM : RETURN
  128. 13400 *PLY_A : PCMPLAY RA,VM : RETURN
  129. 13410 *PLY_B : PCMPLAY RB,VM : RETURN
  130. 13420 *PLY_C : PCMPLAY RC,VM : RETURN
  131. 13430 *PLY_D : PCMPLAY RD,VM : RETURN
  132. 13440 *PLY_E : PCMPLAY RE,VM : RETURN
  133. 13450 *PLY_F : PCMPLAY RF,VM : RETURN
  134. 14000 '
  135. 14001 ' セーブ
  136. 14002 '
  137. 14003 *L_SAVE : ON ERROR GOTO 0
  138. 14010 PRINT : PRINT "**** 録音データのセーブ *****" : PRINT 
  139. 14020 I=0 : WHILE I<16 : IF R_FLG(I)=0 THEN                                         PRINT "すべての文字データを録音してください。":GOTO *MENU
  140. 14030 I=I+1 : WEND
  141. 14040 PRINT "    Filename (.HRC) ? ";:LINE INPUT FL$
  142. 14050 IF FL$="" THEN GOTO *MENU
  143. 14060 IF INSTR(FL$,".")=0 THEN FL$=FL$+".HRC"
  144. 14070 PRINT 
  145. 14100 '
  146. 14110 *SV_OPEN : ON ERROR GOTO *SAVE_ERR
  147. 14120 OPEN "O",#1,FL$
  148. 14130 PRINT #1,"HexVoice";
  149. 14140 PRINT "    0123456789ABCDEF":PRINT "    ";
  150. 14200 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(R0(I))));CHR$(PEEK(VARPTR(R0(I))+1));:            NEXT:PRINT "*";
  151. 14210 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(R1(I))));CHR$(PEEK(VARPTR(R1(I))+1));:            NEXT:PRINT "*";
  152. 14220 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(R2(I))));CHR$(PEEK(VARPTR(R2(I))+1));:            NEXT:PRINT "*";
  153. 14230 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(R3(I))));CHR$(PEEK(VARPTR(R3(I))+1));:            NEXT : PRINT "*";
  154. 14240 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(R4(I))));CHR$(PEEK(VARPTR(R4(I))+1));:            NEXT : PRINT "*";
  155. 14250 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(R5(I))));CHR$(PEEK(VARPTR(R5(I))+1));:            NEXT : PRINT "*";
  156. 14260 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(R6(I))));CHR$(PEEK(VARPTR(R6(I))+1));:            NEXT : PRINT "*";
  157. 14270 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(R7(I))));CHR$(PEEK(VARPTR(R7(I))+1));:            NEXT : PRINT "*";
  158. 14280 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(R8(I))));CHR$(PEEK(VARPTR(R8(I))+1));:            NEXT : PRINT "*";
  159. 14290 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(R9(I))));CHR$(PEEK(VARPTR(R9(I))+1));:            NEXT : PRINT "*";
  160. 14300 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(RA(I))));CHR$(PEEK(VARPTR(RA(I))+1));:            NEXT : PRINT "*";
  161. 14310 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(RB(I))));CHR$(PEEK(VARPTR(RB(I))+1));:            NEXT : PRINT "*";
  162. 14320 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(RC(I))));CHR$(PEEK(VARPTR(RC(I))+1));:            NEXT : PRINT "*";
  163. 14330 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(RD(I))));CHR$(PEEK(VARPTR(RD(I))+1));:            NEXT : PRINT "*";
  164. 14340 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(RE(I))));CHR$(PEEK(VARPTR(RE(I))+1));:            NEXT : PRINT "*";
  165. 14350 FOR I=0 TO SR_MAX :                                                         PRINT #1,CHR$(PEEK(VARPTR(RF(I))));CHR$(PEEK(VARPTR(RF(I))+1));:            NEXT : PRINT "*";
  166. 14360 PRINT 
  167. 14370 CLOSE #1 : ON ERROR GOTO 0
  168. 14380 GOTO *MENU
  169. 14500 '
  170. 14503 *SAVE_ERR
  171. 14510 IF ERR<>64 THEN GOTO *SVER_
  172. 14520   PRINT "@ 指定のファイルは既に存在しています。"
  173. 14530   PRINT "  Overwrite ? (y/n)";:INPUT A$
  174. 14540   IF A$="Y" OR A$="y" OR A$="y" OR A$="Y" THEN                                KILL FL$ : RESUME *SV_OPEN
  175. 14550   PRINT : RESUME *L_SAVE
  176. 14560 *SVER_
  177. 14570 PRINT "@ Line ";ERL;" : error ";ERR
  178. 14580 PRINT : RESUE *L_SAVE
  179. 15000 '
  180. 15001 ' ロード
  181. 15002 '
  182. 15003 *L_LOAD : ON ERROR GOTO 0
  183. 15010 PRINT  : PRINT "***** 音声データのロード *****" : PRINT 
  184. 15020 PRINT "    Filename (.HRC) ? ";:LINE INPUT FL$
  185. 15030 IF FL$="" THEN GOTO *MENU
  186. 15040 IF INSTR(FL$,".")=0 THEN FL$=FL$+".HRC"
  187. 15050 PRINT 
  188. 15100 '
  189. 15110 ON ERROR GOTO *LOAD_ERR
  190. 15120 OPEN "I",#1,FL$
  191. 15130 A$=INPUT$(8,#1):'Get header "HexVoice"
  192. 15140 PRINT "    0123456789ABCDEF":PRINT "    ";
  193. 15200 FOR I=0 TO SR_MAX : POKE VARPTR(R0(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(R0(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(0)=1
  194. 15210 FOR I=0 TO SR_MAX : POKE VARPTR(R1(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(R1(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(1)=1
  195. 15220 FOR I=0 TO SR_MAX : POKE VARPTR(R2(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(R2(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(2)=1
  196. 15230 FOR I=0 TO SR_MAX : POKE VARPTR(R3(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(R3(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(3)=1
  197. 15240 FOR I=0 TO SR_MAX : POKE VARPTR(R4(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(R4(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(4)=1
  198. 15250 FOR I=0 TO SR_MAX : POKE VARPTR(R5(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(R5(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(5)=1
  199. 15260 FOR I=0 TO SR_MAX : POKE VARPTR(R6(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(R6(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(6)=1
  200. 15270 FOR I=0 TO SR_MAX : POKE VARPTR(R7(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(R7(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(7)=1
  201. 15280 FOR I=0 TO SR_MAX : POKE VARPTR(R8(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(R8(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(8)=1
  202. 15290 FOR I=0 TO SR_MAX : POKE VARPTR(R9(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(R9(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(9)=1
  203. 15300 FOR I=0 TO SR_MAX : POKE VARPTR(RA(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(RA(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(10)=1
  204. 15310 FOR I=0 TO SR_MAX : POKE VARPTR(RB(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(RB(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(11)=1
  205. 15320 FOR I=0 TO SR_MAX : POKE VARPTR(RC(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(RC(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(12)=1
  206. 15330 FOR I=0 TO SR_MAX : POKE VARPTR(RD(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(RD(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(13)=1
  207. 15340 FOR I=0 TO SR_MAX : POKE VARPTR(RE(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(RE(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(14)=1
  208. 15350 FOR I=0 TO SR_MAX : POKE VARPTR(RF(I))  ,ASC(INPUT$(1,1)):                                      POKE VARPTR(RF(I))+1,ASC(INPUT$(1,1)):                  NEXT:PRINT "*"; :R_FLG(15)=1
  209. 15360 PRINT
  210. 15370 CLOSE #1 : ON ERROR GOTO 0
  211. 15380 GOTO *MENU
  212. 15500 '
  213. 15503 *LOAD_ERR
  214. 15510 IF ERR<>63 THEN GOTO *LDER
  215. 15520   PRINT "@ 指定のファイルが見つかりません。"
  216. 15530   RESUME *L_LOAD
  217. 15540 *LDER
  218. 15550 PRINT "@ Line ";ERL;" : error ";ERR
  219. 15560 RESUME *L_LOAD
  220.