Esempio n. 1
0
int dumb_source_update(audio_source *src, char *buffer, int len) {
    dumb_source *local = source_get_userdata(src);

    // Get deltatime and bitrate
    float delta = 65536.0f / source_get_frequency(src);
    int bps = source_get_channels(src) * source_get_bytes(src);

    // If looping is off, and if we have played the whole file, stop here.
    long pos = duh_sigrenderer_get_position(local->renderer);
    if(pos < local->vpos && !src->loop) {
        return 0;
    }
    local->vpos = pos;

    // ... otherwise get more data.
    int ret = duh_render_int(
            local->renderer,
            &local->sig_samples,
            &local->sig_samples_size,
            source_get_bytes(src) * 8, // Bits
            0,  // Unsign
            1.0f, // Volume
            delta,
            len / bps, // Size
            buffer
        ) * bps;
    return ret;
}
UInt32 MODDecoder::ReadAudio(AudioBufferList *bufferList, UInt32 frameCount)
{
	if(!IsOpen() || NULL == bufferList || bufferList->mBuffers[0].mNumberChannels != mFormat.mChannelsPerFrame || 0 == frameCount)
		return 0;

	// EOF reached
	if(duh_sigrenderer_get_position(dsr) > mTotalFrames)
		return 0;

	long framesRendered = duh_render(dsr, DUMB_BIT_DEPTH, 0, 1, static_cast<float>(65536.0 / DUMB_SAMPLE_RATE), frameCount, bufferList->mBuffers[0].mData);

	mCurrentFrame += framesRendered;

	return static_cast<UInt32>(framesRendered);
}
Esempio n. 3
0
static int
cdumb_seek (DB_fileinfo_t *_info, float time) {
    trace ("cdumb_read seek %f\n", time);
    dumb_info_t *info = (dumb_info_t *)_info;
    if (time < _info->readpos) {
        if (cdumb_startrenderer (_info) < 0) {
            return -1;
        }
    }
    else {
        time -= _info->readpos;
    }
    int pos = time * _info->fmt.samplerate;
    duh_sigrenderer_generate_samples (info->renderer, 0, 65536.0f / _info->fmt.samplerate, pos, NULL);
    _info->readpos = duh_sigrenderer_get_position (info->renderer) / 65536.f;
    return 0;
}
Esempio n. 4
0
// This is called from SDL2, and should read data from a source and hand it over
// to SDL2 via the stream buffer.
void stream_audio(void *userdata, Uint8 *stream, int len) {
    streamer_t *streamer = (streamer_t *)userdata;

    // Read samples from libdumb save them to the SDL buffer. Note that we are
    // reading SAMPLES, not bytes!
    int r_samples = len / streamer->sbytes;
    int got =
        duh_render_int(streamer->renderer, &streamer->sig_samples,
                       &streamer->sig_samples_size, streamer->bits, 0,
                       streamer->volume, streamer->delta, r_samples, stream);
    if (got == 0) {
        streamer->ended = true;
    }

    // Get current position from libdumb for the playback display. If we get
    // position that is 0, it probably means that the song ended and
    // duh_sigrenderer_get_position points to the start of the file.
    streamer->spos = duh_sigrenderer_get_position(streamer->renderer);
    if (streamer->spos == 0) {
        streamer->spos = streamer->ssize;
    }
}
Esempio n. 5
0
UInt32 SFB::Audio::MODDecoder::_ReadAudio(AudioBufferList *bufferList, UInt32 frameCount)
{
	if(bufferList->mBuffers[0].mNumberChannels != mFormat.mChannelsPerFrame) {
		LOGGER_WARNING("org.sbooth.AudioEngine.Decoder.MOD", "_ReadAudio() called with invalid parameters");
		return 0;
	}

	// EOF reached
	if(duh_sigrenderer_get_position(dsr.get()) > mTotalFrames) {
		bufferList->mBuffers[0].mDataByteSize = 0;
		return 0;
	}

	long framesRendered = duh_render(dsr.get(), DUMB_BIT_DEPTH, 0, 1, 65536.0f / DUMB_SAMPLE_RATE, frameCount, bufferList->mBuffers[0].mData);

	mCurrentFrame += framesRendered;

	bufferList->mBuffers[0].mDataByteSize = (UInt32)(framesRendered * mFormat.mBytesPerFrame);
	bufferList->mBuffers[0].mNumberChannels = mFormat.mChannelsPerFrame;

	return (UInt32)framesRendered;
}
Esempio n. 6
0
/* DEPRECATED */
long duh_renderer_get_position(DUH_SIGRENDERER *dr)
{
	return duh_sigrenderer_get_position(dr);
}
long dumba5_get_player_position(DUMBA5_PLAYER * pp)
{
	return pp ? duh_sigrenderer_get_position(pp->sigrenderer) : -1;
}
Esempio n. 8
0
long al_duh_get_position(AL_DUH_PLAYER *dp)
{
	return dp ? duh_sigrenderer_get_position(dp->sigrenderer) : -1;
}