|
DTMF信号音の生成(ピッポッパッ音)
※できるだけ受話器とスピーカーを近づけて行ってください
※電話がかかれば、当然ながら通話料が発生します
※電話のかけ間違い? にご注意ください
OPTION CHARACTER BYTE
DIM LOFREQ(12),HIFREQ(12)
FOR I=1 TO 12
READ LOFREQ(I),HIFREQ(I) !'周波数(Hz)データ
NEXT I
DATA 697,1209 !'1
DATA 697,1336 !'2
DATA 697,1447 !'3
DATA 770,1209 !'4
DATA 770,1336 !'5
DATA 770,1447 !'6
DATA 852,1209 !'7
DATA 852,1336 !'8
DATA 852,1447 !'9
DATA 941,1336 !'0
DATA 941,1209 !'*
DATA 941,1447 !'#
LET CHANNEL=1
LET SAMPLEBIT=16
LET HEADERSIZE=16
LET WAVETYPE=1
LET SAMPLINGFREQ=22050 !'サンプリング周波数
LET SAMPLESIZE = SAMPLEBIT / 8 * CHANNEL
LET DATARATE = SAMPLESIZE * SAMPLINGFREQ
LET VOL=.95
LET LEVEL=2^(SAMPLEBIT-1)*VOL
!'LET PATH$="C:WINDOWS\TEMP\" !'作業用フォルダ、RAMディスクなど
LET TELNUM$="TEL 117" !'電話番号(時報) 兼ファイル名
LET SECOND1=.3 !'信号音継続時間(秒)
LET SECOND2=.1 !'区切り時間(秒)
FOR I=1 TO LEN(TELNUM$)
IF POS("0123456789*#",MID$(TELNUM$,I,1))>0 THEN LET NUM$=NUM$ & MID$(TELNUM$,I,1) !'電話番号のみを取り出す
NEXT I
LET SECOND=LEN(NUM$)*(SECOND1+SECOND2)
LET PCMSIZE=INT(DATARATE*SECOND)
LET WAVEFILESIZE = PCMSIZE + 36
OPEN #1:NAME PATH$ & TELNUM$ & ".wav"
ERASE #1
PRINT #1:"RIFF";
PRINT #1:MKL$(WAVEFILESIZE);
PRINT #1:"WAVEfmt ";
PRINT #1:MKL$(HEADERSIZE);
PRINT #1:MKI$(WAVETYPE);
PRINT #1:MKI$(CHANNEL);
PRINT #1:MKL$(SAMPLINGFREQ);
PRINT #1:MKL$(DATARATE);
PRINT #1:MKI$(SAMPLESIZE);
PRINT #1:MKI$(SAMPLEBIT);
PRINT #1:"data";
PRINT #1:MKL$(PCMSIZE);
FOR J=1 TO LEN(NUM$)
LET K=POS("1234567890*#",MID$(NUM$,J,1))
FOR I=0 TO INT(SAMPLINGFREQ*SECOND1)-1
LET DAT=LEVEL*(.5*SIN(LOFREQ(K)*I/SAMPLINGFREQ*2*PI)+.5*SIN(HIFREQ(K)*I/SAMPLINGFREQ*2*PI))
PRINT #1: MKI$(INT(DAT));
NEXT I
FOR I=0 TO INT(SAMPLINGFREQ*SECOND2)-1 !'無音(区切り)
PRINT #1: MKI$(0);
NEXT I
NEXT J
CLOSE #1
PLAYSOUND PATH$ & TELNUM$ & ".wav" !'再生
!'FILE DELETE PATH$ & TELNUM$ & ".wav"
END
EXTERNAL FUNCTION MKI$(A)
OPTION CHARACTER BYTE
DECLARE STRING A$,B$
IF A<0 THEN LET A=A+65536
LET A$=CHR$(MOD(A,256))
LET B$=CHR$(INT(A/256))
LET MKI$=A$ & B$
END FUNCTION
EXTERNAL FUNCTION MKL$(A)
OPTION CHARACTER BYTE
DECLARE STRING A$,B$,C$,D$
IF A<0 THEN LET A=A+2^32
LET A$=CHR$(MOD(A,256))
LET B$=CHR$(MOD(INT(A/256),256))
LET C$=CHR$(MOD(INT(A/65536),256))
LET D$=CHR$(MOD(INT(A/16777216),256))
LET MKL$=A$ & B$ & C$ & D$
END FUNCTION
|
|