home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 3
/
FreeSoftwareCollection3pd199x-jp.img
/
oh_fm
/
voicedmp
/
hvrec.bas
< prev
next >
Wrap
BASIC Source File
|
1980-01-02
|
12KB
|
220 lines
10000 '
10001 ' 16進数の音声データを録音する。 : By たろぴょん
10002 '
10003 ' save "HVREC.BAS",A : 'filename
10004 '
10005 ' Last Update 1989.10.24
10006 '
10100 '
10110 DEFINT A-Z
10120 SR = 8000 : 'サンプリングレート
10130 VM = 100 : '再生音量
10140 SR_MAX=(SR*.4!+32)\2
10150 DIM R0(SR_MAX),R1(SR_MAX),R2(SR_MAX),R3(SR_MAX)
10160 DIM R4(SR_MAX),R5(SR_MAX),R6(SR_MAX),R7(SR_MAX)
10170 DIM R8(SR_MAX),R9(SR_MAX),RA(SR_MAX),RB(SR_MAX)
10180 DIM RC(SR_MAX),RD(SR_MAX),RE(SR_MAX),RF(SR_MAX)
10190 DIM R_FLG(16) : FOR I=0 TO 15 : R_FLG(I)=0: NEXT
11000 '
11001 ' MAIN ROUTINE
11002 '
11003 *MAIN
11010 *MENU
11020 PRINT : PRINT "***** 16進数の音声データを録音する。 *****" : PRINT
11100 '
11110 *MENU_10 : PRINT
11120 PRINT "***** メニュー *****"
11130 PRINT "*"
11140 PRINT "* Command ? [1:録音 [2:再生 [3:ロード [4:セーブ [5:終了 ";
11150 INPUT A$ : A=VAL(A$) : IF A<1 OR A>5 THEN GOTO *MENU_10
11160 ON A GOTO *L_REC,*L_PLAY,*L_LOAD,*L_SAVE
11200 '
11201 ' EXIT
11202 '
11210 ON ERROR GOTO *EXIT_ERROR
11220 GOTO *S_RETURN
11230 *EXIT_ERROR
11240 END
12000 '
12001 ' レコーディング
12002 '
12003 *L_REC
12010 PRINT : PRINT "***** 録音 *****" : PRINT
12020 PRINT "録音されている文字 0123456789ABCDEF": PRINT " ";
12030 FOR I=0 TO 15 : IF R_FLG(I) THEN PRINT "*"; ELSE PRINT "-";
12040 NEXT : PRINT
12050 *L_R10
12060 PRINT " [1:すべて録音する [2:指定の(16進)文字のみ [0:メニュー ";
12070 INPUT A$ : A=VAL(A$):IF A=0 THEN GOTO *MENU
12080 IF A<1 OR A>2 THEN GOTO *L_R10
12090 IF A=2 THEN GOTO *L_R20
12100 '
12101 ' 全録音
12102 '
12110 RNO=0
12120 WHILE RNO<16
12130 GOSUB *REC_SUB
12140 IF R=(-1) THEN GOTO *L_R30 'Exit
12150 RNO=RNO+1
12160 WEND
12170 *L_R30 : PRINT : GOTO *L_REC
12200 '
12201 ' 指定の数値だけ録音する。
12202 '
12203 *L_R20
12210 PRINT "録音する文字は? (0-9,A-B) ";:INPUT A$
12220 A=VAL("&H"+A$):IF A$<>"0" AND A=0 THEN GOTO *L_REC
12230 IF A<0 OR A>15 THEN GOTO *L_REC
12240 RNO=A : GOSUB *REC_SUB
12250 GOTO *L_REC
12500 '
12501 ' 実際の録音パート [in:RNO [out:R
12502 '
12504 *REC_SUB
12510 PRINT : PRINT "----- 録音する文字 (";HEX$(RNO);") -----";
12520 PRINT " [SPACE:実行 [ESC:取消 ";
12530 *L_R090 : WHILE INKEY$<>"":WEND
12540 A$="":WHILE A$="" : A$=INKEY$ : WEND
12550 IF A$=CHR$(27) THEN R=1:RETURN 'Cancel
12560 IF A$<>" " AND A$<>CHR$(13) THEN *L_R100
12570 FOR I=0 TO 2000 : NEXT : PRINT "*"; 'Wait
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
12590 R_FLG(RNO)=1 : PRINT " OK !!" : R=0 : RETURN
12600 *REC_0 : PCMREC R0,SR : RETURN
12610 *REC_1 : PCMREC R1,SR : RETURN
12620 *REC_2 : PCMREC R2,SR : RETURN
12630 *REC_3 : PCMREC R3,SR : RETURN
12640 *REC_4 : PCMREC R4,SR : RETURN
12650 *REC_5 : PCMREC R5,SR : RETURN
12660 *REC_6 : PCMREC R6,SR : RETURN
12670 *REC_7 : PCMREC R7,SR : RETURN
12680 *REC_8 : PCMREC R8,SR : RETURN
12690 *REC_9 : PCMREC R9,SR : RETURN
12700 *REC_A : PCMREC RA,SR : RETURN
12710 *REC_B : PCMREC RB,SR : RETURN
12720 *REC_C : PCMREC RC,SR : RETURN
12730 *REC_D : PCMREC RD,SR : RETURN
12740 *REC_E : PCMREC RE,SR : RETURN
12750 *REC_F : PCMREC RF,SR : RETURN
13000 '
13001 ' 再生
13002 '
13004 *L_PLAY
13010 PRINT : PRINT "**** 再生 *****" : PRINT
13020 PRINT " 0123456789ABCDEF"
13030 PRINT " ";
13040 FOR RNO=0 TO 15
13050 IF R_FLG(RNO)=0 THEN PRINT "-"; ELSE PRINT "*"; : GOSUB *PLAY_SUB
13060 NEXT
13070 PRINT
13080 GOTO *MENU
13200 '
13204 *PLAY_SUB
13210 IF RNO<0 OR RNO>15 THEN R=-1 : RETURN
13220 IF R_FLG(RNO)=0 THEN R=1 : RETURN
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
13240 FOR I=0 TO 4000 : NEXT 'wait
13250 R=0 : RETURN
13300 *PLY_0 : PCMPLAY R0,VM : RETURN
13310 *PLY_1 : PCMPLAY R1,VM : RETURN
13320 *PLY_2 : PCMPLAY R2,VM : RETURN
13330 *PLY_3 : PCMPLAY R3,VM : RETURN
13340 *PLY_4 : PCMPLAY R4,VM : RETURN
13350 *PLY_5 : PCMPLAY R5,VM : RETURN
13360 *PLY_6 : PCMPLAY R6,VM : RETURN
13370 *PLY_7 : PCMPLAY R7,VM : RETURN
13380 *PLY_8 : PCMPLAY R8,VM : RETURN
13390 *PLY_9 : PCMPLAY R9,VM : RETURN
13400 *PLY_A : PCMPLAY RA,VM : RETURN
13410 *PLY_B : PCMPLAY RB,VM : RETURN
13420 *PLY_C : PCMPLAY RC,VM : RETURN
13430 *PLY_D : PCMPLAY RD,VM : RETURN
13440 *PLY_E : PCMPLAY RE,VM : RETURN
13450 *PLY_F : PCMPLAY RF,VM : RETURN
14000 '
14001 ' セーブ
14002 '
14003 *L_SAVE : ON ERROR GOTO 0
14010 PRINT : PRINT "**** 録音データのセーブ *****" : PRINT
14020 I=0 : WHILE I<16 : IF R_FLG(I)=0 THEN PRINT "すべての文字データを録音してください。":GOTO *MENU
14030 I=I+1 : WEND
14040 PRINT " Filename (.HRC) ? ";:LINE INPUT FL$
14050 IF FL$="" THEN GOTO *MENU
14060 IF INSTR(FL$,".")=0 THEN FL$=FL$+".HRC"
14070 PRINT
14100 '
14110 *SV_OPEN : ON ERROR GOTO *SAVE_ERR
14120 OPEN "O",#1,FL$
14130 PRINT #1,"HexVoice";
14140 PRINT " 0123456789ABCDEF":PRINT " ";
14200 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(R0(I))));CHR$(PEEK(VARPTR(R0(I))+1));: NEXT:PRINT "*";
14210 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(R1(I))));CHR$(PEEK(VARPTR(R1(I))+1));: NEXT:PRINT "*";
14220 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(R2(I))));CHR$(PEEK(VARPTR(R2(I))+1));: NEXT:PRINT "*";
14230 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(R3(I))));CHR$(PEEK(VARPTR(R3(I))+1));: NEXT : PRINT "*";
14240 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(R4(I))));CHR$(PEEK(VARPTR(R4(I))+1));: NEXT : PRINT "*";
14250 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(R5(I))));CHR$(PEEK(VARPTR(R5(I))+1));: NEXT : PRINT "*";
14260 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(R6(I))));CHR$(PEEK(VARPTR(R6(I))+1));: NEXT : PRINT "*";
14270 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(R7(I))));CHR$(PEEK(VARPTR(R7(I))+1));: NEXT : PRINT "*";
14280 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(R8(I))));CHR$(PEEK(VARPTR(R8(I))+1));: NEXT : PRINT "*";
14290 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(R9(I))));CHR$(PEEK(VARPTR(R9(I))+1));: NEXT : PRINT "*";
14300 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(RA(I))));CHR$(PEEK(VARPTR(RA(I))+1));: NEXT : PRINT "*";
14310 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(RB(I))));CHR$(PEEK(VARPTR(RB(I))+1));: NEXT : PRINT "*";
14320 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(RC(I))));CHR$(PEEK(VARPTR(RC(I))+1));: NEXT : PRINT "*";
14330 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(RD(I))));CHR$(PEEK(VARPTR(RD(I))+1));: NEXT : PRINT "*";
14340 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(RE(I))));CHR$(PEEK(VARPTR(RE(I))+1));: NEXT : PRINT "*";
14350 FOR I=0 TO SR_MAX : PRINT #1,CHR$(PEEK(VARPTR(RF(I))));CHR$(PEEK(VARPTR(RF(I))+1));: NEXT : PRINT "*";
14360 PRINT
14370 CLOSE #1 : ON ERROR GOTO 0
14380 GOTO *MENU
14500 '
14503 *SAVE_ERR
14510 IF ERR<>64 THEN GOTO *SVER_
14520 PRINT "@ 指定のファイルは既に存在しています。"
14530 PRINT " Overwrite ? (y/n)";:INPUT A$
14540 IF A$="Y" OR A$="y" OR A$="y" OR A$="Y" THEN KILL FL$ : RESUME *SV_OPEN
14550 PRINT : RESUME *L_SAVE
14560 *SVER_
14570 PRINT "@ Line ";ERL;" : error ";ERR
14580 PRINT : RESUE *L_SAVE
15000 '
15001 ' ロード
15002 '
15003 *L_LOAD : ON ERROR GOTO 0
15010 PRINT : PRINT "***** 音声データのロード *****" : PRINT
15020 PRINT " Filename (.HRC) ? ";:LINE INPUT FL$
15030 IF FL$="" THEN GOTO *MENU
15040 IF INSTR(FL$,".")=0 THEN FL$=FL$+".HRC"
15050 PRINT
15100 '
15110 ON ERROR GOTO *LOAD_ERR
15120 OPEN "I",#1,FL$
15130 A$=INPUT$(8,#1):'Get header "HexVoice"
15140 PRINT " 0123456789ABCDEF":PRINT " ";
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
15360 PRINT
15370 CLOSE #1 : ON ERROR GOTO 0
15380 GOTO *MENU
15500 '
15503 *LOAD_ERR
15510 IF ERR<>63 THEN GOTO *LDER
15520 PRINT "@ 指定のファイルが見つかりません。"
15530 RESUME *L_LOAD
15540 *LDER
15550 PRINT "@ Line ";ERL;" : error ";ERR
15560 RESUME *L_LOAD