Ejemplo n.º 1
0
sound* wav_load_file(char* filename) {
  
  sound* s = malloc(sizeof(sound));
  
	SDL_AudioSpec spec;
  
	if( SDL_LoadWAV(filename, &spec, (Uint8**)&s->data, (Uint32*)&s->length) == NULL) {
    error("Unable to load sound file %s", filename);
  }
  
	if (spec.freq != 44100) {
		warning("Sound file %s is %f, not 44.1 kHz. May sound incorrect", filename, (spec.freq)/1000.0f);
  }
  
	if (spec.channels != 1) {
		warning("Sound file %s has %i channels. Currently only mono sounds supported.", filename, spec.channels);
	}
  
  if ((spec.format != AUDIO_S16LSB) &&
      (spec.format != AUDIO_S16MSB)) {
    error("Unsupported sound format for file %s, id %i.", filename, spec.format);
  }
  
  if (spec.format != AUDIO_S16SYS) {
    flip_endian(s->data, s->length);
  }
  
  return s;
}
Ejemplo n.º 2
0
int write_number_to_aiff(void *what, size_t size, FILE *out){
	void *temp = malloc(size);
	if(!temp) return UNABLE_TO_ALLOCATE_MEMORY;
	memcpy(temp, what, size);
	flip_endian((char*)temp, size);
	fwrite(temp, size, 1, out);

	free(temp);
	return GOOD;
}
Ejemplo n.º 3
0
size_t fread_RawClonePair(RawClonePair *ary, size_t count, FILE *pInput)
{
	size_t successfullyReadCount = 0;
	for (size_t i = 0; i < count; ++i) {
		RawClonePair &data = ary[i];
		size_t c = FREAD(&data, sizeof(RawClonePair), 1, pInput);
		if (c == 0) {
			break; 
		}
		flip_endian(data.left.file);
		flip_endian(data.left.begin);
		flip_endian(data.left.end);
		flip_endian(data.right.file);
		flip_endian(data.right.begin);
		flip_endian(data.right.end);
		++successfullyReadCount;
	}
	return successfullyReadCount;
}
Ejemplo n.º 4
0
size_t fwrite_RawClonePair(const RawClonePair *ary, size_t count, FILE *pOutput)
{
	size_t successfullyWrittenCount = 0;
	for (size_t i = 0; i < count; ++i) {
		RawClonePair data = ary[i];
		flip_endian(data.left.file);
		flip_endian(data.left.begin);
		flip_endian(data.left.end);
		flip_endian(data.right.file);
		flip_endian(data.right.begin);
		flip_endian(data.right.end);
		size_t c = FWRITE(&data, sizeof(RawClonePair), 1, pOutput);
		if (c == 0) {
			break; 
		}
		++successfullyWrittenCount;
	}
	return successfullyWrittenCount;
}
Ejemplo n.º 5
0
static void flip_header(struct nifti_1_header *hHeader)
{
	flip_endian(&hHeader->sizeof_hdr, sizeof(int32_t), 1);
	flip_endian(&hHeader->extents, sizeof(int32_t), 1);
	flip_endian(&hHeader->session_error, sizeof(int16_t), 1);
	flip_endian(&hHeader->dim, sizeof(int16_t), 8);
	flip_endian(&hHeader->intent_p1, sizeof(float), 1);
	flip_endian(&hHeader->intent_p2, sizeof(float), 1);
	flip_endian(&hHeader->intent_p3, sizeof(float), 1);
	flip_endian(&hHeader->intent_code, sizeof(int16_t), 1);
	flip_endian(&hHeader->datatype, sizeof(int16_t), 1);
	flip_endian(&hHeader->bitpix, sizeof(int16_t), 1);
	flip_endian(&hHeader->slice_start, sizeof(int16_t), 1);
	flip_endian(&hHeader->pixdim, sizeof(float), 8);
	flip_endian(&hHeader->vox_offset, sizeof(float), 1);
	flip_endian(&hHeader->scl_slope, sizeof(float), 1);
	flip_endian(&hHeader->scl_inter, sizeof(float), 1);
	flip_endian(&hHeader->slice_end, sizeof(int16_t), 1);
	flip_endian(&hHeader->cal_max, sizeof(float), 1);
	flip_endian(&hHeader->cal_min, sizeof(float), 1);
	flip_endian(&hHeader->slice_duration, sizeof(float), 1);
	flip_endian(&hHeader->toffset, sizeof(float), 1);
	flip_endian(&hHeader->glmax, sizeof(int32_t), 1);
	flip_endian(&hHeader->glmin, sizeof(int32_t), 1);
	flip_endian(&hHeader->qform_code, sizeof(int16_t), 1);
	flip_endian(&hHeader->sform_code, sizeof(int16_t), 1);
	flip_endian(&hHeader->quatern_b, sizeof(float), 1);
	flip_endian(&hHeader->quatern_c, sizeof(float), 1);
	flip_endian(&hHeader->quatern_d, sizeof(float), 1);
	flip_endian(&hHeader->qoffset_x, sizeof(float), 1);
	flip_endian(&hHeader->qoffset_y, sizeof(float), 1);
	flip_endian(&hHeader->qoffset_z, sizeof(float), 1);
	flip_endian(&hHeader->srow_x, sizeof(float), 4);
	flip_endian(&hHeader->srow_y, sizeof(float), 4);
	flip_endian(&hHeader->srow_z, sizeof(float), 4);
}
Ejemplo n.º 6
0
int main(int argc, char** argv)
{
	PSU_FILE files;
	SU_FILE dest;
	uint32_t num_files;
	uint32_t i;
	uint32_t err;
	double atof_store;
	double* file_intensities;
	
	if(!(argc & 0x1) || argc < 3)
	{
		fputs("This program requires an even number of command line arguments, at least two, of the form:\n",stderr);
		fputs("mix <file1> <relative volume 1> [<file2> <relative volume 2> ...]\n",stderr);
		return EXIT_FAILURE;
	}

	num_files = (argc - 1) >> 1;
	files = (PSU_FILE)malloc(sizeof(SU_FILE) * num_files);
	file_intensities = (double*)malloc(sizeof(double) * num_files);

	for(i = 0;i < num_files;i++)
	{
		/* We check [in] for errors in read_su_file */
		PFILE in = fopen(argv[(i << 1) + 1],"rb");
		err = read_su_file(&files[i],in);

		if(err)
		{
			write_error(err,stderr);
			return EXIT_FAILURE;
		}

		err = flip_endian(&files[i]);

		if(err)
		{
			write_error(err,stderr);
			return EXIT_FAILURE;
		}

		atof_store = atof((c_string)argv[(i + 1) << 1]);

#ifdef WINDOWS
		if(atof_store == HUGE_VAL)
#else
		if(atof_store == HUGE_VAL())
#endif
		{
			fputs("You have provided a number well beyond the limits of a double value.\n",stderr);
			return EXIT_FAILURE;
		}
		else if(atof_store == 0.0)
			if(!is_zero_real((c_string)argv[(i + 1) << 1]))
			{
				fputs("You have provided a non-number for duration which must be a real number.\n",stderr);
				return EXIT_FAILURE;
			}

		file_intensities[i] = atof_store;
	}

	err = mix_su_file_no_volume_gain(&dest,files,file_intensities,num_files);
	
	if(err)
	{
		write_error(err,stderr);
		return EXIT_FAILURE;
	}
	
#ifdef WINDOWS
	_setmode(_fileno(stdout),_O_BINARY);
#else
	stdout = freopen(NULL,"wb",stdout);
#endif

	err = flip_endian(&dest);

	if(err)
	{
		write_error(err,stderr);
		return EXIT_FAILURE;
	}

	err = write_su_file(&dest,stdout);

	if(err)
	{
		write_error(err,stderr);
		return EXIT_FAILURE;
	}

	return EXIT_SUCCESS;
}