예제 #1
0
파일: adlib.c 프로젝트: ErisBlastar/osfree
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);
	}
    }
}
예제 #2
0
파일: 262intf.c 프로젝트: broftkd/mess-cvs
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);
}