Advertisement
Guest User

Untitled

a guest
Feb 19th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.51 KB | None | 0 0
  1. static UINT16 GenerateSampleTable(SF2_DATA* SF2Data, UINT8** RetLoopMsk){
  2. FILE * samplfile = fopen("sample.bin", "rb");
  3. if (samplfile == NULL){
  4. printf("error opening sample file");
  5. exit(EXIT_FAILURE);
  6. }
  7. fseek(samplfile, 0, SEEK_END);
  8. int size = ftell(samplfile);
  9. printf("the size of sample rom is %x\n", size);
  10. rewind(samplfile);
  11. UINT8 * data = malloc(size * sizeof(char));
  12. fread(data, sizeof(char), size, samplfile);
  13. fclose(samplfile);
  14. UINT32 pos = 0x00;
  15. UINT32 num_samples = size / 16;
  16. struct sample cps3_samples[num_samples];
  17. sfSample * sf2_sample;
  18. sfSample * tmp_sample;
  19. for (pos = 0; pos < size; pos += 16){
  20. num_samples = pos / 16;
  21. cps3_samples[num_samples].start = ((data[pos] << 24) | (data[pos + 1] << 16) | (data[pos + 2] << 8) | data[pos + 3]);
  22. cps3_samples[num_samples].loop = ((data[pos + 4] << 24) | (data[pos + 5] << 16) | (data[pos + 6] << 8) | data[pos + 7]);
  23. cps3_samples[num_samples].end = ((data[pos + 8] << 24) | (data[pos + 9] << 16) | (data[pos + 10] << 8) | data[pos + 11]);
  24. cps3_samples[num_samples].size = cps3_samples[num_samples].end - cps3_samples[num_samples].start;
  25. cps3_samples[num_samples].loop = cps3_samples[num_samples].loop - cps3_samples[num_samples].start;
  26. cps3_samples[num_samples].key = data[pos + 15];
  27.  
  28. }
  29. printf("total samples: %x", num_samples);
  30. int tot_samples = num_samples;
  31. UINT8 * buffer;
  32. merge_sample_roms(&buffer);
  33. UINT32 sample_rom_pos = 0;
  34. UINT32 tot_size = cps3_samples[tot_samples].end ;
  35. UINT8 * smpdata = malloc(tot_samples * 46);
  36. UINT32 SmplHdrSize = sizeof(sfSample) * (tot_samples + 1);
  37. UINT64 sample_size;
  38. UINT64 sample_start;
  39. UINT64 sample_end;
  40. UINT64 sample_loop;
  41. UINT8 sample_key;
  42. for (num_samples = 0; num_samples <= tot_samples; num_samples ++){
  43. sample_size = cps3_samples[num_samples].size;
  44. sample_start = cps3_samples[num_samples].start;
  45. sample_end = cps3_samples[num_samples].end;
  46. sample_key = cps3_samples[num_samples].key;
  47. sample_loop = cps3_samples[num_samples].loop;
  48. tmp_sample = &sf2_sample[num_samples];
  49. memset(tmp_sample, 0x00, sizeof(sfSample));
  50.  
  51. tmp_sample->dwSampleRate = 8363;
  52. tmp_sample->byOriginalKey = sample_key;
  53. tmp_sample->chCorrection = 0;
  54. tmp_sample->wSampleLink = 0;
  55. tmp_sample->sfSampleType = monoSample;
  56. tmp_sample->dwStartloop = sample_loop;
  57. tmp_sample->dwEndloop = sample_end;
  58.  
  59.  
  60. for (sample_rom_pos = 0; sample_rom_pos <= sample_size; sample_rom_pos ++){
  61. smpdata[sample_rom_pos] = buffer[sample_rom_pos + sample_start];
  62. }
  63. for (int extra_samples_pos = 0; extra_samples_pos < 46; extra_samples_pos ++, sample_rom_pos ++){
  64. smpdata[sample_rom_pos] = 0;
  65. }
  66. }
  67. tmp_sample = &sf2_sample[tot_samples];
  68. memset(tmp_sample, 0x00, sizeof(sfSample));
  69. strcpy(tmp_sample->achSampleName, "EOS");
  70. SmplHdrSize = sizeof(sfSample) * (tot_samples + 1);
  71.  
  72. LIST_CHUNK * LstChk = List_GetChunk(SF2Data->Lists, FCC_sdta);
  73. ITEM_CHUNK * ItmChk = Item_MakeChunk(FCC_smpl, tot_size, sf2_sample, 0x00);
  74. // Note: with Copy == 0x00, FreeSF2Data will call free(SmplDB)
  75. List_AddItem(LstChk, ItmChk);
  76. LstChk = List_GetChunk(SF2Data->Lists, FCC_pdta);
  77. ItmChk = Item_MakeChunk(FCC_shdr, SmplHdrSize, sf2_sample, 0x00); // no free() needed either
  78. List_AddItem(LstChk, ItmChk);
  79.  
  80. return tot_samples;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement