Class: DiscId::Disc

Inherits:
Object
  • Object
show all
Defined in:
lib/discid/disc.rb

Overview

This class holds information about a disc (TOC, MCN, ISRCs).

Use #read or #put to initialize an instance of Disc.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#deviceObject (readonly)

The device from which this disc object was read.



28
29
30
# File 'lib/discid/disc.rb', line 28

def device
  @device
end

Instance Method Details

#first_track_numberInteger

The number of the first track on this disc.

Returns:

  • (Integer)

    The number of the first track or nil if no ID was yet read.



93
94
95
# File 'lib/discid/disc.rb', line 93

def first_track_number
  Lib.get_first_track_num @handle if @read
end

#freedb_idString

The FreeDB DiscID.

Returns:

  • (String)

    The DiscID or nil if no ID was yet read.



86
87
88
# File 'lib/discid/disc.rb', line 86

def freedb_id
  Lib.get_freedb_id @handle if @read
end

#idString

The MusicBrainz DiscID.

Returns:

  • (String)

    The DiscID or nil if no ID was yet read.



79
80
81
# File 'lib/discid/disc.rb', line 79

def id
  Lib.get_id @handle if @read
end

#last_track_numberInteger

The number of the last track on this disc.

Returns:

  • (Integer)

    The number of the last track or nil if no ID was yet read.



100
101
102
# File 'lib/discid/disc.rb', line 100

def last_track_number
  Lib.get_last_track_num @handle if @read
end

#mcnString

Note:

libdiscid >= 0.3.0 required. Older versions will always return nil. Not available on all platforms, see https://musicbrainz.org/doc/libdiscid#Feature_Matrix.

The media catalogue number on the disc, if present.

Requires libdiscid >= 0.5. If not supported this method will always return nil.

Returns:

  • (String)

    MCN or nil if no ID was yet read.



128
129
130
# File 'lib/discid/disc.rb', line 128

def mcn
  Lib.get_mcn @handle if @read
end

#secondsInteger

The length of the disc in seconds.

Returns:

  • (Integer)

    Seconds or nil if no ID was yet read.



114
115
116
# File 'lib/discid/disc.rb', line 114

def seconds
  DiscId.sectors_to_seconds(sectors) if @read
end

#sectorsInteger

The length of the disc in sectors.

Returns:

  • (Integer)

    Sectors or nil if no ID was yet read.



107
108
109
# File 'lib/discid/disc.rb', line 107

def sectors
  Lib.get_sectors @handle if @read
end

#submission_urlString

An URL for submitting the DiscID to MusicBrainz.

The URL leads to an interactive disc submission wizard that guides the user through the process of associating this disc's DiscID with a release in the MusicBrainz database.

Returns:

  • (String)

    Submission URL



172
173
174
# File 'lib/discid/disc.rb', line 172

def submission_url
  Lib.get_submission_url @handle if @read
end

#to_sString

DiscID to String conversion. Same as calling the method #id but guaranteed to return a string.

Returns:

  • (String)

    The disc ID as a string or an empty string if no ID was yet read.



181
182
183
# File 'lib/discid/disc.rb', line 181

def to_s
  id.to_s
end

#toc_stringString

Return a string representing CD Table Of Contents (TOC).

The TOC suitable as a value of the toc parameter when accessing the MusicBrainz Web Service. This enables fuzzy searching when the actual DiscID is not found.

Note that this is the unencoded value, which still contains spaces.

For libdiscid >= 0.6 the native implementation will be used. For older versions falls back to extract the TOC from #submission_url.

Returns:

  • (String)

    The TOC string or nil if no ID was yet read.

Raises:

  • (RuntimeError)

    get_toc_string is unsupported by libdiscid and could not get extracted from #submission_url

Since:

  • 1.3



148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# File 'lib/discid/disc.rb', line 148

def toc_string
  return nil unless @read

  result = Lib.get_toc_string @handle
  unless result
    # probably an old version of libdiscid (< 0.6.0)
    # gather toc string from submission_url
    match = /toc=([0-9+]+)/.match submission_url

    raise "can't get toc string from submission url" unless match

    result = match[1].tr('+', ' ')
  end

  result
end

#tracks {|Track| ... } ⇒ Array<Track>

Returns an array of Track objects. Each Track object contains detailed information about the track.

Returns always nil if no ID was yet read. The block won't be called in this case.

Yields:

  • (Track)

    If a block is given this method returns nil and instead iterates over the block calling the block with one argument.

Yield Returns:

  • (nil)

Returns:



195
196
197
198
199
200
201
202
203
204
# File 'lib/discid/disc.rb', line 195

def tracks(&block)
  return unless @read

  read_tracks if @tracks.nil?

  return @tracks unless block

  @tracks.each(&block)
  nil
end