Class: MultimediaParadise::Audio::AudioTagReader

Inherits:
Base
  • Object
show all
Defined in:
lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb

Overview

MultimediaParadise::AudioTagReader

Constant Summary collapse

N_PAD =
#

N_PAD

#
25

Constants inherited from Base

Base::ERROR, Base::ERROR_LINE, Base::NAMESPACE, Base::USE_THIS_NAMESPACE_FOR_THE_COLOURS, Base::USE_THIS_NAMESPACE_FOR_THE_CORE_COLOURS

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#actions, #append_what_into, #be_silent, #be_verbose?, #beautiful_url, #cartoons_directory?, #clear_the_internal_hash, #cliner, #cliner_with_time_stamp, #colourized_comment, #copy_file, #crimson, #dataset_from_file_video_collection, #dd_mm_yyyy, #debug?, #default_readlines, #directory_to_realvids?, #do_not_use_opn, #dodgerblue, #does_the_video_player_support_this_commandline?, #e, #ecomment, #ecrimson, #efancy, #enable_debug, #ensure_main_encoding, #ensure_that_the_output_directory_exists, #eparse, #erev, #esystem, #ewarn, #file_video_collection?, #filter_for_audio_files, #filter_for_video_files, #forestgreen, #gold, #grey, #hh_mm_ss, #home_x_video?, #indianred, #infer_the_namespace, #internal_hash?, #is_audio_file?, #is_mkv?, #is_mp3?, #is_mp4?, #is_multimedia_file?, #is_on_roebe?, #is_video_file?, #konsole_colour_peru, #lightblue, #lightgreen, #load_yaml, #local_audio_directory?, #log_dir?, #map_symbol_to_locally_existing_file, #mediumorchid, #mediumpurple, #mediumslateblue, #mkdir, #move_file, #namespace?, #no_file_exists, #no_file_exists_at, #olive, #olivedrab, #opne, #opnecomment, #opnn, #orange, #palegoldenrod, #palegreen, #powderblue, #project_base_directory?, #rds, #register_sigint, #remove_file, #report_pwd, #reset_the_internal_hash, #return_all_video_files, #return_pwd, #return_random_video, #rev, #royalblue, #save_what_into, #sdir, #seagreen, #seconds_to_time_format, #select_only_video_files_from, #set_be_verbose, #set_use_colours, #sfancy, #sfile, #simp, #skyblue, #slateblue, #springgreen, #steelblue, #swarn, #teal, #time_right_now, #to_hh_mm_ss, #tomato, #true_rev, #try_to_rename_kde_konsole_tab, #ucliner, #use_colours?, #use_opn?, #use_which_video_player?, #verbose_truth, #video_collection?, #violet, #yaml_directory?, #yel

Methods included from CommandlineArgumentsModule

#all_input_starts_with_a_number?, #commandline_arguments?, #commandline_arguments_as_a_string, #first_argument?, #first_non_hyphened_commandline_argument?, #set_commandline_arguments

Constructor Details

#initialize(commandline_arguments = nil, run_already = true) ⇒ AudioTagReader

#

initialize

#


37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 37

def initialize(
    commandline_arguments = nil,
    run_already           = true
  )
  reset
  set_commandline_arguments(
    commandline_arguments
  )
  # ======================================================================= #
  # === Handle blocks next
  # ======================================================================= #
  if block_given?
    yielded = yield
    case yielded
    # ===================================================================== #
    # === :do_not_report_anything
    # ===================================================================== #
    when :do_not_report_anything,
         :be_quiet,
         :be_silent
      @may_we_report = false
    end
  end
  run if run_already
end

Class Method Details

.[](i = '') ⇒ Object

#

MultimediaParadise::Audio::AudioTagReader[]

#


488
489
490
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 488

def self.[](i = '')
  new(i) { :be_quiet}
end

Instance Method Details

#album?Boolean Also known as: album

#

album?

#

Returns:

  • (Boolean)


219
220
221
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 219

def album?
  @album
end

#artist?Boolean Also known as: artist

#

artist?

#

Returns:

  • (Boolean)


191
192
193
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 191

def artist?
  @artist
end

#band?Boolean Also known as: band

#

band?

#

Returns:

  • (Boolean)


233
234
235
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 233

def band?
  @band
end

#bpm?Boolean Also known as: bpm

#

bpm?

#

Returns:

  • (Boolean)


212
213
214
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 212

def bpm?
  @bpm
end

#comment?Boolean Also known as: comment

#

comment?

#

Returns:

  • (Boolean)


254
255
256
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 254

def comment?
  @comment
end

#date?Boolean Also known as: date

#

date?

#

Returns:

  • (Boolean)


198
199
200
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 198

def date?
  @date
end

#disc?Boolean Also known as: disc

#

disc?

#

Returns:

  • (Boolean)


205
206
207
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 205

def disc?
  @disc
end

