電話をかける

 投稿者:しばっち  投稿日:2011年11月13日(日)20時01分10秒
  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
 

戻る