All pastes #1381186 Raw Edit

vikky

public text v1 · immutable
#1381186 ·published 2009-04-03 19:39 UTC
rendered paste body
#include "audio.h"#include <tag_c.h>AUDIO_session audio_session;int AUDIO_is_audio(AUDIO_session *s,const char *url){	int rv;	const char *info;	char *cptr;	if(!s->mstream){		printf("AUDIO_get_metedata error\n");		return 1;	}	/* First Pass file filter */	cptr = strrchr(url,'.');	if(cptr){		/* In order from MOST likely to LEAST likely */		if(!strcasecmp(cptr,".jpg"))return 1;		if(!strcasecmp(cptr,".png"))return 1;		if(!strcasecmp(cptr,".gif"))return 1;		if(!strcasecmp(cptr,".jpeg"))return 1;	}			rv = xine_open(s->mstream, url);			/* Second Pass file filter */	/* FIXME: Find a better/faster way of filtering streams */	// Note: INFO_AUDIO_HANDLED is true for pictures 	if(!xine_get_stream_info(s->mstream,XINE_STREAM_INFO_AUDIO_HANDLED)){		xine_close(s->mstream);			return 1;	}	xine_close(s->mstream);		return 0;}int AUDIO_get_metadata_taglib(const char *url, AUDIO_metadata *mdata){	int i;	int seconds;	int minutes;	TagLib_File *file;	TagLib_Tag *tag;	const TagLib_AudioProperties *properties;     /* Clear out the meta struct */        mdata->title[0]=0;        mdata->artist[0]=0;        mdata->album[0]=0;        mdata->year[0]=0;        mdata->track[0]=0;	taglib_set_strings_unicode(1);	file = taglib_file_new(url);	if(file == NULL)return 1;	tag = taglib_file_tag(file);	properties = taglib_file_audioproperties(file);	strcpy(mdata->title,taglib_tag_title(tag));	strcpy(mdata->artist,taglib_tag_artist(tag));	strcpy(mdata->album,taglib_tag_album(tag));	sprintf(mdata->year,"%i",taglib_tag_year(tag));	sprintf(mdata->track,"%i",taglib_tag_track(tag));		/*	seconds = taglib_audioproperties_length(properties) % 60;	minutes = (taglib_audioproperties_length(properties) - seconds) / 60;	printf("-- AUDIO --\n");	printf("bitrate     - %i\n", taglib_audioproperties_bitrate(properties));	printf("sample rate - %i\n", taglib_audioproperties_samplerate(properties));	printf("channels    - %i\n", taglib_audioproperties_channels(properties));	printf("length      - %i:%02i\n", minutes, seconds);*/	taglib_tag_free_strings();	taglib_file_free(file);	return 0;}int AUDIO_get_metadata(AUDIO_session *s, const char *url, AUDIO_metadata *mdata){	int rv;	const char *info;	char *cptr;	if(!s->mstream){		printf("AUDIO_get_metedata error\n");		return 1;	}			/* Clear out the meta struct */	mdata->title[0]=0;	mdata->artist[0]=0;	mdata->album[0]=0;	mdata->year[0]=0;	mdata->track[0]=0;	rv = AUDIO_is_audio(s,url);	if(rv)return 1;	rv = xine_open(s->mstream, url);	/* Copy metadata into meta data struct */	info=xine_get_meta_info (s->mstream,XINE_META_INFO_TITLE );	if(info)strcpy(mdata->title,info);	info =xine_get_meta_info (s->mstream,XINE_META_INFO_ARTIST );	if(info)strcpy(mdata->artist,info);	info = xine_get_meta_info (s->mstream,XINE_META_INFO_ALBUM );	if(info)strcpy(mdata->album,info);	info = xine_get_meta_info (s->mstream,XINE_META_INFO_YEAR );	if(info)strcpy(mdata->year,info);	info = xine_get_meta_info (s->mstream,XINE_META_INFO_TRACK_NUMBER);	if(info)strcpy(mdata->track,info);	xine_close(s->mstream);		return 0;}int AUDIO_init(AUDIO_session *s, char *audiodriver){	s->xine = xine_new();	//sprintf(configfile, "%s%s", xine_get_homedir(), "/.xine/config");	xine_config_load(s->xine, "/home/vikky/.xine/config");	xine_init(s->xine);	/* Open playback stream */	s->ao_port = xine_open_audio_driver(s->xine , audiodriver, NULL);	s->stream = xine_stream_new(s->xine, s->ao_port,NULL);		/* Open a stream with no drivers for meta data collection */	s->mstream = xine_stream_new(s->xine, NULL,NULL);	printf("Status: %i\n",xine_get_error(s->mstream));	if(!s->mstream){		printf("AUDIO init error\n");		return 1;	}	return 0;}int AUDIO_play(AUDIO_session *s,char *url){	xine_open(s->stream, url);	xine_play(s->stream, 0, 0);	sleep(10);	xine_stop(s->stream);	xine_close(s->stream);	return 0;}int AUDIO_dinit(AUDIO_session *s){	printf("audi dinit\n");	//  xine_event_dispose_queue(event_queue);	xine_dispose(s->mstream);	xine_dispose(s->stream);	xine_close_audio_driver(s->xine, s->ao_port);	xine_exit(s->xine);	return 0;}