#do_determine_the_length_of_the_song(this_file = main_file? ) ⇒ Object

#

do_determine_the_length_of_the_song

The first argument should be the name of the .mp3 file at hand.

#


407
408
409
410
411
412
413
414
415
416
417
418
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 407

def do_determine_the_length_of_the_song(
    this_file = main_file?
  )
  # ======================================================================= #
  # The way for the mp3-library goes like this:
  #   @length_in_seconds = @properties.length_in_seconds  # => 335 (song length)
  # But this was buggy for me, so we query ffmpeg instead. The code above
  # is retained, though, in the event that we may want to re-instate it
  # one day. (Noted this down at 26.10.2021)
  # ======================================================================= #
  @length_in_seconds = ::MultimediaParadise.length_of?(this_file)
end

#genre?Boolean Also known as: genre

#

genre?

#

Returns:

  • (Boolean)


240
241
242
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 240

def genre?
  @genre
end

#length_in_seconds?Boolean

#

length_in_seconds?

#

Returns:

  • (Boolean)


398
399
400
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 398

def length_in_seconds?
  @length_in_seconds
end

#performer?Boolean Also known as: performer

#

performer?

#

Returns:

  • (Boolean)


247
248
249
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 247

def performer?
  @performer
end

#report_album(i = @album) ⇒ Object

#

report_album

#


130
131
132
133
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 130

def report_album(i = @album)
  e sfancy('  Album: '.ljust(N_PAD))+
    right_colour(i.to_s)
end

#report_artist(i = @artist) ⇒ Object

#

report_artist

#


122
123
124
125
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 122

def report_artist(i = @artist)
  e sfancy('  Artist: '.ljust(N_PAD))+
    right_colour(i.to_s)
end

#report_comment(i = @comment) ⇒ Object

#

report_comment

#


138
139
140
141
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 138

def report_comment(i = @comment)
  e sfancy('  Comment: '.ljust(N_PAD))+
    right_colour(i.to_s)
end

#report_everythingObject Also known as: report

#

report_everything

This method will report as much as possible about the song at hand.

“track” would also be a tag that could be shown. Personally I don’t really need it, though.

#


336
337
338
339
340
341
342
343
344
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 336

def report_everything
  report_title
  report_artist
  report_album
  report_year
  report_genre
  report_comment
  report_length_in_seconds
end

#report_genre(i = @genre) ⇒ Object

#

report_genre

To get all available genres, see:

https://en.wikipedia.org/wiki/ID3#Genre_list_in_ID3v1[12]
#


151
152
153
154
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 151

def report_genre(i = @genre)
  e sfancy('  Genre: '.ljust(N_PAD))+
    right_colour(i.to_s)
end

#report_length_in_seconds(i = @length_in_seconds) ⇒ Object

#

report_length_in_seconds

#


167
168
169
170
171
172
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 167

def report_length_in_seconds(
    i = @length_in_seconds
  )
  e sfancy('  Duration (in seconds): '.ljust(N_PAD))+
    right_colour(i.to_s)
end

#report_title(i = @title) ⇒ Object

#

report_title

#


107
108
109
110
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 107

def report_title(i = @title)
  e sfancy('  Title: '.ljust(N_PAD))+
    right_colour(i.to_s)
end

#report_year(i = @year) ⇒ Object

#

report_year

#


159
160
161
162
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 159

def report_year(i = @year)
  e sfancy('  Year: '.ljust(N_PAD))+
    right_colour(i.to_s)
end

#resetObject

#

reset (reset tag)

#


66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 66

def reset
  super()
  # ======================================================================= #
  # === @performer
  # ======================================================================= #
  @performer = nil
  # ======================================================================= #
  # === @band
  # ======================================================================= #
  @band = nil
  # ======================================================================= #
  # === @bpm
  # ======================================================================= #
  @bpm = nil
  # ======================================================================= #
  # === @date
  # ======================================================================= #
  @date = nil
  # ======================================================================= #
  # === @disc
  # ======================================================================= #
  @disc = nil
  # ======================================================================= #
  # === @may_we_report
  #
  # Whether to output anything to the user on the commandline or not,
  # by default.
  # ======================================================================= #
  @may_we_report = true
end

#right_colour(i) ⇒ Object

#

right_colour

#


115
116
117
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 115

def right_colour(i)
  mediumpurple(i)
end

#runObject

#

run (run tag)

#


474
475
476
477
478
479
480
481
482
483
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 474

def run
  try_to_require_the_tablib_gem
  # ======================================================================= #
  # We will assume that the first argument given is the file we want to
  # work on.
  # ======================================================================= #
  this_file = first_argument?.to_s.dup
  set_this_file(this_file)
  work_on_this_file(this_file?)
end

#saveObject

#

save

#


467
468
469
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 467

def save
  @tag.save
end

#set_album(i) ⇒ Object Also known as: album=

