Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static UINT16 GenerateSampleTable(SF2_DATA* SF2Data, UINT8** RetLoopMsk){
- FILE * samplfile = fopen("sample.bin", "rb");
- if (samplfile == NULL){
- printf("error opening sample file");
- exit(EXIT_FAILURE);
- }
- fseek(samplfile, 0, SEEK_END);
- int size = ftell(samplfile);
- printf("the size of sample rom is %x\n", size);
- rewind(samplfile);
- UINT8 * data = malloc(size * sizeof(char));
- fread(data, sizeof(char), size, samplfile);
- fclose(samplfile);
- UINT32 pos = 0x00;
- UINT32 num_samples = size / 16;
- struct sample cps3_samples[num_samples];
- sfSample * sf2_sample;
- sfSample * tmp_sample;
- for (pos = 0; pos < size; pos += 16){
- num_samples = pos / 16;
- cps3_samples[num_samples].start = ((data[pos] << 24) | (data[pos + 1] << 16) | (data[pos + 2] << 8) | data[pos + 3]);
- cps3_samples[num_samples].loop = ((data[pos + 4] << 24) | (data[pos + 5] << 16) | (data[pos + 6] << 8) | data[pos + 7]);
- cps3_samples[num_samples].end = ((data[pos + 8] << 24) | (data[pos + 9] << 16) | (data[pos + 10] << 8) | data[pos + 11]);
- cps3_samples[num_samples].size = cps3_samples[num_samples].end - cps3_samples[num_samples].start;
- cps3_samples[num_samples].loop = cps3_samples[num_samples].loop - cps3_samples[num_samples].start;
- cps3_samples[num_samples].key = data[pos + 15];
- }
- printf("total samples: %x", num_samples);
- int tot_samples = num_samples;
- UINT8 * buffer;
- merge_sample_roms(&buffer);
- UINT32 sample_rom_pos = 0;
- UINT32 tot_size = cps3_samples[tot_samples].end ;
- UINT8 * smpdata = malloc(tot_samples * 46);
- UINT32 SmplHdrSize = sizeof(sfSample) * (tot_samples + 1);
- UINT64 sample_size;
- UINT64 sample_start;
- UINT64 sample_end;
- UINT64 sample_loop;
- UINT8 sample_key;
- for (num_samples = 0; num_samples <= tot_samples; num_samples ++){
- sample_size = cps3_samples[num_samples].size;
- sample_start = cps3_samples[num_samples].start;
- sample_end = cps3_samples[num_samples].end;
- sample_key = cps3_samples[num_samples].key;
- sample_loop = cps3_samples[num_samples].loop;
- tmp_sample = &sf2_sample[num_samples];
- memset(tmp_sample, 0x00, sizeof(sfSample));
- tmp_sample->dwSampleRate = 8363;
- tmp_sample->byOriginalKey = sample_key;
- tmp_sample->chCorrection = 0;
- tmp_sample->wSampleLink = 0;
- tmp_sample->sfSampleType = monoSample;
- tmp_sample->dwStartloop = sample_loop;
- tmp_sample->dwEndloop = sample_end;
- for (sample_rom_pos = 0; sample_rom_pos <= sample_size; sample_rom_pos ++){
- smpdata[sample_rom_pos] = buffer[sample_rom_pos + sample_start];
- }
- for (int extra_samples_pos = 0; extra_samples_pos < 46; extra_samples_pos ++, sample_rom_pos ++){
- smpdata[sample_rom_pos] = 0;
- }
- }
- tmp_sample = &sf2_sample[tot_samples];
- memset(tmp_sample, 0x00, sizeof(sfSample));
- strcpy(tmp_sample->achSampleName, "EOS");
- SmplHdrSize = sizeof(sfSample) * (tot_samples + 1);
- LIST_CHUNK * LstChk = List_GetChunk(SF2Data->Lists, FCC_sdta);
- ITEM_CHUNK * ItmChk = Item_MakeChunk(FCC_smpl, tot_size, sf2_sample, 0x00);
- // Note: with Copy == 0x00, FreeSF2Data will call free(SmplDB)
- List_AddItem(LstChk, ItmChk);
- LstChk = List_GetChunk(SF2Data->Lists, FCC_pdta);
- ItmChk = Item_MakeChunk(FCC_shdr, SmplHdrSize, sf2_sample, 0x00); // no free() needed either
- List_AddItem(LstChk, ItmChk);
- return tot_samples;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement