diff music2/nwatowav.cc @ 65:4416cfac86ae

Convert EUC-JP files to UTF8
author Thibaut Girka <thib@sitedethib.com>
date Fri, 26 Nov 2010 10:53:15 +0100
parents 15a18fbe6f21
children
line wrap: on
line diff
--- a/music2/nwatowav.cc
+++ b/music2/nwatowav.cc
@@ -1,24 +1,24 @@
-/* nwatowav : Visual Arts 系のゲームのデモで使われる nwa 形式の
-**            ファイルを wav 形式に変換する
+/* nwatowav : Visual Arts 膤祉蚊若≪т戎 nwa 綵√
+**            <ゃ wav 綵√紊
 **
 **     compile : gcc -O2 -o nwatowav nwatowav.cc
 **     usage : nwatowav [nwa-file [outfile]]
 **	       nwatowav [nwk-file [outfile]]
-**     example : nwatowav HM06.nwa HM06.wav	# BGMファイル。HM06.wav に展開される
-**		 nwatowav z2813.nwk z2813	# 音声ファイル。 z2813-100.wav などのファイル名で展開される
-**		 nwatowav z0513.ovk z0513	# 音声ファイル。 z0513-100.ogg などのファイル名で展開される
+**     example : nwatowav HM06.nwa HM06.wav	# BGM<ゃHM06.wav 絮
+**		 nwatowav z2813.nwk z2813	# 喝0<ゃ z2813-100.wav <ゃу
+**		 nwatowav z0513.ovk z0513	# 喝0<ゃ z0513-100.ogg <ゃу
 **
 **
-** 2004.5.19 小松さん<s1100089@u-aizu.ac.jp> から CLANNAD の無圧縮nwa形式に対応する
-**           パッチをいただいたので、適用しました。ありがとうございます。
-** 2006.9.10 「智代アフター」の音声ファイル形式 (complevel = 5) をサポート
-**	     .nwk という拡張子を持つファイルを受け取ると音声ファイルとして
-**	     解釈、分割して展開するようにする
-** 2007.7.28 「リトルバスターズ!」の音声ファイル形式 (*.ovk; ogg 連結型)
-**		をサポート。.ovk という拡張子をもつファイルを受け取ると
-**		音声ファイルとして解釈、分割して展開するようにする
-**	     「リトルバスターズ!」のBGMファイルに多量のノイズが乗る問題も
-**	      解決(ランレングス圧縮の処理が不必要だった)
+** 2004.5.19 絨障<s1100089@u-aizu.ac.jp>  CLANNAD ≦х軒nwa綵√絲上
+**           с障障
+** 2006.9.10 坂撮≪帥若喝0<ゃ綵√ (complevel = 5) 泣若
+**	     .nwk ≦宍絖ゃ<ゃ喝0<ゃ
+**	     茹i蚊絮
+** 2007.7.28 鴻帥若削喝0<ゃ綵√ (*.ovk; ogg g)
+**		泣若.ovk ≦宍絖ゃ<ゃ
+**		喝0<ゃ茹i蚊絮
+**	     鴻帥若削BGM<ゃ紊ゃ冴箙馹
+**	     茹f浦鐚潟潟違劫х軒筝綽荀c鐚
 */
 
 /*
@@ -28,14 +28,14 @@
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted.
  *
- * このプログラムの作者は jagarl です。
+ * 違篏 jagarl с
  *
- * このプログラム、及びコンパイルによって生成したバイナリは
- * プログラムを変更する、しないにかかわらず再配布可能です。
- * その際、上記 Copyright 表示を保持するなどの条件は課しま
- * せん。対応が面倒なのでバグ報告を除き、メールで連絡をする
- * などの必要もありません。ソースの一部を流用することを含め、
- * ご自由にお使いください。
+ * 違潟潟潟ゃcゃ
+ * 違紊眼絽純с
+ * 筝荐 Copyright 茵腓冴篆>散茯蚊
+ * 絲上√с医怨ゃ<若чg機
+ * 綽荀障純若鴻筝羌
+ * 宴篏帥
  *
  * THIS SOFTWARE IS PROVIDED BY KAZUNORI 'jagarl' UENO ``AS IS'' AND ANY
  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
@@ -54,9 +54,9 @@
 
 /********************************************
 **
-**	nwa フォーマットについて
+**	nwa 若ゃ
 **
-**		全体としては以下の構造を持つ
+**		篏篁ヤ罕
 **		NWA Header
 **		data offset index
 **		data block<0>
@@ -64,104 +64,104 @@
 **		...
 **		data block<N>
 **
-**	NWA Header: ファイル先頭から 44 bytes
-**		magic number などはないのでnwa ファイルかは
-**		データの整合性から判断する必要がある
-**		データは全て little endian で、
-**		short(signed 2byte)または int(signed 4byte) である。
+**	NWA Header: <ゃ 44 bytes
+**		magic number nwa <ゃ
+**		若帥翫сゆ綽荀
+**		若帥 little endian с
+**		short(signed 2byte)障 int(signed 4byte) с
 **
-**		+00 short   channel 数(1/2)
-**		+02 short   sample 一つあたりの bit 数(16)
-**		+04 int     周波数(一秒あたりのデータ数)
-**		+08 int     圧縮レベル:-1~5.2で最小のデータ、0で最大の復元度(-1は無圧縮rawデータとみなされる)
+**		+00 short   channel (1/2)
+**		+02 short   sample 筝ゃ bit (16)
+**		+04 int     羈∽(筝腱若炊)
+**		+08 int     х軒鐚-1~5.2ф絨若帥0ф紊с緇綺(-1≦х軒raw若帥帥)
 **		+12 int     ?
-**		+16 int     ブロック数
-**		+20 int     展開後のデータの大きさ(バイト単位)
-**		+24 int     圧縮時のデータの大きさ(nwa ファイルの大きさ。バイト単位)
-**		+28 int     サンプル数:展開後のデータ数(16bit dataなら short 単位==サンプル単位のデータの大きさ)
-**		+32 int     データ1ブロックを展開した時のサンプル単位のデータ数
-**		+36 int     最終ブロックを展開した時のサンプル単位のデータ数
+**		+16 int     
+**		+20 int     絮緇若帥紊с(ゃ篏)
+**		+24 int     х軒若帥紊с(nwa <ゃ紊сゃ篏)
+**		+28 int     泣潟逸絮緇若炊(16bit data short 篏==泣潟篏若帥紊с)
+**		+32 int     若随絮泣潟篏若炊
+**		+36 int     腟絮泣潟篏若炊
 **		+40 int     ?
 **		
 **	data offset index
-**		全ブロック数 x 4 byte のデータ
-**		それぞれ int のデータが全ブロック数続いている
+**		 x 4 byte 若
+**		 int 若帥亥
 **
-**		データブロックの先頭を指すファイル先頭からの位置(オフセット)
-**		が格納されている
+**		若帥<ゃ篏臀(祉)
+**		主
 **
 **	data block
-**		長さは可変。展開することで一定の大きさをもつデータに展開される。
-**		データはDPCM形式。元 PCM データが a,b,c ならば (a),b-a, c-b と
-**		いった差分データが、仮数3-5bit,指数3bitの形式で保存されている。
-**		結果的に、16bit のデータが多くの場合 6-8bit で格納される。
-**		仮数のビット数は圧縮レベル0で5bit、圧縮レベル2で3bitとなる。
-**		以下、圧縮レベル2の場合について話を進める。
-**		モノラルの場合:
-**			+00 short  ブロック内の最初のデータ
+**		激紊絮т絎紊сゃ若帥絮
+**		若帥DPCM綵√ PCM 若帥 a,b,c  (a),b-a, c-b 
+**		c綏若帥篁3-5bit,3bit綵√т絖
+**		腟16bit 若帥紊翫 6-8bit ф主
+**		篁違違х軒05bitх軒23bit
+**		篁ヤх軒2翫ゃ荅宴蚊
+**		≪翫鐚
+**			+00 short  若
 **			+02- bit stream
-**		ステレオの場合:
-**			+00 short  左(?)チャンネルの最初のデータ
-**			+02 short  右(?)チャンネルの最初のデータ
+**		鴻翫鐚
+**			+00 short  綏(?)c潟若
+**			+02 short  (?)c潟若
 **			+04- bit stream
 **
-**		差分データの精度が高くないので各ブロックの先頭で
-**		正確なデータにより補正される(?)
+**		綏若帥膕上墾蕭у
+**		罩g∈若帥茖罩c(鐚)
 **
 **	bit stream
 **		little endian
-**		+0 - +2 : 指数
-**		+3 - +5 : 仮数
-**		の形式。例えば a,b,c という8bitデータがあれば、
-**		a&0x07 : データ1の指数
-**		(a>>3)&0x07 : データ1の仮数(signed ; 
-**		((b<<2)|(a>>6))&0x07 : データ2の指数
-**		(b>>1)&0x07 : データ2の仮数
-**		となる。
-**		ただし、指数の値により仮数のbit数が変化することがある。
-**		指数 = 1 - 6 の場合:
-**			a=指数、b=仮数、p=前のデータとして、今回のデータd は
-**			bの2bit目が立っている場合:
+**		+0 - +2 : 
+**		+3 - +5 : 篁
+**		綵√箴 a,b,c 8bit若帥違
+**		a&0x07 : 若随
+**		(a>>3)&0x07 : 若随篁(signed ; 
+**		((b<<2)|(a>>6))&0x07 : 若随
+**		(b>>1)&0x07 : 若随篁
+**		
+**		違ゃ篁違bit違紊
+**		 = 1 - 6 翫鐚
+**			a=違b=篁違p=若帥篁若d 
+**			b2bit腴c翫鐚
 **				d = p - (b&3)<<(4+a)
-**			立ってない場合:
+**			腴c翫鐚
 **				d = p + (b&3)<<(4+a)
-**		指数 = 0 の場合:仮数は存在しない(データは3bitとなる)
+**		 = 0 翫鐚篁違絖(若帥3bit)
 **			d = p
-**			「智代アフター」の音声ファイル (complevel == 5) ではランレングス圧縮用に使われている。
-**		指数 = 7
-**			次の bit が立っている場合:
-**				d = 0 (現在未使用)
-**				(データは4bitとなる)
-**			次の bit が立ってない場合:
+**			坂撮≪帥若喝0<ゃ (complevel == 5) с潟潟違劫х軒篏帥
+**		 = 7
+**			罨< bit 腴c翫鐚
+**				d = 0 (憜篏睡)
+**				(若帥4bit)
+**			罨< bit 腴c翫鐚
 **				complevel = 0,1,2:
-**				   仮数 b = 6bit
-**				   b の 5bit 目が立っている場合:
+**				   篁 b = 6bit
+**				   b  5bit 腴c翫鐚
 **					d = p - (b&0x1f)<<(4+7)
-**				   立ってない場合:
+**				   腴c翫鐚
 **					d = p + (b&0x1f)<<(4+7)
-**				   (データは10bitとなる)
+**				   (若帥10bit)
 **				complevel = 3,4,5:
-**				   仮数 b = 8bit
-**				   b の 7bit 目が立っている場合:
+**				   篁 b = 8bit
+**				   b  7bit 腴c翫鐚
 **					d = p - (b&0x7f)<<9
-**				   立ってない場合:
+**				   腴c翫鐚
 **					d = p + (b&0x1f)<<9
-**				   (データは10bitとなる)
+**				   (若帥10bit)
 **
-**		圧縮レベルが異なる場合、たとえば圧縮レベル==0で
-**			指数==1~6でdの最上位bitが立っている場合
+**		х軒違翫医х軒==0
+**			==1~6d筝篏bit腴c翫
 **				d = p - (b&0x0f)<<(2+a)
-**			指数==7でdの最上位bitが立っている場合
+**			==7d筝篏bit腴c翫
 **				d = p - (b&0x7f)<<(2+7)
-**				(b : 8bitなのでデータは12bitとなる)
-**		のように、精度だけが変化するようになっている。
+**				(b : 8bitс若帥12bit)
+**		膕上墾紊c
 **
-**	ヘッダ読み込みについてはNWAData::ReadHeader()参照
-**	bit stream からのデータ展開については NWADecode()参照
+**	茯粋昭帥ゃNWAData::ReadHeader()
+**	bit stream 若水ゃ NWADecode()
 **************************************************************
 */
 
