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

サウンドファイルを作る


  サウンドファイルを作る しばっち 2008/02/20 20:13:51 
  続き しばっち 2008/02/20 20:14:39  (修正1回)
   └おまけ しばっち 2008/02/20 20:15:52  (修正1回)

  サウンドファイルを作る しばっち 2008/02/20 20:13:51   ツリーへ
サウンドファイルを作る  返事を書く  ノートメニュー
しばっち <dihjvcfsyu> 2008/02/20 20:13:51
ご注意

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

OPTION CHARACTER BYTE
LET CHANNEL=1
LET SAMPLEBIT=16
LET LEVEL=2^(SAMPLEBIT-1)*VOL
INPUT PROMPT "周波数(Hz)=":FREQ
INPUT PROMPT "VOLUME (0 - 100%)=":VOL
LET VOL=VOL/100
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
INPUT PROMPT "秒数=":SECOND
LET NUM=INT(SAMPLINGFREQ*SECOND)
INPUT PROMPT "SAVE FILENAME(.AIF)=":N$
IF POS(N$,".")=0 THEN LET N$=N$ & ".AIF"
OPEN #1:NAME N$,ACCESS OUTPUT
PRINT #1:"FORM";
PRINT #1:MKL2$(46+2*NUM*CHANNEL);
PRINT #1:"AIFF";
PRINT #1:"COMM";
PRINT #1:MKL2$(18);
PRINT #1:MKI2$(CHANNEL);
PRINT #1:MKL2$(NUM*CHANNEL);
PRINT #1:MKI2$(SAMPLEBIT);
PRINT #1:MKLD2$(SAMPLINGFREQ);
PRINT #1:"SSND";
PRINT #1:MKL2$(2*NUM*CHANNEL+8);
PRINT #1:REPEAT$(CHR$(0),8);
LET RATE=FREQ/SAMPLINGFREQ*2*PI
FOR I=0 TO NUM-1
LET V=INT(LEVEL*SIN(RATE*I))
PRINT #1:MKI2$(V);
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
  続き しばっち 2008/02/20 20:14:39  (修正1回)  ツリーへ
Re: サウンドファイルを作る  返事を書く  ノートメニュー
しばっち <dihjvcfsyu> 2008/02/20 20:14:39 ** この記事は1回修正されてます
続き

EXTERNAL FUNCTION MKLD2$(X)
!'モトローラIEEE754 80bit float
OPTION CHARACTER BYTE
OPTION BASE 0
DIM B(80)
IF X<0 THEN LET B(0)=1
IF X<>0 THEN
IF ABS(X)<1 THEN
DO WHILE 2^N>ABS(X)
LET N=N-1
LOOP
LET N=N+1
ELSE
DO WHILE 2^N<ABS(X)
LET N=N+1
LOOP
END IF
LET NN=N
LET N=N+16382
FOR I=1 TO 15
IF AND(N,2^(15-I))<>0 THEN LET B(I)=1
NEXT I
LET T=ABS(X)/2^NN
FOR I=16 TO 79
LET T=T*2
IF T>=1 THEN
LET B(I)=1
LET T=T-INT(T)
END IF
NEXT I
END IF
LET AA$=CHR$(B(0)*128+B(1)*64+B(2)*32+B(3)*16+B(4)*8+B(5)*4+B(6)*2+B(7))
LET BB$=CHR$(B(8)*128+B(9)*64+B(10)*32+B(11)*16+B(12)*8+B(13)*4+B(14)*2+B(15))
LET CC$=CHR$(B(16)*128+B(17)*64+B(18)*32+B(19)*16+B(20)*8+B(21)*4+B(22)*2+B(23))
LET DD$=CHR$(B(24)*128+B(25)*64+B(26)*32+B(27)*16+B(28)*8+B(29)*4+B(30)*2+B(31))
LET EE$=CHR$(B(32)*128+B(33)*64+B(34)*32+B(35)*16+B(36)*8+B(37)*4+B(38)*2+B(39))
LET FF$=CHR$(B(40)*128+B(41)*64+B(42)*32+B(43)*16+B(44)*8+B(45)*4+B(46)*2+B(47))
LET GG$=CHR$(B(48)*128+B(49)*64+B(50)*32+B(51)*16+B(52)*8+B(53)*4+B(54)*2+B(55))
LET HH$=CHR$(B(56)*128+B(57)*64+B(58)*32+B(59)*16+B(60)*8+B(61)*4+B(62)*2+B(63))
LET II$=CHR$(B(64)*128+B(65)*64+B(66)*32+B(67)*16+B(68)*8+B(69)*4+B(70)*2+B(71))
LET JJ$=CHR$(B(72)*128+B(73)*64+B(74)*32+B(75)*16+B(76)*8+B(77)*4+B(78)*2+B(79))
LET MKLD2$=AA$ & BB$ & CC$ & DD$ & EE$ & FF$ & GG$ & HH$ & II$ & JJ$
END FUNCTION

EXTERNAL FUNCTION AND(X,Y)
LET XO=X
LET YO=Y
LET A=1
LET S=0
FOR I=0 TO 15
LET XX=MOD(XO,2)
LET YY=MOD(YO,2)
IF YY+XX=2 THEN LET S=S+A
LET XO=INT(XO/2)
LET YO=INT(YO/2)
LET A=A*2
NEXT I
LET AND=S
END FUNCTION
   └おまけ しばっち 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
新規発言を反映させるにはブラウザの更新ボタンを押してください。