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

WAV逆再生化


  WAV逆再生化 しばっち 2008/02/20 20:11:09  (修正2回)
  続き しばっち 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 
Re: WAV逆再生化  返事を書く  ノートメニュー
しばっち <dihjvcfsyu> 2008/03/02 22:15:44
CSV2WAV

CSVファイルをWAVファイルに変換します。
サンプリング周波数、サンプルビット数、チャンネル数、行ナンバー、PCMデータ
以外に数値を書き込まないでください。(文字は読み飛ばす)

FUNCTION READFILE$
OPTION CHARACTER BYTE
LET S$=""
DO
SET #1 : IF MISSING THEN EXIT DO
CHARACTER INPUT #1: D$
IF D$=CHR$(34) THEN
LET D$=""
DO
LET S$=S$ & D$
CHARACTER INPUT #1: D$
LOOP WHILE D$<>CHR$(34)
CHARACTER INPUT #1: D$ !' "," OR CHR$(13)
IF D$=CHR$(13) THEN CHARACTER INPUT #1: DD$ !' CR+LF
LET READFILE$=S$
EXIT FUNCTION
END IF
IF D$<>" " AND D$<>"," AND D$<>CHR$(13) THEN LET S$=S$ & D$
LOOP WHILE D$<>" " AND D$<>"," AND D$<>CHR$(13)
IF D$=CHR$(13) THEN CHARACTER INPUT #1: DD$ !' CR+LF
LET READFILE$=S$
END FUNCTION

LET MAXLEVEL=65536
FILE GETNAME N$, "CSVファイル|*.CSV"
IF N$="" THEN STOP
OPEN #1:NAME N$,ACCESS INPUT
DO
LET D$=READFILE$
LOOP WHILE ISNUMBER(D$)=0 !'文字は無視
LET SAMPLINGFREQ=VAL(D$) !'サンプリング周波数
DO
LET D$=READFILE$
LOOP WHILE ISNUMBER(D$)=0 !'文字は無視
LET SAMPLEBIT=VAL(D$) !'サンプルビット数
DO
LET D$=READFILE$
LOOP WHILE ISNUMBER(D$)=0 !'文字は無視
LET CHANNEL=VAL(D$) !'チャンネル数
DIM DAT(CHANNEL,MAXLEVEL)
DO
SET #1 : IF MISSING THEN EXIT DO
DO
LET NUM$=READFILE$ !'行ナンバー
LOOP WHILE ISNUMBER(NUM$)=0 !'文字は無視
FOR I=1 TO CHANNEL
DO
SET #1 : IF MISSING THEN EXIT DO
LET D$=READFILE$ !' PCMデータ
LOOP WHILE ISNUMBER(D$)=0 !'文字は無視
LET NUM=NUM+1
LET DAT(I,NUM)=VAL(D$)
LET LMIN=MIN(LMIN,DAT(I,NUM))
LET LMAX=MAX(LMAX,DAT(I,NUM))
IF NUM>=MAXLEVEL THEN EXIT DO
NEXT I
LOOP
CLOSE #1
PRINT "サンプリング周波数";SAMPLINGFREQ;"Hz"
PRINT "サンプルビット数";SAMPLEBIT;"ビット"
PRINT "チャンネル数";CHANNEL
PRINT "データ数";NUM
INPUT PROMPT "SAVE FILENAME(.WAV)=":F$
IF POS(F$,".")=0 THEN LET F$=F$ & ".WAV"
OPEN #1:NAME F$
LET SAMPLESIZE = SAMPLEBIT / 8 * CHANNEL
LET DATARATE = SAMPLESIZE * SAMPLINGFREQ
LET PCMSIZE = NUM * SAMPLESIZE
LET WAVEFILESIZE = PCMSIZE + 36
PRINT #1:"RIFF";
PRINT #1:MKL$(WAVEFILESIZE);
PRINT #1:"WAVEfmt ";
PRINT #1:MKL$(16);
PRINT #1:MKI$(1);
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 K=1 TO NUM
FOR I=1 TO CHANNEL
LET DAT(I,K)=MIN(2^(SAMPLEBIT-1)-1,MAX(-2^(SAMPLEBIT-1),INT(DAT(I,K))))
SELECT CASE SAMPLEBIT
CASE 8
LET E$=CHR$(DAT(I,K)+128)
CASE 16
LET E$=MKI$(DAT(I,K))
END SELECT
PRINT #1:E$;
NEXT I
NEXT K
CLOSE #1
END
   └続き しばっち 2008/03/02 22:16:32 

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