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;
}
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;
}
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;
}
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;
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;
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;
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;
WAVFILE *wavfile_open(const char *filename, WavFileMode mode, WavFileResult *result)
{
+ FILE *fp = NULL;
+ WAVFILE *p = NULL;
+
/*
* ファイル名を検証する。
*/
/*
* ファイルを開く。
*/
- FILE *fp = NULL;
switch (mode) {
case WavFileModeRead:
fp = fopen(filename, "rb");
/*
* ハンドラ領域を確保する。
*/
- WAVFILE *p = (WAVFILE *)malloc(sizeof(WAVFILE));
+ p = (WAVFILE *)malloc(sizeof(WAVFILE));
if (p == NULL) {
*result = WavFileResultErrorMemoryAllocation;
return NULL;
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;
break;
case CHUNK_ID_DATA:
{
- p->info_checked = true;
+ p->info_checked = 1;
p->data_byte_count = chunk_size;
goto finalize;
}
*/
WavFileResult wavfile_read_data(WAVFILE *p, wavfile_data_t *data)
{
+ int i;
if (p == NULL) {
return WavFileResultErrorInvalidHandler;
}
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:
{
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;
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;
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);
}
}
finalize:
if (WavFileResultOK == result) {
- p->info_checked = true;
+ p->info_checked = 1;
}
return result;
}
*/
WavFileResult wavfile_write_data(WAVFILE *p, const wavfile_data_t *data)
{
+ int i;
WavFileResult result = WavFileResultOK;
if (p == NULL) {
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:
{
break;
}
}
- p->data_checked = true;
+ p->data_checked = 1;
finalize:
return result;