OSDN Git Service

Updated the depended module.
[bluetank/bluetank.git] / soft / utils / common / tinywavio / wavfile.c
similarity index 95%
rename from soft/utils/common/tinywavio/wavfile.cpp
rename to soft/utils/common/tinywavio/wavfile.c
index b2152ad..813b51e 100644 (file)
@@ -78,15 +78,16 @@ struct WAVFILE {
     FILE *fp;                   /**< ファイルハンドラ。 */
     char filename[BUFSIZ];      /**< ファイル名。 */
     WavFileMode mode;           /**< ファイルモード。 */
-    bool info_checked;          /**< infoを確認したら真になるフラグ。 */
-    bool data_checked;          /**< dataを確認したら真になるフラグ。 */
+    int info_checked;          /**< infoを確認したら真になるフラグ。 */
+    int data_checked;          /**< dataを確認したら真になるフラグ。 */
     uint32_t data_byte_count;   /**< データバイトカウント。 */
     wavfile_info_t info;        /**< 対象ファイルのinfo情報。制御の確認用に用いる。 */
 };
 
 static int WRITE_U32_BE(FILE *fp, const uint32_t value)
 {
-    for (int i = 0; i < 4; i++) {
+    int i;
+    for (i = 0; i < 4; i++) {
         if (fputc((value >> (8 * (3 - i))), fp) == EOF) {
             return -1;
         }
@@ -96,7 +97,8 @@ static int WRITE_U32_BE(FILE *fp, const uint32_t value)
 
 static int WRITE_U32_LE(FILE *fp, const uint32_t value)
 {
-    for (int i = 0; i < 4; i++) {
+    int i;
+    for (i = 0; i < 4; i++) {
         if (fputc((value >> (8 * i)), fp) == EOF) {
             return -1;
         }
@@ -106,7 +108,8 @@ static int WRITE_U32_LE(FILE *fp, const uint32_t value)
 
 static int WRITE_U16_LE(FILE *fp, const uint16_t value)
 {
-    for (int i = 0; i < 2; i++) {
+    int i;
+    for (i = 0; i < 2; i++) {
         if (fputc((value >> (8 * i)), fp) == EOF) {
             return -1;
         }
@@ -117,7 +120,8 @@ static int WRITE_U16_LE(FILE *fp, const uint16_t value)
 static int READ_U32_BE(FILE *fp, uint32_t *value)
 {
     int raw[4];
-    for (int i = 0; i < (int)(sizeof(raw) / sizeof(raw[0])); i++) {
+    int i;
+    for (i = 0; i < (int)(sizeof(raw) / sizeof(raw[0])); i++) {
         raw[i] = fgetc(fp);
         if (raw[i] == EOF) {
             *value = 0x00000000;
@@ -135,7 +139,8 @@ static int READ_U32_BE(FILE *fp, uint32_t *value)
 static int READ_U32_LE(FILE *fp, uint32_t *value)
 {
     int raw[4];
-    for (int i = 0; i < (int)(sizeof(raw) / sizeof(raw[0])); i++) {
+    int i;
+    for (i = 0; i < (int)(sizeof(raw) / sizeof(raw[0])); i++) {
         raw[i] = fgetc(fp);
         if (raw[i] == EOF) {
             *value = 0x00000000;
@@ -153,7 +158,8 @@ static int READ_U32_LE(FILE *fp, uint32_t *value)
 static int READ_U16_LE(FILE *fp, uint16_t *value)
 {
     int raw[2];
-    for (int i = 0; i < (int)(sizeof(raw) / sizeof(raw[0])); i++) {
+    int i;
+    for (i = 0; i < (int)(sizeof(raw) / sizeof(raw[0])); i++) {
         raw[i] = fgetc(fp);
         if (raw[i] == EOF) {
             *value = 0x00000000;
@@ -171,7 +177,8 @@ static WavFileResult chunk_reader_unknown(
         const uint32_t chunk_size,
         FILE *fp)
 {
-    for (int i = 0; i < (int)chunk_size; i++) {
+    int i;
+    for (i = 0; i < (int)chunk_size; i++) {
         int c = fgetc(fp);
         if (c == EOF) {
             return WavFileResultErrorBrokenChunkData;
@@ -280,6 +287,9 @@ static WavFileResult chunk_reader_fmt(
 
 WAVFILE *wavfile_open(const char *filename, WavFileMode mode, WavFileResult *result)
 {
+    FILE *fp = NULL;
+    WAVFILE *p = NULL;
+
     /*
      * ファイル名を検証する。
      */
@@ -291,7 +301,6 @@ WAVFILE *wavfile_open(const char *filename, WavFileMode mode, WavFileResult *res
     /*
      * ファイルを開く。
      */
-    FILE *fp = NULL;
     switch (mode) {
         case WavFileModeRead:
             fp = fopen(filename, "rb");
@@ -311,7 +320,7 @@ WAVFILE *wavfile_open(const char *filename, WavFileMode mode, WavFileResult *res
     /*
      * ハンドラ領域を確保する。
      */
-    WAVFILE *p = (WAVFILE *)malloc(sizeof(WAVFILE));
+    p = (WAVFILE *)malloc(sizeof(WAVFILE));
     if (p == NULL) {
         *result = WavFileResultErrorMemoryAllocation;
         return NULL;
@@ -323,8 +332,8 @@ WAVFILE *wavfile_open(const char *filename, WavFileMode mode, WavFileResult *res
     p->fp = fp;
     strcpy(p->filename, filename);
     p->mode = mode;
-    p->info_checked = false;
-    p->data_checked = false;
+    p->info_checked = 0;
+    p->data_checked = 0;
     p->data_byte_count = 0;
     WAVFILE_INFO_AUDIO_FORMAT(&(p->info)) = 0;
     WAVFILE_INFO_NUM_CHANNELS(&(p->info)) = 0;
@@ -471,7 +480,7 @@ WavFileResult wavfile_read_info(WAVFILE *p, wavfile_info_t *info)
                 break;
             case CHUNK_ID_DATA:
                 {
-                    p->info_checked = true;
+                    p->info_checked = 1;
                     p->data_byte_count = chunk_size;
                     goto finalize;
                 }
@@ -496,6 +505,7 @@ finalize:
  */
 WavFileResult wavfile_read_data(WAVFILE *p, wavfile_data_t *data)
 {
+    int i;
     if (p == NULL) {
         return WavFileResultErrorInvalidHandler;
     }
@@ -510,14 +520,14 @@ WavFileResult wavfile_read_data(WAVFILE *p, wavfile_data_t *data)
 
     if (p->data_byte_count == 0) {
         data->num_channels = 0;
-        for (int i = 0; i < p->info.num_channels; i++) {
+        for (i = 0; i < p->info.num_channels; i++) {
             data->channel_data[i] = 0.5;
         }
         return WavFileResultOK;
     }
 
     data->num_channels = p->info.num_channels;
-    for (int i = 0; i < p->info.num_channels; i++) {
+    for (i = 0; i < p->info.num_channels; i++) {
         switch (p->info.bits_per_sample) {
             case BITS_PER_SAMPLE_8:
                 {
@@ -531,34 +541,38 @@ WavFileResult wavfile_read_data(WAVFILE *p, wavfile_data_t *data)
                 break;
             case BITS_PER_SAMPLE_16:
                 {
-                    int c1 = fgetc(p->fp);
+                    int c1, c2;
+                    uint16_t n;
+                    c1 = fgetc(p->fp);
                     if (c1 == EOF) {
                         return WavFileResultErrorBrokenChunkData;
                     }
-                    int c2 = fgetc(p->fp);
+                    c2 = fgetc(p->fp);
                     if (c2 == EOF) {
                         return WavFileResultErrorBrokenChunkData;
                     }
-                    uint16_t n = (((uint16_t)c2 << 8) | ((uint16_t)c1 << 0)) ^ (1 << 15);
+                    n = (((uint16_t)c2 << 8) | ((uint16_t)c1 << 0)) ^ (1 << 15);
                     data->channel_data[i] = (double)n / 0xFFFF;
                 }
                 p->data_byte_count-=2;
                 break;
             case BITS_PER_SAMPLE_24:
                 {
-                    int c1 = fgetc(p->fp);
+                    int c1, c2, c3;
+                    uint32_t n;
+                    c1 = fgetc(p->fp);
                     if (c1 == EOF) {
                         return WavFileResultErrorBrokenChunkData;
                     }
-                    int c2 = fgetc(p->fp);
+                    c2 = fgetc(p->fp);
                     if (c2 == EOF) {
                         return WavFileResultErrorBrokenChunkData;
                     }
-                    int c3 = fgetc(p->fp);
+                    c3 = fgetc(p->fp);
                     if (c3 == EOF) {
                         return WavFileResultErrorBrokenChunkData;
                     }
-                    uint32_t n = (((uint32_t)c3 << 16) | ((uint32_t)c2 << 8) | ((uint32_t)c1 << 0)) ^ (1 << 23);
+                    n = (((uint32_t)c3 << 16) | ((uint32_t)c2 << 8) | ((uint32_t)c1 << 0)) ^ (1 << 23);
                     data->channel_data[i] = (double)n / 0xFFFFFF;
                 }
                 p->data_byte_count-=3;
@@ -693,6 +707,13 @@ WavFileResult wavfile_write_info(WAVFILE *p, const wavfile_info_t *info)
             break;
         case WAVFILE_AUDIO_FORMAT_EXTENSIBLE:
             {
+                static const unsigned char sub_format[16] = {
+                    0x01, 0x00, 0x00, 0x00,
+                    0x00, 0x00, 0x10, 0x00,
+                    0x80, 0x00, 0x00, 0xAA,
+                    0x00, 0x38, 0x9B, 0x71
+                };
+                int i;
                 if (WRITE_U32_BE(p->fp, CHUNK_ID_FMT) != 0) {
                     result = WavFileResultErrorFileWrite;
                     goto finalize;
@@ -745,13 +766,7 @@ WavFileResult wavfile_write_info(WAVFILE *p, const wavfile_info_t *info)
                     result = WavFileResultErrorFileWrite;
                     goto finalize;
                 }
-                static const unsigned char sub_format[16] = {
-                    0x01, 0x00, 0x00, 0x00,
-                    0x00, 0x00, 0x10, 0x00,
-                    0x80, 0x00, 0x00, 0xAA,
-                    0x00, 0x38, 0x9B, 0x71
-                };
-                for (int i = 0; i < sizeof(sub_format); i++) {
+                for (i = 0; i < sizeof(sub_format); i++) {
                     fputc((char)sub_format[i], p->fp);
                 }
             }
@@ -793,7 +808,7 @@ WavFileResult wavfile_write_info(WAVFILE *p, const wavfile_info_t *info)
 
 finalize:
     if (WavFileResultOK == result) {
-        p->info_checked = true;
+        p->info_checked = 1;
     }
     return result;
 }
@@ -803,6 +818,7 @@ finalize:
  */
 WavFileResult wavfile_write_data(WAVFILE *p, const wavfile_data_t *data)
 {
+    int i;
     WavFileResult result = WavFileResultOK;
 
     if (p == NULL) {
@@ -825,7 +841,7 @@ WavFileResult wavfile_write_data(WAVFILE *p, const wavfile_data_t *data)
         goto finalize;
     }
 
-    for (int i = 0; i < p->info.num_channels; i++) {
+    for (i = 0; i < p->info.num_channels; i++) {
         switch (p->info.bits_per_sample) {
             case BITS_PER_SAMPLE_8:
                 {
@@ -871,7 +887,7 @@ WavFileResult wavfile_write_data(WAVFILE *p, const wavfile_data_t *data)
                 break;
         }
     }
-    p->data_checked = true;
+    p->data_checked = 1;
 
 finalize:
     return result;