Esempio n. 1
0
int
ad_info_sndfile(WfDecoder* d)
{
	SndfileDecoder* sf = d->d;
	if (!sf) return -1;

	int16_t bit_depth = parse_bit_depth(sf->sfinfo.format);
	d->info = (WfAudioInfo){
		.channels    = sf->sfinfo.channels,
		.frames      = sf->sfinfo.frames,
		.sample_rate = sf->sfinfo.samplerate,
		.length      = sf->sfinfo.samplerate ? (sf->sfinfo.frames * 1000) / sf->sfinfo.samplerate : 0,
		.bit_depth   = bit_depth,
		.bit_rate    = bit_depth * sf->sfinfo.channels * sf->sfinfo.samplerate,
		.meta_data   = NULL,
	};
	return 0;
}


static gboolean
ad_open_sndfile(WfDecoder* decoder, const char* filename)
{
	SndfileDecoder* priv = decoder->d = g_new0(SndfileDecoder, 1);
	priv->sfinfo.format = 0;
	if(!(priv->sffile = sf_open(filename, SFM_READ, &priv->sfinfo))){
		dbg(1, "unable to open file '%s': %i: %s", filename, sf_error(NULL), sf_strerror(NULL));
		g_free(priv);
		return FALSE;
	}
	ad_info_sndfile(decoder);
	return TRUE;
}
Esempio n. 2
0
static int ad_info_sndfile(void *sf, struct adinfo *nfo) {
	sndfile_audio_decoder *priv = (sndfile_audio_decoder*) sf;
	if (!priv) return -1;
	if (nfo) {
		nfo->channels    = priv->sfinfo.channels;
		nfo->frames      = priv->sfinfo.frames;
		nfo->sample_rate = priv->sfinfo.samplerate;
		nfo->length      = priv->sfinfo.samplerate ? (priv->sfinfo.frames * 1000) / priv->sfinfo.samplerate : 0;
		nfo->bit_depth   = parse_bit_depth(priv->sfinfo.format);
		nfo->bit_rate    = nfo->bit_depth * nfo->channels * nfo->sample_rate;
		nfo->meta_data   = NULL;
	}
	return 0;
}