ご注意
全てのWAVファイルが読込めるわけではありません。 無圧縮(リニアPCM)形式のみです。 対応チャンクは"fmt ","data","fact"です。 それ以外の形式は読めません。 別途外部アプリケーション等必要です。 なお生成ファイルの動作保障はできません。自己責任でお願いします。
配列DATをいじると信号処理、エフェクト処理等ができそうです。
OPTION CHARACTER BYTE DIM A$(30) FILE GETNAME F$,"WAVファイル|*.WAV" IF F$="" THEN STOP OPEN #1:NAME F$,ACCESS INPUT FOR I=1 TO 12 CHARACTER INPUT #1 : A$(I) NEXT I IF A$(1) & A$(2) & A$(3) & A$(4)<>"RIFF" THEN PRINT "WAVファイルではありません" CLOSE #1 STOP END IF LET WAVEFILESIZE=CVL(A$(5) & A$(6) & A$(7) & A$(8)) IF A$(9) & A$(10) & A$(11) & A$(12)<>"WAVE" THEN PRINT "WAVファイルではありません" CLOSE #1 STOP END IF DO FOR I=1 TO 4 CHARACTER INPUT #1 : A$(I) NEXT I SELECT CASE A$(1) & A$(2) & A$(3) & A$(4) CASE "fmt " FOR I=1 TO 4 CHARACTER INPUT #1 : A$(I) NEXT I LET HEADERSIZE=CVL(A$(1) & A$(2) & A$(3) & A$(4)) FOR I=1 TO HEADERSIZE CHARACTER INPUT #1 : A$(I) NEXT I LET WAVETYPE=CVI(A$(1) & A$(2)) IF WAVETYPE<>1 THEN PRINT "対応していません" CLOSE #1 STOP END IF LET CHANNEL=CVI(A$(3) & A$(4)) LET SAMPLINGFREQ=CVL(A$(5) & A$(6) & A$(7) & A$(8)) LET DATARATE=CVL(A$(9) & A$(10) & A$(11) & A$(12)) LET SAMPLESIZE=CVI(A$(13) & A$(14)) LET SAMPLEBIT=CVI(A$(15) & A$(16)) CASE "data" FOR I=1 TO 4 CHARACTER INPUT #1 : A$(I) NEXT I LET PCMSIZE=CVL(A$(1) & A$(2) & A$(3) & A$(4)) LET SECOND=PCMSIZE/DATARATE EXIT DO CASE "fact" FOR I=1 TO 8 CHARACTER INPUT #1 : A$(I) NEXT I !'LET SIZE=CVL(A$(1) & A$(2) & A$(3) & A$(4)) !'LET PCMSIZE=CVL(A$(5) & A$(6) & A$(7) & A$(8)) CASE ELSE PRINT "対応していません" CLOSE #1 STOP END SELECT LOOP LET NUM=PCMSIZE/SAMPLESIZE !'PRINT "サンプリング周波数";SAMPLINGFREQ;"Hz" !'PRINT "サンプルビット数";SAMPLEBIT;"bit" !'PRINT "チャンネル数";CHANNEL !'PRINT "PCMデータサイズ";PCMSIZE;"byte" !'PRINT "データ数";NUM !'PRINT "演奏時間";SECOND;"秒" DIM DAT(CHANNEL,NUM) FOR K=1 TO NUM FOR I=1 TO CHANNEL LET B$="" FOR J=1 TO SAMPLEBIT/8 CHARACTER INPUT #1 : L$ LET B$=B$ & L$ NEXT J SELECT CASE SAMPLEBIT CASE 8 LET C=ORD(B$)-128 CASE 16 LET C=CVI(B$) !'CASE 24 !' LET C=CVM(B$) !'CASE 32 !' LET C=CVL(B$) CASE ELSE PRINT "対応していません" CLOSE #1 STOP END SELECT LET DAT(I,K)=C NEXT I NEXT K CLOSE #1
|