bool RipTrack(track_t i_track, std::string filename) { InitWavWriter(filename); p = cdio_paranoia_init(d); if (!p) return false; /* Restrict speed */ if (cdda_speed_set(d, MAX_SPEED) != DRIVER_OP_SUCCESS) { printf("Unable to set speed\n"); } i_first_lsn = cdio_cddap_track_firstsector(d, i_track); if ( -1 == i_first_lsn ) { printf("Trouble getting starting LSN\n"); } else { i_last_lsn = cdio_cddap_track_lastsector(d, i_track); printf("Reading track %d from LSN %ld to LSN %ld\n", i_track, (long int) i_first_lsn, (long int) i_last_lsn); /* Set reading mode for full paranoia, but allow skipping sectors. */ paranoia_modeset(p, PARANOIA_MODE_FULL^PARANOIA_MODE_NEVERSKIP); if (RipAttempt() == 1) { printf("Ripping failed\n"); return false; } } CloseWavWriter(); cdio_paranoia_free(p); return true; }
static int CDDAReader_track_lsn_device(cdio_CDDAReader *self, int track_num) { const lsn_t lsn = cdio_cddap_track_firstsector(self->_.drive.drive, (track_t)track_num); return lsn; }
int CdParanoia::firstSectorOfTrack(int track) { #ifdef CDIOPARANOIA_FOUND return paranoia ? cdio_cddap_track_firstsector(drive, track) : -1; #else return paranoia ? cdda_track_firstsector(drive, track) : -1; #endif }
static PyObject* CDDA_track_offsets(cdio_CDDAObject* self, PyObject *args) { int tracknum; lsn_t first_sector; lsn_t last_sector; if (!PyArg_ParseTuple(args, "i", &tracknum)) return NULL; first_sector = cdio_cddap_track_firstsector(self->cdrom_drive, (track_t)tracknum); last_sector = cdio_cddap_track_lastsector(self->cdrom_drive, (track_t)tracknum); return Py_BuildValue("(i,i)", (int)first_sector, (int)last_sector); }
static gboolean xmms_cdda_init (xmms_xform_t *xform) { CdIo_t *cdio = NULL; cdrom_drive_t *drive = NULL; const gchar *url; gchar **url_data = NULL; gchar *url_end; xmms_cdda_data_t *data; guint playtime; lsn_t first_lsn; track_t track; gchar *disc_id = NULL; gchar *cddb_id = NULL; xmms_config_property_t *val; const gchar *device; const gchar *metakey; gboolean ret = TRUE; g_return_val_if_fail (xform, FALSE); url = xmms_xform_indata_get_str (xform, XMMS_STREAM_TYPE_URL); if (g_ascii_strcasecmp (url, "cdda://") == 0) { xmms_xform_outdata_type_add (xform, XMMS_STREAM_TYPE_MIMETYPE, "application/x-xmms2-playlist-entries", XMMS_STREAM_TYPE_END); return TRUE; } val = xmms_xform_config_lookup (xform, "device"); device = xmms_config_property_get_string (val); if (!get_disc_ids (device, &disc_id, &cddb_id, 0)) { return FALSE; } url += 7; url_data = g_strsplit (url, "/", 2); if (g_ascii_strcasecmp (url_data[0], disc_id)) { xmms_log_error ("Wrong disc inserted."); ret = FALSE; goto end; } if (url_data[1] == NULL) { xmms_log_error ("Missing track number."); ret = FALSE; goto end; } track = strtol (url_data[1], &url_end, 10); if (url_data[1] == url_end) { xmms_log_error ("Invalid track, need a number."); ret = FALSE; goto end; } cdio = open_cd (xform); if (!cdio) { ret = FALSE; goto end; } drive = cdio_cddap_identify_cdio (cdio, 1, NULL); if (!drive) { xmms_log_error ("Failed to identify drive."); ret = FALSE; goto end; } if (cdio_cddap_open (drive)) { xmms_log_error ("Unable to open disc."); ret = FALSE; goto end; } first_lsn = cdio_cddap_track_firstsector (drive, track); if (first_lsn == -1) { xmms_log_error ("No such track."); ret = FALSE; goto end; } data = g_new (xmms_cdda_data_t, 1); data->cdio = cdio; data->drive = drive; data->track = track; data->first_lsn = first_lsn; data->last_lsn = cdio_cddap_track_lastsector (drive, data->track); data->current_lsn = first_lsn; data->buf_used = CDIO_CD_FRAMESIZE_RAW; playtime = (data->last_lsn - data->first_lsn) * 1000.0 / CDIO_CD_FRAMES_PER_SEC; metakey = XMMS_MEDIALIB_ENTRY_PROPERTY_DURATION; xmms_xform_metadata_set_int (xform, metakey, playtime); metakey = XMMS_MEDIALIB_ENTRY_PROPERTY_BITRATE; xmms_xform_metadata_set_int (xform, metakey, 141120); xmms_xform_metadata_set_str (xform, "disc_id", url_data[0]); xmms_xform_metadata_set_str (xform, "cddb_id", cddb_id); metakey = XMMS_MEDIALIB_ENTRY_PROPERTY_TRACKNR; xmms_xform_metadata_set_int (xform, metakey, track); xmms_xform_private_data_set (xform, data); xmms_xform_outdata_type_add (xform, XMMS_STREAM_TYPE_MIMETYPE, "audio/pcm", XMMS_STREAM_TYPE_FMT_FORMAT, XMMS_SAMPLE_FORMAT_S16, XMMS_STREAM_TYPE_FMT_CHANNELS, 2, XMMS_STREAM_TYPE_FMT_SAMPLERATE, 44100, XMMS_STREAM_TYPE_END); end: /* These are to be destroyed in every cases... */ g_free (cddb_id); g_free (disc_id); g_strfreev (url_data); /* destroy cdio/drive in case of failure */ if (!ret) { if (drive) { cdio_cddap_close_no_free_cdio (drive); } if (cdio) { cdio_destroy (cdio); } } return ret; }
lba_t GetLba(track_t i_track) { return cdio_lsn_to_lba(cdio_cddap_track_firstsector(d, i_track)); }
static int CDDAReader_first_sector_device(cdio_CDDAReader *self) { return cdio_cddap_track_firstsector(self->_.drive.drive, self->first_track_num(self)); }