-// #define NDEBUG /* なぜか assertが入った方が速い、、、 */
+// #define NDEBUG /*  assertャc鴻 */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -172,9 +172,9 @@
 
 #ifdef WORDS_BIGENDIAN
 #error Sorry, This program does not support BIG-ENDIAN system yet.
-/* もし big endian のシステムに対応させる場合
-** 以下の *_little_endian_* 及び
-** getbits() 関数を変更する必要がある
+/*  big endian 激鴻絲上翫
+** 篁ヤ *_little_endian_* 
+** getbits() ∽違紊眼綽荀
 */
 #endif
 
@@ -200,7 +200,7 @@ inline int getbits(const char*& data, in
 	return ret & ((1<<bits)-1); /* mask */
 }
 
-/* 指定された形式のヘッダをつくる */
+/* 絎綵√ゃ */
 const char* make_wavheader(int size, int channels, int bps, int freq) {
 	static char wavheader[0x2c] = {
 		'R','I','F','F',
@@ -227,7 +227,7 @@ const char* make_wavheader(int size, int
 	return wavheader;
 }
 
-/* NWA の bitstream展開に必要となる情報 */
+/* NWA  bitstream絮綽荀 */
 class NWAInfo {
 	private:
 		int channels;
@@ -256,7 +256,7 @@ template<class NWAI> void NWADecode(cons
 	int i;
 	int shift = 0;
 	const char* dataend = data+datasize;
-	/* 最初のデータを読み込む */
+	/* 若帥茯粋昭 */
 	if (info.Bps() == 8) {d[0] = *data++; datasize--;}
 	else /* info.Bps() == 16 */ {d[0] = read_little_endian_short(data); data+=2; datasize-=2;}
 	if (info.Channels() == 2) {
@@ -264,18 +264,18 @@ template<class NWAI> void NWADecode(cons
 		else /* info.Bps() == 16 */ {d[1] = read_little_endian_short(data); data+=2; datasize-=2;}
 	}
 	int dsize = outdatasize / (info.Bps()/8);
-	int flip_flag = 0; /* stereo 用 */
+	int flip_flag = 0; /* stereo  */
 	int runlength = 0;
 	for (i=0; i<dsize; i++) {
 		if (data >= dataend) break;
-		if (runlength == 0) { // コピーループ中でないならデータ読み込み
+		if (runlength == 0) { // 潟若若筝с若粋粋昭
 			int type = getbits(data, shift, 3);
-			/* type により分岐:0, 1-6, 7 */
+			/* type 絏鐚0, 1-6, 7 */
 			if (type == 7) {
-				/* 7 : 大きな差分 */
-				/* RunLength() 有効時(CompLevel==5, 音声ファイル) では無効 */
+				/* 7 : 紊с綏 */
+				/* RunLength() 号鐚CompLevel==5, 喝0<ゃ) с≦ */
 				if (getbits(data, shift, 1) == 1) {
-					d[flip_flag] = 0; /* 未使用 */
+					d[flip_flag] = 0; /* 篏睡 */
 				} else {
 					int BITS, SHIFT;
 					if (info.CompLevel() >= 3) {
@@ -294,7 +294,7 @@ template<class NWAI> void NWADecode(cons
 						d[flip_flag] += (b&MASK2)<<SHIFT;
 				}
 			} else if (type != 0) {
-				/* 1-6 : 通常の差分 */
+				/* 1-6 : 絽吾綏 */
 				int BITS, SHIFT;
 				if (info.CompLevel() >= 3) {
 					BITS = info.CompLevel()+3;
@@ -311,9 +311,9 @@ template<class NWAI> void NWADecode(cons
 				else
 					d[flip_flag] += (b&MASK2)<<SHIFT;
 			} else { /* type == 0 */
-				/* ランレングス圧縮なしの場合はなにもしない */
+				/* 潟潟違劫х軒翫 */
 				if (info.UseRunLength() == true) {
-					/* ランレングス圧縮ありの場合 */
+					/* 潟潟違劫х軒翫 */
 					runlength = getbits(data,shift,1);
 					if (runlength==1) {
 						runlength = getbits(data,shift,2);
@@ -332,7 +332,7 @@ template<class NWAI> void NWADecode(cons
 			write_little_endian_short(outdata, d[flip_flag]);
 			outdata += 2;
 		}
-		if (info.Channels() == 2) flip_flag ^= 1; /* channel 切り替え */
+		if (info.Channels() == 2) flip_flag ^= 1; /* channel 帥 */
 	}
 	return;
 }
@@ -377,9 +377,9 @@ class NWAData {
 			}
 			return blocksize * (bps/8);
 		}
-		/* data は BlockLength 以上の長さを持つこと
-		** 返り値は作成したデータの長さ。終了時は 0。
-		** エラー時は -1
+		/* data  BlockLength 篁ヤ激ゃ
+		** 菴ゃ篏若帥激腟篋 0
+		** 惹 -1
 		*/
 		int Decode(FILE* in, char* data, int& skip_count);
 		void Rewind(FILE* in);
@@ -398,7 +398,7 @@ void NWAData::ReadHeader(FILE* in, int _
 	if (offset_start == -1) offset_start = 0;
 	if (_file_size != -1) filesize = _file_size;
 	curblock = -1;
-	/* header 読み込み */
+	/* header 茯粋昭 */
 	if (in == NULL || feof(in) || ferror(in)) {
 		fprintf(stderr,"invalid stream\n");
 		return;
@@ -420,18 +420,18 @@ void NWAData::ReadHeader(FILE* in, int _
 	blocksize = read_little_endian_int(header+0x20);
 	restsize = read_little_endian_int(header+0x24);
 	dummy2 = read_little_endian_int(header+0x28);
-	if (complevel == -1) {	/* 無圧縮rawデータ */
-		/* 適当に決め打ちする */
+	if (complevel == -1) {	/* ≦х軒raw若 */
+		/* 綵羆冴< */
 		blocksize = 65536;
 		restsize = (datasize % (blocksize * (bps/8))) / (bps/8);
 		blocks = datasize / (blocksize * (bps/8)) + (restsize > 0 ? 1 : 0);
 	}
 	if (blocks <= 0 || blocks > 1000000) {
-		/* 1時間を超える曲ってのはないでしょ*/
+		/* 鐚莇蚊cс*/
 		fprintf(stderr,"too large blocks : %d\n",blocks);
 		return;
 	}
-	/* regular file なら filesize 読み込み */
+	/* regular file  filesize 茯粋昭 */
 	if (filesize == 0 && fstat(fileno(in), &sb)==0 && (sb.st_mode&S_IFMT) == S_IFREG) {
 		int pos = ftell(in);
 		fseek(in, 0, SEEK_END);
@@ -443,7 +443,7 @@ void NWAData::ReadHeader(FILE* in, int _
 		}
 	}
 	if (complevel == -1) return;
-	/* offset index 読み込み */
+	/* offset index 茯粋昭 */
 	offsets = new int[blocks];
 	fread(offsets, blocks, 4, in);
 	for (i=0; i<blocks; i++) {
@@ -465,7 +465,7 @@ void NWAData::Rewind(FILE* in) {
 
 int NWAData::CheckHeader(void) {
 	if (complevel != -1 && offsets == NULL) return false;
-	/* データそのもののチェック */
+	/* 若帥с */
 	if (channels != 1 && channels != 2) {
 		fprintf(stderr,"This program only supports mono / stereo data : data have %d channels.\n",channels);
 		return false;
@@ -492,7 +492,7 @@ int NWAData::CheckHeader(void) {
 		fprintf(stderr,"This program only supports -1,0,1,2 compression level : the level of data is %d\n",complevel);
 		return false;
 	}
-	/* 整合性チェック */
+	/* 翫сс */
 	if (filesize != 0 && filesize != compdatasize) {
 		fprintf(stderr,"file size is invalid : %d != %d\n",filesize,compdatasize);
 		return false;
@@ -510,7 +510,7 @@ int NWAData::CheckHeader(void) {
 		fprintf(stderr,"total sample count is invalid : samplecount %d != %d*%d+%d(block*blocksize+lastblocksize).\n",samplecount,blocks-1,blocksize,restsize);
 		return false;
 	}
-	tmpdata = new char[blocksize*byps*2]; /* これ以上の大きさはないだろう、、、 */
+	tmpdata = new char[blocksize*byps*2]; /* 篁ヤ紊с */
 	return true;
 }
 
@@ -523,10 +523,10 @@ class NWAInfo_sw2 {
 };
 
 int NWAData::Decode(FILE* in, char* data, int& skip_count) {
-	if (complevel == -1) {		/* 無圧縮時の処理 */
+	if (complevel == -1) {		/* ≦х軒 */
 		if (feof(in) || ferror(in)) return -1;
 		if (curblock == -1) {
-			/* 最初のブロックなら、wave header 出力 */
+			/* wave header 阪 */
 			memcpy(data, make_wavheader(datasize, channels, bps, freq), 0x2c);
 			curblock++;
 			fseek(in, offset_start + 0x2c, SEEK_SET);
@@ -555,12 +555,12 @@ int NWAData::Decode(FILE* in, char* data
 	if (blocks == curblock) return 0;
 	if (feof(in) || ferror(in)) return -1;
 	if (curblock == -1) {
-		/* 最初のブロックなら、wave header 出力 */
+		/* wave header 阪 */
 		memcpy(data, make_wavheader(datasize, channels, bps, freq), 0x2c);
 		curblock++;
 		return 0x2c;
 	}
-	/* 今回読み込む/デコードするデータの大きさを得る */
+	/* 篁茯粋昭鐚潟若若帥紊с緇 */
 	int curblocksize, curcompsize;
 	if (curblock != blocks-1) {
 		curblocksize = blocksize * (bps/8);
@@ -576,9 +576,9 @@ int NWAData::Decode(FILE* in, char* data
 		curblock++;
 		return -2;
 	}
-	/* データ読み込み */
+	/* 若粋粋昭 */
 	fread(tmpdata, 1, curcompsize, in);
-	/* 展開 */
+	/* 絮 */
 	if (channels == 2 && bps == 16 && complevel == 2) {
 		NWAInfo_sw2 info;
 		NWADecode(info, tmpdata, data, curcompsize, curblocksize);