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
|