int sid_sound_machine_calculate_samples(sound_t **psid, SWORD *pbuf, int nr, int soc, int scc, int *delta_t) { int i; SWORD *tmp_buf1; SWORD *tmp_buf2; int tmp_nr = 0; int tmp_delta_t = *delta_t; if (soc == 1 && scc == 1) { return sid_engine.calculate_samples(psid[0], pbuf, nr, 1, delta_t); } if (soc == 1 && scc == 2) { tmp_buf1 = getbuf1(2 * nr); tmp_nr = sid_engine.calculate_samples(psid[0], tmp_buf1, nr, 1, &tmp_delta_t); tmp_nr = sid_engine.calculate_samples(psid[1], pbuf, nr, 1, delta_t); for (i = 0; i < tmp_nr; i++) { pbuf[i] = sound_audio_mix(pbuf[i], tmp_buf1[i]); } return tmp_nr; } if (soc == 1 && scc == 3) { tmp_buf1 = getbuf1(2 * nr); tmp_buf2 = getbuf2(2 * nr); tmp_nr = sid_engine.calculate_samples(psid[0], tmp_buf1, nr, 1, &tmp_delta_t); tmp_delta_t = *delta_t; tmp_nr = sid_engine.calculate_samples(psid[2], tmp_buf2, nr, 1, &tmp_delta_t); tmp_nr = sid_engine.calculate_samples(psid[1], pbuf, nr, 1, delta_t); for (i = 0; i < tmp_nr; i++) { pbuf[i] = sound_audio_mix(pbuf[i], tmp_buf1[i]); pbuf[i] = sound_audio_mix(pbuf[i], tmp_buf2[i]); } return tmp_nr; } if (soc == 2 && scc == 1) { tmp_nr = sid_engine.calculate_samples(psid[0], pbuf, nr, 2, delta_t); for (i = 0; i < tmp_nr; i++) { pbuf[(i * 2) + 1] = pbuf[i * 2]; } return tmp_nr; } if (soc == 2 && scc == 2) { tmp_nr = sid_engine.calculate_samples(psid[0], pbuf, nr, 2, &tmp_delta_t); tmp_nr = sid_engine.calculate_samples(psid[1], pbuf + 1, nr, 2, delta_t); return tmp_nr; } if (soc == 2 && scc == 3) { tmp_buf1 = getbuf1(2 * nr); tmp_nr = sid_engine.calculate_samples(psid[2], tmp_buf1, nr, 1, &tmp_delta_t); tmp_delta_t = *delta_t; tmp_nr = sid_engine.calculate_samples(psid[0], pbuf, nr, 2, &tmp_delta_t); tmp_nr = sid_engine.calculate_samples(psid[1], pbuf + 1, nr, 2, delta_t); for (i = 0; i < tmp_nr; i++) { pbuf[i * 2] = sound_audio_mix(pbuf[i * 2], tmp_buf1[i]); pbuf[(i * 2) + 1] = sound_audio_mix(pbuf[(i * 2) + 1], tmp_buf1[i]); } } return tmp_nr; }
static int sfx_soundsampler_sound_machine_calculate_samples(sound_t **psid, SWORD *pbuf, int nr, int soc, int scc, int *delta_t) { int i; for (i = 0; i < nr; i++) { pbuf[i * soc] = sound_audio_mix(pbuf[i * soc], snd.voice0 << 8); if (soc > 1) { pbuf[(i * soc) + 1] = sound_audio_mix(pbuf[(i * soc) + 1], snd.voice0 << 8); } } return nr; }
int sfx_soundsampler_sound_machine_calculate_samples(sound_t *psid, SWORD *pbuf, int nr, int interleave, int *delta_t) { int i; if (sfx_soundsampler_enabled) { for (i = 0; i < nr; i++) { pbuf[i * interleave] = sound_audio_mix(pbuf[i * interleave], snd.voice0 << 8); } } return 0; }
static int sfx_soundsampler_sound_machine_calculate_samples(sound_t *psid, SWORD *pbuf, int nr, int interleave, int *delta_t) { int i; int j; for (i = 0; i < nr; i++) { for (j = 0; j < interleave; j++) { pbuf[(i * interleave) + j] = sound_audio_mix(pbuf[(i * interleave) + j], snd.voice0 << 8); } } return nr; }
static int sfx_soundexpander_sound_machine_calculate_samples(sound_t **psid, SWORD *pbuf, int nr, int soc, int scc, int *delta_t) { int i; SWORD *buffer; buffer = lib_malloc(nr * 2); if (sfx_soundexpander_chip == 3812 && YM3812_chip) { ym3812_update_one(YM3812_chip, buffer, nr); } else if (sfx_soundexpander_chip == 3526 && YM3526_chip) { ym3526_update_one(YM3526_chip, buffer, nr); } for (i = 0; i < nr; i++) { pbuf[i * soc] = sound_audio_mix(pbuf[i * soc], buffer[i]); if (soc > 1) { pbuf[(i * soc) + 1] = sound_audio_mix(pbuf[(i * soc) + 1], buffer[i]); } } lib_free(buffer); return nr; }
static int pet_sound_machine_calculate_samples(sound_t **psid, SWORD *pbuf, int nr, int soc, int scc, int *delta_t) { int i; WORD v = 0; for (i = 0; i < nr; i++) { if (snd.on) { v = pet_makesample(snd.b, snd.b + snd.bs, snd.sample); } else if (snd.manual) { v = 20000; } pbuf[i * soc] = sound_audio_mix(pbuf[i * soc], (SWORD)v); if (soc > 1) { pbuf[(i * soc) + 1] = sound_audio_mix(pbuf[(i * soc) + 1], (SWORD)v); } snd.b += snd.bs; while (snd.b >= 8.0) { snd.b -= 8.0; } } return nr; }
static int sfx_soundexpander_sound_machine_calculate_samples(sound_t *psid, SWORD *pbuf, int nr, int interleave, int *delta_t) { int i; int j; SWORD *buffer; buffer = lib_malloc(nr * 2); if (sfx_soundexpander_chip == 3812) { ym3812_update_one(YM3812_chip, buffer, nr); } else { ym3526_update_one(YM3526_chip, buffer, nr); } for (i = 0; i < nr; i++) { for (j = 0; j < interleave; j++) { pbuf[(i * interleave) + j] = sound_audio_mix(pbuf[(i * interleave) + j], buffer[i]); } } lib_free(buffer); return nr; }
static int video_sound_machine_calculate_samples(sound_t **psid, SWORD *pbuf, int nr, int soc, int scc, int *delta_t) { int i, num; int smpval1, smpval2; /* DBG(("video_sound_machine_calculate_samples")); */ for (i = 0; i < nr; i++) { for (num = 0; num < numchips; num++) { smpval1 = (int)((float)(*chip[num].sampleptr) * chip[num].avglum * NOISE_VOLUME) / (1 << 19); smpval2 = (int)((*chip[num].lumaptr) * LUMALINES_VOLUME) / (1 << 16); switch (soc) { default: case 1: pbuf[i] = sound_audio_mix(pbuf[i], smpval2); pbuf[i] = sound_audio_mix(pbuf[i], smpval1); break; case 2: pbuf[i * 2] = sound_audio_mix(pbuf[i * 2], smpval2); pbuf[i * 2] = sound_audio_mix(pbuf[i * 2], smpval1); pbuf[i * 2 + 1] = sound_audio_mix(pbuf[i * 2 + 1], smpval2); pbuf[i * 2 + 1] = sound_audio_mix(pbuf[i * 2 + 1], smpval1); break; } chip[num].div1 += NOISE_RATE; while (chip[num].div1 >= sample_rate) { chip[num].div1 -= sample_rate; chip[num].sampleptr++; if (chip[num].sampleptr == &noise_sample[sizeof(noise_sample)]) { chip[num].sampleptr = noise_sample; } } chip[num].div2 += LUMALINES_RATE; while (chip[num].div2 >= sample_rate) { chip[num].div2 -= sample_rate; chip[num].lumaptr++; if (chip[num].lumaptr == &chip[num].lumas[chip[num].lastline + 1]) { chip[num].lumaptr = &chip[num].lumas[chip[num].firstline]; } } } } return nr; }