#

set_album

#


275
276
277
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 275

def set_album(i)
  @album = i.to_s
end

#set_artist(i) ⇒ Object Also known as: artist=

#

set_artist

#


282
283
284
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 282

def set_artist(i)
  @artist = i.to_s
end

#set_comment(i) ⇒ Object Also known as: comment=

#

set_comment

#


289
290
291
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 289

def set_comment(i)
  @comment = i.to_s
end

#set_genre(i) ⇒ Object Also known as: genre=

#

set_genre

#


310
311
312
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 310

def set_genre(i)
  @genre = i.to_s
end

#set_new_album(i) ⇒ Object

#

set_new_album

#


324
325
326
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 324

def set_new_album(i)
  @tag.album = i
end

#set_new_year(i) ⇒ Object

#

set_new_year

#


317
318
319
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 317

def set_new_year(i)
  @tag.year = i.to_i # This must be an Integer.
end

#set_this_file(i) ⇒ Object

#

set_this_file

#


100
101
102
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 100

def set_this_file(i)
  @this_file = i
end

#set_title(i) ⇒ Object Also known as: title=

#

set_title

#


268
269
270
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 268

def set_title(i)
  @title = i.to_s
end

#set_track(i) ⇒ Object Also known as: track=

#

set_track

#


296
297
298
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 296

def set_track(i)
  @track = i.to_i # This must be an Integer.
end

#set_year(i) ⇒ Object Also known as: year=

#

set_year

#


303
304
305
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 303

def set_year(i)
  @year = i.to_i # This must be an Integer.
end

#tag?Boolean Also known as: tag

#

tag?

#

Returns:

  • (Boolean)


177
178
179
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 177

def tag?
  @tag
end

#this_file?Boolean Also known as: main_file?

#

this_file?

#

Returns:

  • (Boolean)


391
392
393
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 391

def this_file?
  @this_file
end

#title?Boolean Also known as: title

#

title?

#

Returns:

  • (Boolean)


184
185
186
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 184

def title?
  @title
end

#track?Boolean Also known as: track

#

track?

#

Returns:

  • (Boolean)


261
262
263
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 261

def track?
  @track
end

#try_to_require_the_tablib_gemObject

#

try_to_require_the_tablib_gem

#


423
424
425
426
427
428
429
430
431
432
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 423

def try_to_require_the_tablib_gem
  begin
    # ===================================================================== #
    # Require the taglib-ruby gem.
    #
    # See: https://rubygems.org/gems/taglib-ruby
    # ===================================================================== #
    require 'taglib'
  rescue LoadError; end
end

#update!(this_file = @this_file, title = @title, artist = @artist, genre = @genre, comment = @comment, track = @track) ⇒ Object

#

update!

This method can be used to update the tags.

#


439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 439

def update!( 
    this_file = @this_file,
    title     = @title,
    artist    = @artist,
    genre     = @genre,
    comment   = @comment,
    track     = @track
  )
  TagLib::FileRef.open(this_file) { |fileref| # of class TagLib::FileRef.
    unless fileref.null?
      @tag       = fileref.tag # Keep a reference to it here.
      set_new_album(@album) # Use the old reference.
      set_new_year(@year)  # Use the old reference, via @year.
      @tag.title   = title.to_s
      @tag.artist  = artist.to_s
      @tag.genre   = genre.to_s
      @tag.comment = comment.to_s
      if track
        @tag.track = track.to_i # This must be an integer.
      end
      fileref.save
    end
  }
end

#work_on_this_file(this_file = this_file? ) ⇒ Object

#

work_on_this_file

#


349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 349

def work_on_this_file(
    this_file = this_file?
  )
  unless Object.const_defined? :TagLib
    text = <<-EOF
Please install TagLib first via:

gem install taglib

EOF
    e text
    return text
  end
  # ======================================================================= #
  # Load up the file via TagLib first.
  # ======================================================================= #
  TagLib::FileRef.open(this_file) { |fileref| # of class TagLib::FileRef.
    unless fileref.null?
      @tag       = fileref.tag  # Keep a reference to it here.
      @title     = @tag.title   # => "Wake Up"
      @artist    = @tag.artist  # => "DJ Punk"
      @album     = @tag.album   # => "Funeral"
      @year      = @tag.year    # => 2004
      @genre     = @tag.genre   # => "Indie Rock"
      @comment   = @tag.comment
      @track     = @tag.track
      # @band    = @tag.band # Does not exist.
      @performer = @tag.performer if @tag.respond_to? :performer
      @properties = fileref.audio_properties
      do_determine_the_length_of_the_song(this_file)
      if @may_we_report
        e
        report_everything
        e
      end
    end
  } # File is automatically closed at block end.
end

#year?Boolean Also known as: year

#

year?

#

Returns:

  • (Boolean)


226
227
228
# File 'lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb', line 226

def year?
  @year
end