static void adlib_process_samples(int samps) { const int chan_map[] = { 0, 1, 0, 1 }; int i, j, k; OPL3SAMPLE *chans[4], buf[4][OPL3_MAX_BUF], buf3; int buf2[OPL3_MAX_BUF][2]; if (samps > OPL3_MAX_BUF) { error("Adlib: too many samples requested (%i)\n", samps); samps = OPL3_MAX_BUF; } for (i = 0; i < 4; i++) chans[i] = &buf[i][0]; YMF262UpdateOne(opl3, chans, samps); for (i = 0; i < samps; i++) { for (j = 0; j < 2; j++) { buf2[i][j] = 0; for (k = 0; k < ARRAY_SIZE(chan_map); k++) { if (chan_map[k] == j) buf2[i][j] += buf[k][i]; } if (buf2[i][j] > SHRT_MAX) buf2[i][j] = SHRT_MAX; if (buf2[i][j] < SHRT_MIN) buf2[i][j] = SHRT_MIN; buf3 = buf2[i][j]; pcm_write_samples(&buf3, pcm_format_size(opl3_format), opl3_rate, opl3_format, adlib_strm); } } }
static void ymf262_stream_update(void *param, stream_sample_t **inputs, stream_sample_t **buffers, int length) { struct ymf262_info *info = param; YMF262UpdateOne(info->chip, buffers, length); }