Ejemplo n.º 1
0
static void fill_ring_buffer(void *userData){
    paTestData *data = (paTestData*)userData;

    while (btstack_ring_buffer_bytes_free(&ring_buffer) > BYTES_PER_FRAME){
        uint8_t write_data[BYTES_PER_FRAME];
        *(int16_t*)&write_data[0] = data->sine[data->left_phase];
        *(int16_t*)&write_data[2] = data->sine[data->right_phase];
        
        btstack_ring_buffer_write(&ring_buffer, write_data, BYTES_PER_FRAME);
        write_wav_data((int16_t*)write_data, 1, NUM_CHANNELS, SAMPLE_RATE);

        data->left_phase += 1;
        if (data->left_phase >= TABLE_SIZE){
            data->left_phase -= TABLE_SIZE;
        }
        data->right_phase += 2; /* higher pitch so we can distinguish left and right. */
        if (data->right_phase >= TABLE_SIZE){
            data->right_phase -= TABLE_SIZE;
        } 
    }
}
Ejemplo n.º 2
0
int main(int argc, char *argv[])
{
	int i, j;
	int n;
	int channels;
	long freq;
	long total_size;
	long block, num_block;
	FILE *fp_adp;
	FILE *fp_wav;
	XA_BLOCK xa_block;
	INT16 pcm_l[28];
	INT16 pcm_r[28];

	fprintf(stderr, "adp2wav version 0.22  Copyright (C) 1997 Nobuyuki NISHIZAWA\n");

	if (argc != 3)
	{
		fprintf(stderr, "Usage: adp2wav <input.adp> <output.wav>\n");
		return 255;
	}

	fp_adp = fopen(argv[1], "rb");
	fp_wav = fopen(argv[2], "wb");
	if (fp_adp == NULL || fp_wav == NULL)
	{
		fprintf(stderr, "Error: cannot open file.\n");
		return 1;
	}

	num_block = read_aiff_header(fp_adp, &freq, &channels);
	
	//fseek(fp_adp, 0x36, SEEK_SET);
	fseek(fp_wav, 0x2c, SEEK_SET);
	total_size = 0;
	pcm_l[26] = 0;
	pcm_l[27] = 0;
	pcm_r[26] = 0;
	pcm_r[27] = 0;
	
	block = 0;
	while (fread(&xa_block, sizeof(xa_block), 1, fp_adp) == 1 &&
		   block < num_block)
	{
		for (i = 0; i < 18; i++)
		{
			if (channels == 2)
			{
				for (j = 0; j < 8; j += 2)
				{
					n = decode_adpcm(&xa_block.adpcm[i], pcm_l, j,
									 pcm_l[27], pcm_l[26]);
				
					decode_adpcm(&xa_block.adpcm[i], pcm_r, j + 1,
								 pcm_r[27], pcm_r[26]);
				
					total_size += write_wav_data(fp_wav, pcm_l, pcm_r, n);
				}
			}
			else
			{
				for (j = 0; j < 8; j++)
				{
					n = decode_adpcm(&xa_block.adpcm[i], pcm_l, j,
									 pcm_l[27], pcm_l[26]);
				
					total_size += write_wav_data(fp_wav, pcm_l, NULL, n);
				}
			}
		}
	}

	write_wav_header(fp_wav, freq, channels, total_size);

	fclose(fp_wav);
	fclose(fp_adp);

	return 0;
}