static void g_convert_float32_to_int24(t_wav_float32 const * p_sample_buffer,t_wav_uint8 * p_output,t_wav_uint32 p_sample_count) { t_wav_uint32 n; for(n=0; n<p_sample_count; n++) { write_int24(p_output,(t_wav_int32) ( p_sample_buffer[n] * 0x800000 )); p_output += 3; } }
static void g_convert_int16_to_int24(t_wav_int16 const * p_sample_buffer,t_wav_uint8 * p_output,t_wav_uint32 p_sample_count) { t_wav_uint32 n; for(n=0; n<p_sample_count; n++) { write_int24(p_output,(t_wav_int32) p_sample_buffer[n] << 8 ); p_output += 3; } }
static bool write_FUN_chunk(IOStream *ios, size_t chunk_size) { if (!chunk_begin(ios, "FUN ", chunk_size)) return false; Function *functions = (Function*)AR_data(&ar_functions); size_t nfunction = AR_size(&ar_functions), n, i; if (!write_int32(ios, (int)nfunction)) return false; /* Write function headers */ for (n = 0; n < nfunction; ++n) { if (!write_int16(ios, 0) || !write_int8(ios, functions[n].nret) || !write_int8(ios, functions[n].nparam)) { return false; } } /* Write function instructions */ for (n = 0; n < nfunction; ++n) { Instruction *ins = functions[n].instrs; for (i = 0; (int)i < functions[n].ninstr; ++i) { assert(ins[i].opcode == (ins[i].opcode&255)); assert(ins[i].argument >= -0x00800000 && ins[i].argument <= 0x007fffff); if (!write_int8(ios, ins[i].opcode) || !write_int24(ios, ins[i].argument)) return false; } if (!write_int32(ios, 0)) return false; } return chunk_end(ios, chunk_size); }