新しく発言する  EXIT  インデックスへ

サウンドファイルを作る


  サウンドファイルを作る しばっち 2008/02/20 20:13:51 
  続き しばっち 2008/02/20 20:14:39  (修正1回)
   └おまけ しばっち 2008/02/20 20:15:52  (修正1回)
Re: 続き  返事を書く  ノートメニュー
しばっち <dihjvcfsyu> 2008/02/20 20:15:52 ** この記事は1回修正されてます
おまけ

ご注意

サポート形式は16bit,モノラル,無圧縮形式のみです。
それ以外は分かりません。
別途外部アプリケーション等必要です
なお生成ファイルの動作保障はできません。自己責任でお願いします。

INPUT PROMPT "周波数(Hz)=":FREQ
INPUT PROMPT "サンプリング周波数 11025Hz(1) 22050Hz(2) 44100Hz(3)":MODE
SELECT CASE MODE
CASE 1
LET SAMPLINGFREQ=11025
CASE 2
LET SAMPLINGFREQ=22050
CASE 3
LET SAMPLINGFREQ=44100
CASE 4
LET SAMPLINGFREQ=8000
CASE 5
LET SAMPLINGFREQ=16000
CASE 6
LET SAMPLINGFREQ=32000
CASE 7
LET SAMPLINGFREQ=48000
CASE 8
LET SAMPLINGFREQ=96000
END SELECT
LET ENCODING=3
LET OFFSET=24
LET DATASIZE=-1
LET CHANNEL=1
INPUT PROMPT "VOLUME (0 - 100%)=":VOL
LET VOL=VOL/100
LET LEVEL=(2^15-1)*VOL
INPUT PROMPT "秒数=":SECOND
LET NUM=INT(SAMPLINGFREQ*SECOND)
INPUT PROMPT "SAVE FILENAME(.AU)=":F$
IF POS(F$,".")=0 THEN LET F$=F$ & ".AU"
OPEN #1:NAME F$,ACCESS OUTPUT
PRINT #1:".snd";
PRINT #1:MKL2$(OFFSET);
PRINT #1:MKL2$(DATASIZE);
PRINT #1:MKL2$(ENCODING);
PRINT #1:MKL2$(SAMPLINGFREQ);
PRINT #1:MKL2$(CHANNEL);
FOR I=0 TO NUM-1
PRINT #1:MKI2$(INT(LEVEL*SIN(I*FREQ/SAMPLINGFREQ*2*PI)));
NEXT I
CLOSE #1
END

EXTERNAL FUNCTION MKI2$(X)
!'BIG-ENDIAN
OPTION CHARACTER BYTE
DECLARE STRING A$,B$
LET A=INT(X)
IF A<0 THEN LET A=A+65536
LET A$=CHR$(MOD(A,256))
LET B$=CHR$(INT(A/256))
LET MKI2$=B$ & A$
END FUNCTION

EXTERNAL FUNCTION MKL2$(X)
!'BIG-ENDIAN
OPTION CHARACTER BYTE
DECLARE STRING A$,B$,C$,D$
LET A=INT(X)
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 MKL2$=D$ & C$ & B$ & A$
END FUNCTION

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。