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

WAV逆再生化


  WAV逆再生化 しばっち 2008/02/20 20:11:09  (修正2回)
WAV逆再生化  返事を書く  ノートメニュー
しばっち <dihjvcfsyu> 2008/02/20 20:11:09 ** この記事は2回修正されてます
ご注意

全ての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
  続き しばっち 2008/02/20 20:11:59  (修正2回)
  WAV2CSV しばっち 2008/03/02 22:13:11 
  │└続き しばっち 2008/03/02 22:14:07 
  CSV2WAV しばっち 2008/03/02 22:15:44 
   └続き しばっち 2008/03/02 22:16:32 

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