Beispiel #1
0
static void
parse_cddb (cdda_t *cd)
{
    cddb_disc_t *disc;
    cddb_conn_t *conn;
    int res;

    if (!cd)
        return;

    libcddb_init ();
    conn = cddb_new ();
    disc = cddb_disc_new ();

    cddb_disc_set_category_str (disc, "misc");
    cddb_disc_set_discid (disc, cd->id);

    res = cddb_read (conn, disc);
    if (!res)
        goto err_cddb_read;

    cd_get_metadata (cd, disc);
    cd_get_tracks (cd, disc);

 err_cddb_read:
    cddb_disc_destroy (disc);
    libcddb_shutdown ();
}
Beispiel #2
0
/* cd_is_audio:
 *  Return 1 if track specified is audio,
 *  zero if it is data, -1 if an error occurs.
 */
int cd_is_audio(int track)
{
    struct cdrom_tocentry e;

    if ((cd_get_tracks(0, 0) < 0) || (get_tocentry(track, &e) < 0))
	return -1;
    return (e.cdte_ctrl & CDROM_DATA_TRACK) ? 0 : 1;
}
Beispiel #3
0
/* cd_play_from:
 *  Play from track to end of disc.  Return zero on success.
 */
int cd_play_from(int track)
{
    int last;
    
    if (cd_get_tracks(0, &last) != 0)
	return -1;
    
    return play(track, last);
}
Beispiel #4
0
static int play(int t1, int t2)
{
#ifdef USE_PLAYMSF
    struct cdrom_tocentry e0, e1;
    struct cdrom_msf msf;
    int last;

    if (cd_get_tracks(0, &last) != 0)
	return -1;
    
    /* cdrom.h: The leadout track is always 0xAA, regardless 
     * of # of tracks on disc. */
    if (t2 == last)
	t2 = CDROM_LEADOUT;
    else
	t2++;
    
    if ((get_tocentry(t1, &e0) != 0) ||
	(get_tocentry(t2, &e1) != 0))
	return -1;

    msf.cdmsf_min0 = e0.cdte_addr.msf.minute;
    msf.cdmsf_sec0 = e0.cdte_addr.msf.second;
    msf.cdmsf_frame0 = e0.cdte_addr.msf.frame;
    msf.cdmsf_min1 = e1.cdte_addr.msf.minute;
    msf.cdmsf_sec1 = e1.cdte_addr.msf.second;
    msf.cdmsf_frame1 = e1.cdte_addr.msf.frame;
    
    if (ioctl(fd, CDROMPLAYMSF, &msf) < 0) {
	copy_cd_error();
	return -1;
    }
    
    return 0;
#else
    struct cdrom_ti idx;

    memset(&idx, 0, sizeof(idx));
    idx.cdti_trk0 = t1;
    idx.cdti_trk1 = t2;
    if (ioctl(fd, CDROMPLAYTRKIND, &idx) < 0) {
	copy_cd_error();
	return -1;
    }

    return 0;
#endif
}
Beispiel #5
0
/*
 * Description: Get First and Last Track number from the CD.
 * 
 * Returns:	true if success, false other wise.
 */
static int get_track_info( track_info * ptrack_info )
{
  int	  rc		= false ;
  int	  first_track	= 0 ;
  int	  last_track	= 0 ;

  if	( cd_get_tracks ( &first_track, &last_track ) ) 
	{
	  show_error( INFO, cd_error ) ;
	}
  else
	{
	  ptrack_info->first_track = first_track ;
	  ptrack_info->last_track  = last_track ;
	  rc = true ;
	}

  return rc ;
}
Beispiel #6
0
cdda_t *
cdda_parse (const char *device)
{
    cdda_t *cd;

    if (!device)
        return NULL;

    cd = cd_identify (device);

#ifdef BUILD_LIBCDDB
    parse_cddb (cd);
#else
    cd_get_tracks (cd);
#endif

    cd_display_info (cd);

    return cd;
}
Beispiel #7
0
int main()
{
    char cmd[20];
    int done = 0;
    int ret, trk, a, b;

    if (cd_init() < 0) {
	printf("Error initialising libcda (%s)\n", cd_error);
	return 1;
    }
	
    show_cmds();

    do {  
	printf(">>> ");
	fflush(stdout);
	scanf("%s", cmd);

	switch (cmd[0]) {
	    case '?':
		show_cmds();
		break;

	    case 'p':
		trk = input_int("Track");
		ret = cd_play(trk);
		if (ret != 0)
		    printf("Error occurred (%s)\n", cd_error);
		break;

	    case 'r':
		a = input_int("First track");
		b = input_int("Last track");
		ret = cd_play_range(a, b);
		if (ret != 0)
		    printf("Error occurred (%s)\n", cd_error);
		break;

	    case 'f':
		trk = input_int("Start track");
		ret = cd_play_from(trk);
		if (ret != 0)
		    printf("Error occurred (%s)\n", cd_error);
		break;

	    case 'P':
		trk = cd_current_track();
		if (trk)
		    printf("Playing track %d\n", trk);
		else
		    printf("Not playing\n");
		break;

	    case 'w':
		cd_pause();
		break;

	    case 'W':
		cd_resume();
		break;

	    case 'S':
		ret = cd_is_paused();
		if (ret)
		    printf("Paused\n");
		else
		    printf("Not paused\n");
		break;

	    case 's':
		cd_stop();
		break;

	    case 'i':
		ret = cd_get_tracks(&a, &b);
		if (ret != 0)
		    printf("Error occurred (%s)\n", cd_error);
		else
		    printf("First track: %d\nLast track: %d\n", a, b);
		break;

	    case 'a':
		trk = input_int("Track");
		ret = cd_is_audio(trk);
		if (ret < 0)
		    printf("Error occurred (%s)\n", cd_error);
		else
		    printf("Track %d is %s\n", trk, (ret ? "audio" : "data"));
		break;

	    case 'v':
		a = input_int("Left (0-255)");
		b = input_int("Right (0-255)");
		cd_set_volume(a, b);
		break;

	    case 'V':
		cd_get_volume(&a, &b);
		printf("Left volume: %d\nRight volume: %d\n", a, b);
		break;

	    case 'e':
		cd_eject();
		break;

	    case 'c':
		cd_close();
		break;

	    case 'q':
		done = 1;
		break;

	    default:
		printf("Unrecognised command: `%c'\n", cmd[0]);
	}
    } while (!done);

    cd_exit();
    
    return 0;
}