sound support functions : ------------------------- Checked/changed functions: i_sound.c stopchan [done] addsfx [done] S_StartSoundAtVolume [done] updateSoundParams [done] I_SetChannels [done] I_GetSfxLumpNum [done] I_StartSound [done] I_StopSound [done] I_AnySoundStillPlaying [done] I_UpdateSound [done] I_ShutdownSound [done] I_InitSound [done] I_UpdateSoundParams [done] s_sound.c S_StopChannel [done] S_AdjustSoundParams [done] TBD : check r_main.c R_PointToAngle S_getChannel [done] sounds.c [done] check if all callers do proper callings or preparations bug : i_sound.c/addsfx()/ channelinfo[channel].samplerate = (channelinfo[channel].data[3]<<8)+channelinfo[channel].data[2] gives strange values : should be == SAMPLERATE. Check if channelinfo have correct values (fixed : padding was done after loading the sound lumps from wad, so heading (data[0] to data[7]) were chopped.) ----------------- I_UpdateSound is called after mixing and was hooked by Mix_SetPostMix. Accordingly to Mix_SetPostMix : /* Set a function that is called after all mixing is performed. This can be used to provide real-time visual display of the audio stream or add a custom mixer filter for the stream data. ----------------- S_sfx[38].data[17] = 158 = pos data[25] in prboom+ (now fixed by leaving 8 header bytes) test : dumping first i_sound.c addsfx() call : sfxid = 1, channel = 0, len = 5661 data[0] = 126 == data[8] under prboom+ : so prboom+ has 8 extra header bytes (data[0] to data[7]. get those!) data[1] = 126 data[2] = 126 data[3] = 126 data[4] = 126 data[5] = 126 data[6] = 126 data[7] = 126 data[8] = 126 data[9] = 126 data[10] = 126 data[11] = 126 data[12] = 126 data[13] = 126 data[14] = 126 data[15] = 126 data[16] = 126 data[17] = 125 data[18] = 125 data[19] = 124 data[20] = 90 data[21] = 37 data[22] = 18 data[23] = 0 data[24] = 0 data[25] = 0 data[26] = 0 data[27] = 4 data[28] = 35 data[29] = 118 data[30] = 255 data[31] = 255 data[32] = 251 data[33] = 224 data[34] = 198 data[35] = 196 data[36] = 178 data[37] = 180 data[38] = 171 data[39] = 172 data[40] = 159 data[41] = 159 data[42] = 154 data[43] = 108 data[44] = 24 data[45] = 117 data[46] = 189 data[47] = 47 data[48] = 86 data[49] = 213 data[50] = 172 data[51] = 157 data[52] = 151 data[53] = 90 data[54] = 139 data[55] = 158 data[56] = 43 data[57] = 59 data[58] = 73 data[59] = 84 data[60] = 89 data[61] = 92 data[62] = 93 data[63] = 76 data[64] = 82 data[65] = 85 data[66] = 92 data[67] = 94 data[68] = 96 data[69] = 100 data[70] = 98 data[71] = 98 data[72] = 102 data[73] = 106 data[74] = 106 data[75] = 108 data[76] = 107 data[77] = 108 data[78] = 112 data[79] = 111 data[80] = 114 data[81] = 113 data[82] = 114 data[83] = 117 data[84] = 117 data[85] = 150 data[86] = 255 data[87] = 240 data[88] = 213 data[89] = 205 data[90] = 194 data[91] = 195 data[92] = 186 data[93] = 185 data[94] = 179 data[95] = 176 data[96] = 170 data[97] = 170 data[98] = 165 data[99] = 164 (---) data[5561] = 126 data[5562] = 128 data[5563] = 127 data[5564] = 127 data[5565] = 127 data[5566] = 127 data[5567] = 126 data[5568] = 127 data[5569] = 126 data[5570] = 127 data[5571] = 126 data[5572] = 127 data[5573] = 126 data[5574] = 127 data[5575] = 126 data[5576] = 127 data[5577] = 126 data[5578] = 126 data[5579] = 126 data[5580] = 127 data[5581] = 128 data[5582] = 127 data[5583] = 127 data[5584] = 128 data[5585] = 128 data[5586] = 128 data[5587] = 128 data[5588] = 128 data[5589] = 128 data[5590] = 128 data[5591] = 128 data[5592] = 128 data[5593] = 128 data[5594] = 129 data[5595] = 128 data[5596] = 128 data[5597] = 127 data[5598] = 128 data[5599] = 128 data[5600] = 128 data[5601] = 128 data[5602] = 128 data[5603] = 128 data[5604] = 128 data[5605] = 128 data[5606] = 128 data[5607] = 128 data[5608] = 127 data[5609] = 128 data[5610] = 128 data[5611] = 128 data[5612] = 128 data[5613] = 128 data[5614] = 128 data[5615] = 127 data[5616] = 127 data[5617] = 127 data[5618] = 127 data[5619] = 127 data[5620] = 127 data[5621] = 127 data[5622] = 127 data[5623] = 127 data[5624] = 127 data[5625] = 127 data[5626] = 126 data[5627] = 127 data[5628] = 126 data[5629] = 127 data[5630] = 126 data[5631] = 127 data[5632] = 126 data[5633] = 127 data[5634] = 126 data[5635] = 127 data[5636] = 126 data[5637] = 127 data[5638] = 126 data[5639] = 127 data[5640] = 126 data[5641] = 127 data[5642] = 126 data[5643] = 127 data[5644] = 126 data[5645] = 126 data[5646] = 126 data[5647] = 126 data[5648] = 126 data[5649] = 126 data[5650] = 126 data[5651] = 126 data[5652] = 126 data[5653] = 126 data[5654] = 126 data[5655] = 126 data[5656] = 126 data[5657] = 126 data[5658] = 126 data[5659] = 126 data[5660] = 126 crash here i_sound.c I_UpdateSound : dl += channelinfo[chan].leftvol_lookup[sample]; dr += channelinfo[chan].rightvol_lookup[sample]; if code at addsfx() is executed : channelinfo[channel].data += 8; // Skip header channelinfo[channel].stepremainder = 0; // Should be gametic, I presume. channelinfo[channel].starttime = gametic; // Preserve sound SFX id, // e.g. for avoiding duplicates of chainsaw. channelinfo[channel].id = sfxid; does PS2 sdl works for 11025 rate ?