multimedia_paradise 1.1.344 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (218) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +99 -77
  3. data/bin/audio_player +1 -1
  4. data/bin/extract_images_from_this_video_file +1 -1
  5. data/bin/loop_this_video +1 -1
  6. data/bin/merge_avi_files +1 -1
  7. data/bin/merge_mp3 +1 -1
  8. data/bin/mp3_to_opus +1 -1
  9. data/bin/mpg_to_mp4 +1 -1
  10. data/bin/multimedia_paradise +1 -1
  11. data/bin/to_aiff +2 -5
  12. data/bin/to_flac +7 -0
  13. data/bin/to_mp3 +8 -0
  14. data/bin/to_mp4 +1 -1
  15. data/bin/to_ogg +7 -0
  16. data/bin/verbose_analyse_this_mp3_file_for_id3_tags +1 -1
  17. data/bin/video_codec +1 -1
  18. data/bin/video_thumbnail +1 -1
  19. data/bin/video_to_images +1 -1
  20. data/doc/README.gen +88 -51
  21. data/doc/{CHANGELOG.md → changelog/changelog.md} +8 -6
  22. data/doc/{LINKS.md → links/links.md} +2 -2
  23. data/doc/{MOTIVATION_FOR_THIS_PROJECT.md → motivation_for_the_multimedia_paradise_project/motivation_for_the_multimedia_paradise_project.md} +5 -5
  24. data/doc/todo/todo_for_the_multimedia_paradise_project.md +79 -93
  25. data/lib/multimedia_paradise/actions/actions.rb +224 -0
  26. data/lib/multimedia_paradise/audio/audio_player/audio_player.rb +61 -64
  27. data/lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb +17 -8
  28. data/lib/multimedia_paradise/audio/base.rb +0 -5
  29. data/lib/multimedia_paradise/audio/compress.rb +8 -5
  30. data/lib/multimedia_paradise/audio/create_m3u_playlist.rb +7 -11
  31. data/lib/multimedia_paradise/audio/extract_audio/constants.rb +0 -37
  32. data/lib/multimedia_paradise/audio/extract_audio/extract_audio.rb +90 -68
  33. data/lib/multimedia_paradise/audio/file_duration/file_duration.rb +134 -80
  34. data/lib/multimedia_paradise/audio/genres/boogie.rb +1 -6
  35. data/lib/multimedia_paradise/audio/genres/concerts.rb +1 -6
  36. data/lib/multimedia_paradise/audio/genres/constants.rb +1 -1
  37. data/lib/multimedia_paradise/audio/genres/eurodance.rb +1 -6
  38. data/lib/multimedia_paradise/audio/genres/genre.rb +36 -33
  39. data/lib/multimedia_paradise/audio/genres/hip_hop.rb +1 -6
  40. data/lib/multimedia_paradise/audio/genres/italian_songs.rb +1 -6
  41. data/lib/multimedia_paradise/audio/genres/the_1980s.rb +1 -6
  42. data/lib/multimedia_paradise/audio/genres/trance.rb +4 -7
  43. data/lib/multimedia_paradise/audio/lyrics_fetcher.rb +27 -22
  44. data/lib/multimedia_paradise/audio/merge_audio_files.rb +18 -11
  45. data/lib/multimedia_paradise/audio/modify_year_of_audio_file.rb +23 -11
  46. data/lib/multimedia_paradise/audio/n_audio_songs.rb +3 -2
  47. data/lib/multimedia_paradise/audio/play_all_audio_files.rb +41 -16
  48. data/lib/multimedia_paradise/audio/playlist/playlist.rb +163 -123
  49. data/lib/multimedia_paradise/audio/remove_audio.rb +11 -6
  50. data/lib/multimedia_paradise/audio/remove_last_second.rb +2 -3
  51. data/lib/multimedia_paradise/audio/report_missing_id.rb +22 -12
  52. data/lib/multimedia_paradise/audio/streamripper/streamripper_wrapper.rb +7 -5
  53. data/lib/multimedia_paradise/audio/to_mp3.rb +7 -5
  54. data/lib/multimedia_paradise/audio/to_ogg.rb +3 -1
  55. data/lib/multimedia_paradise/audio/wav_to_mp3.rb +5 -5
  56. data/lib/multimedia_paradise/base/base.rb +854 -15
  57. data/lib/multimedia_paradise/base/colours.rb +28 -31
  58. data/lib/multimedia_paradise/base/{commandline_arguments.rb → commandline_arguments_module/commandline_arguments_module.rb} +12 -9
  59. data/lib/multimedia_paradise/colours/colours.rb +4 -1
  60. data/lib/multimedia_paradise/commandline/{menu.rb → commandline.rb} +19 -16
  61. data/lib/multimedia_paradise/constants/constants.rb +504 -14
  62. data/lib/multimedia_paradise/constants/web_constants.rb +2 -4
  63. data/lib/multimedia_paradise/gui/gui_base.rb +2 -2
  64. data/lib/multimedia_paradise/gui/libui/lyrics/lyrics.rb +1 -1
  65. data/lib/multimedia_paradise/gui/libui/simple_play_widget/simple_play_widget.rb +1 -1
  66. data/lib/multimedia_paradise/gui/libui/video_player/video_player.rb +1 -1
  67. data/lib/multimedia_paradise/gui/libui/youtube_channels/youtube_channels.rb +1 -1
  68. data/lib/multimedia_paradise/gui/shared_code/multimedia_converter/multimedia_converter_module.rb +0 -478
  69. data/lib/multimedia_paradise/gui/shared_code/playlist/playlist_module.rb +94 -41
  70. data/lib/multimedia_paradise/gui/shared_code/simple_play_widget/simple_play_widget_module.rb +0 -257
  71. data/lib/multimedia_paradise/gui/universal_widgets/change_metadata_widget/change_metadata_widget.rb +2 -2
  72. data/lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb +1 -1
  73. data/lib/multimedia_paradise/gui/universal_widgets/lyrics/lyrics.rb +1 -1
  74. data/lib/multimedia_paradise/gui/universal_widgets/multimedia_converter/multimedia_converter.rb +589 -0
  75. data/lib/multimedia_paradise/gui/universal_widgets/playlist/playlist.rb +197 -0
  76. data/lib/multimedia_paradise/gui/universal_widgets/radio/radio.rb +1 -1
  77. data/lib/multimedia_paradise/gui/{gtk2 → universal_widgets}/simple_play_widget/README.md +1 -1
  78. data/lib/multimedia_paradise/gui/universal_widgets/simple_play_widget/simple_play_widget.rb +404 -0
  79. data/lib/multimedia_paradise/gui/universal_widgets/tag_mp3_files/tag_mp3_files.rb +3 -6
  80. data/lib/multimedia_paradise/java/Playlist.class +0 -0
  81. data/lib/multimedia_paradise/java/Playlist.java +198 -0
  82. data/lib/multimedia_paradise/multimedia/analyse_multimedia_file.rb +21 -19
  83. data/lib/multimedia_paradise/multimedia/avisynth/avisynth_code.avs +441 -442
  84. data/lib/multimedia_paradise/multimedia/base.rb +0 -18
  85. data/lib/multimedia_paradise/multimedia/chord.rb +1 -1
  86. data/lib/multimedia_paradise/multimedia/cut_multimedia/cut_multimedia.rb +7 -5
  87. data/lib/multimedia_paradise/multimedia/cut_multimedia/evaluate_from_this_file.rb +2 -2
  88. data/lib/multimedia_paradise/multimedia/interactive_shell.rb +22 -3
  89. data/lib/multimedia_paradise/multimedia/merge_multimedia.rb +4 -3
  90. data/lib/multimedia_paradise/multimedia/play_from_this_list.rb +4 -27
  91. data/lib/multimedia_paradise/multimedia/{read_meta_tags.rb → read_meta_tags/read_meta_tags.rb} +14 -19
  92. data/lib/multimedia_paradise/multimedia/start_length_duration.rb +3 -3
  93. data/lib/multimedia_paradise/project/project.rb +8 -4
  94. data/lib/multimedia_paradise/requires/require_the_multimedia_paradise_project.rb +5 -5
  95. data/lib/multimedia_paradise/requires/require_toplevel_methods_files.rb +1 -1
  96. data/lib/multimedia_paradise/sinatra/app.rb +3 -3
  97. data/lib/multimedia_paradise/statistics/README.md +6 -5
  98. data/lib/multimedia_paradise/statistics/video.rb +34 -14
  99. data/lib/multimedia_paradise/{misc → time}/long_format_to_milliseconds_converter.rb +4 -2
  100. data/lib/multimedia_paradise/{misc → time}/milliseconds_to_long_format_converter.rb +2 -2
  101. data/lib/multimedia_paradise/toplevel_methods/audio_related_code.rb +138 -0
  102. data/lib/multimedia_paradise/toplevel_methods/chop_into_segments_of_n_seconds_size.rb +2 -2
  103. data/lib/multimedia_paradise/{conversions → toplevel_methods}/conversions.rb +140 -48
  104. data/lib/multimedia_paradise/toplevel_methods/copy_and_merge_this_video_n_times.rb +5 -5
  105. data/lib/multimedia_paradise/toplevel_methods/create_video_from_this_audio.rb +7 -6
  106. data/lib/multimedia_paradise/toplevel_methods/cut_from_to.rb +2 -2
  107. data/lib/multimedia_paradise/toplevel_methods/denoise.rb +2 -2
  108. data/lib/multimedia_paradise/toplevel_methods/deshake.rb +3 -6
  109. data/lib/multimedia_paradise/toplevel_methods/{output_directory.rb → directory_related_code.rb} +38 -1
  110. data/lib/multimedia_paradise/toplevel_methods/encode_this_video.rb +8 -4
  111. data/lib/multimedia_paradise/toplevel_methods/esystem.rb +43 -4
  112. data/lib/multimedia_paradise/{ffmpeg → toplevel_methods}/ffmpeg.rb +200 -193
  113. data/lib/multimedia_paradise/toplevel_methods/{files_and_directories.rb → files_related_code.rb} +19 -56
  114. data/lib/multimedia_paradise/toplevel_methods/flip_and_rotate.rb +3 -3
  115. data/lib/multimedia_paradise/toplevel_methods/is_audio_file_is_video_file_is_image_file_is_multimedia_file.rb +115 -0
  116. data/lib/multimedia_paradise/toplevel_methods/is_on_roebe.rb +1 -1
  117. data/lib/multimedia_paradise/toplevel_methods/{merge_multimedia_file.rb → merge.rb} +98 -4
  118. data/lib/multimedia_paradise/toplevel_methods/opn.rb +5 -4
  119. data/lib/multimedia_paradise/toplevel_methods/player_in_use.rb +14 -7
  120. data/lib/multimedia_paradise/toplevel_methods/query_the_audio_codec_of_this_file.rb +4 -3
  121. data/lib/multimedia_paradise/toplevel_methods/radio.rb +1 -3
  122. data/lib/multimedia_paradise/toplevel_methods/return_all_video_files.rb +4 -4
  123. data/lib/multimedia_paradise/toplevel_methods/return_path_to_random_simpsons_video_file.rb +1 -1
  124. data/lib/multimedia_paradise/toplevel_methods/return_random_video_file_from_the_video_collection.rb +9 -7
  125. data/lib/multimedia_paradise/toplevel_methods/scale_video.rb +3 -4
  126. data/lib/multimedia_paradise/toplevel_methods/set_title_of.rb +6 -6
  127. data/lib/multimedia_paradise/{help/help.rb → toplevel_methods/show_help.rb} +14 -8
  128. data/lib/multimedia_paradise/toplevel_methods/slow_down_this_video_file.rb +2 -3
  129. data/lib/multimedia_paradise/toplevel_methods/start_screencast.rb +3 -2
  130. data/lib/multimedia_paradise/toplevel_methods/{misc.rb → toplevel_methods.rb} +485 -527
  131. data/lib/multimedia_paradise/toplevel_methods/total_duration.rb +4 -3
  132. data/lib/multimedia_paradise/toplevel_methods/use_lame_codec.rb +1 -2
  133. data/lib/multimedia_paradise/toplevel_methods/video_dataset.rb +1 -1
  134. data/lib/multimedia_paradise/version/version.rb +2 -2
  135. data/lib/multimedia_paradise/video/all_videos.rb +12 -19
  136. data/lib/multimedia_paradise/video/check_numbers.rb +76 -32
  137. data/lib/multimedia_paradise/video/columbo/columbo.rb +36 -14
  138. data/lib/multimedia_paradise/video/guess_video_name.rb +2 -10
  139. data/lib/multimedia_paradise/video/mike_hammer/mike_hammer.rb +2 -2
  140. data/lib/multimedia_paradise/video/missing_video_files/missing_video_files.rb +1 -9
  141. data/lib/multimedia_paradise/video/movie_searcher.rb +2 -10
  142. data/lib/multimedia_paradise/video/mplayer_wrapper.rb +1 -9
  143. data/lib/multimedia_paradise/video/random_video.rb +1 -2
  144. data/lib/multimedia_paradise/video/registered_video_file.rb +2 -10
  145. data/lib/multimedia_paradise/video/report_local_videos.rb +1 -9
  146. data/lib/multimedia_paradise/video/simpsons.rb +2 -10
  147. data/lib/multimedia_paradise/video/smart_animals/smart_animals.rb +10 -8
  148. data/lib/multimedia_paradise/video/speed_up_video.rb +28 -10
  149. data/lib/multimedia_paradise/video/store_available_video_files.rb +49 -33
  150. data/lib/multimedia_paradise/video/the_simpsons/README.md +0 -0
  151. data/lib/multimedia_paradise/video/the_simpsons/good_the_simpsons_episodes.rb +8 -8
  152. data/lib/multimedia_paradise/video/the_simpsons/the_simpsons.rb +14 -10
  153. data/lib/multimedia_paradise/video/video_information.rb +55 -49
  154. data/lib/multimedia_paradise/{configuration → yaml/configuration}/play_zoomed.yml +0 -0
  155. data/lib/multimedia_paradise/yaml/{playlist.yml → playlist/playlist.yml} +14 -15
  156. data/lib/multimedia_paradise/yaml/video/video.yml +1 -1
  157. data/lib/multimedia_paradise/yaml/video_collection/video_collection.yml +34 -32
  158. data/lib/multimedia_paradise/yaml/youtube/alltagsgeschichte/alltagsgeschichte.yml +61 -11
  159. data/lib/multimedia_paradise/yaml/youtube/songs/songs.yml +5 -3
  160. data/multimedia_paradise.gemspec +1 -1
  161. data/test/testing_audio_player.rb +3 -3
  162. data/test/testing_file_duration.rb +5 -5
  163. metadata +45 -76
  164. data/lib/multimedia_paradise/audio/file_duration/constants.rb +0 -53
  165. data/lib/multimedia_paradise/audio/waveform/class.rb +0 -341
  166. data/lib/multimedia_paradise/audio/waveform/constants.rb +0 -38
  167. data/lib/multimedia_paradise/audio/waveform/log.rb +0 -101
  168. data/lib/multimedia_paradise/base/constants.rb +0 -19
  169. data/lib/multimedia_paradise/base/encoding.rb +0 -31
  170. data/lib/multimedia_paradise/base/misc.rb +0 -665
  171. data/lib/multimedia_paradise/base/namespace.rb +0 -36
  172. data/lib/multimedia_paradise/base/time.rb +0 -25
  173. data/lib/multimedia_paradise/constants/conversions.rb +0 -62
  174. data/lib/multimedia_paradise/constants/directory_constants.rb +0 -139
  175. data/lib/multimedia_paradise/constants/encodings.rb +0 -26
  176. data/lib/multimedia_paradise/constants/file_constants.rb +0 -176
  177. data/lib/multimedia_paradise/constants/misc.rb +0 -80
  178. data/lib/multimedia_paradise/constants/my_video_directory.rb +0 -30
  179. data/lib/multimedia_paradise/constants/namespace.rb +0 -14
  180. data/lib/multimedia_paradise/constants/newline.rb +0 -14
  181. data/lib/multimedia_paradise/constants/video_filetypes.rb +0 -27
  182. data/lib/multimedia_paradise/conversions/README.md +0 -2
  183. data/lib/multimedia_paradise/ffmpeg/README.md +0 -2
  184. data/lib/multimedia_paradise/gui/gtk2/multimedia_converter/multimedia_converter.rb +0 -33
  185. data/lib/multimedia_paradise/gui/gtk2/notebook.rb +0 -144
  186. data/lib/multimedia_paradise/gui/gtk2/play_video_from_my_collection/play_video_from_my_collection.rb +0 -43
  187. data/lib/multimedia_paradise/gui/gtk2/simple_play_widget/simple_play_widget.rb +0 -40
  188. data/lib/multimedia_paradise/gui/gtk2/widget_increase_or_decrease_audio/widget_increase_or_decrease_audio.rb +0 -42
  189. data/lib/multimedia_paradise/gui/gtk2/youtube_downloader/youtube_downloader.rb +0 -32
  190. data/lib/multimedia_paradise/gui/gtk3/lyrics/lyrics.rb +0 -0
  191. data/lib/multimedia_paradise/gui/gtk3/multimedia_converter/multimedia_converter.rb +0 -34
  192. data/lib/multimedia_paradise/gui/gtk3/playlist/playlist.rb +0 -34
  193. data/lib/multimedia_paradise/gui/gtk3/simple_play_widget/simple_play_widget.rb +0 -38
  194. data/lib/multimedia_paradise/toplevel_methods/analyze_audio_stream.rb +0 -31
  195. data/lib/multimedia_paradise/toplevel_methods/codecs.rb +0 -50
  196. data/lib/multimedia_paradise/toplevel_methods/copy_file.rb +0 -18
  197. data/lib/multimedia_paradise/toplevel_methods/delay_audio.rb +0 -31
  198. data/lib/multimedia_paradise/toplevel_methods/ensure_that_the_output_directory_exists.rb +0 -27
  199. data/lib/multimedia_paradise/toplevel_methods/has_audio.rb +0 -48
  200. data/lib/multimedia_paradise/toplevel_methods/increase_volume_of_this_audio_file.rb +0 -61
  201. data/lib/multimedia_paradise/toplevel_methods/is_a_multimedia_file.rb +0 -27
  202. data/lib/multimedia_paradise/toplevel_methods/is_audio_file.rb +0 -27
  203. data/lib/multimedia_paradise/toplevel_methods/is_image_file.rb +0 -31
  204. data/lib/multimedia_paradise/toplevel_methods/is_video_file.rb +0 -62
  205. data/lib/multimedia_paradise/toplevel_methods/merge_these_videos.rb +0 -106
  206. data/lib/multimedia_paradise/toplevel_methods/run_sys_command.rb +0 -30
  207. data/lib/multimedia_paradise/toplevel_methods/to_flac.rb +0 -30
  208. data/lib/multimedia_paradise/toplevel_methods/to_mp4.rb +0 -24
  209. /data/doc/{MergingVideoLectures.md → merging_video_lectures/merging_video_lectures.md} +0 -0
  210. /data/doc/{Readme_for_the_cut_audio_component.md → readme_for_the_cut_audio_component/Readme_for_the_cut_audio_component.md} +0 -0
  211. /data/lib/multimedia_paradise/yaml/{audio_formats.yml → audio_formats/audio_formats.yml} +0 -0
  212. /data/lib/multimedia_paradise/yaml/{image_formats.yml → image_formats/image_formats.yml} +0 -0
  213. /data/lib/multimedia_paradise/yaml/{lyrics.yml → lyrics/lyrics.yml} +0 -0
  214. /data/lib/multimedia_paradise/yaml/{music_genres.yml → music_genres/music_genres.yml} +0 -0
  215. /data/lib/multimedia_paradise/yaml/{song_tags.yml → song_tags/song_tags.yml} +0 -0
  216. /data/lib/multimedia_paradise/yaml/{use_this_video_player.yml → use_this_video_player/use_this_video_player.yml} +0 -0
  217. /data/lib/multimedia_paradise/yaml/{video_encoding_settings.yml → video_encoding_settings/video_encoding_settings.yml} +0 -0
  218. /data/lib/multimedia_paradise/yaml/{video_filter_aliases.yml → video_filter_aliases/video_filter_aliases.yml} +0 -0
@@ -19,6 +19,7 @@
19
19
  #
20
20
  # =========================================================================== #
21
21
  # require 'multimedia_paradise/audio/file_duration/file_duration.rb'
22
+ # MultimediaParadise.file_duration_of
22
23
  # MultimediaParadise.duration? '/home/x/songs/WetWetWet_Loveisallaround.mp3'
23
24
  # =========================================================================== #
24
25
  require 'multimedia_paradise/audio/base.rb'
@@ -27,16 +28,49 @@ module MultimediaParadise
27
28
 
28
29
  class FileDuration < ::MultimediaParadise::AudioBase # === MultimediaParadise::FileDuration
29
30
 
30
- require 'multimedia_paradise/audio/file_duration/constants.rb'
31
-
32
31
  begin
33
32
  require 'hours_to_seconds'
34
33
  rescue LoadError; end
35
34
 
35
+ # ========================================================================= #
36
+ # === NAMESPACE
37
+ # ========================================================================= #
38
+ NAMESPACE = inspect
39
+
40
+ # ========================================================================= #
41
+ # === AUDIO_DIR
42
+ # ========================================================================= #
43
+ AUDIO_DIR = SONG_DIR
44
+
45
+ # ========================================================================= #
46
+ # === DEFAULT_SONG
47
+ #
48
+ # We can use this song here to test this class.
49
+ # ========================================================================= #
50
+ DEFAULT_SONG = "#{AUDIO_DIR}AlexGaudino_DestinationUnkown.mp3"
51
+
52
+ # ========================================================================= #
53
+ # === FILE_NAME
54
+ # ========================================================================= #
55
+ FILE_NAME = File.basename(__FILE__)+': '
56
+
57
+ # ========================================================================= #
58
+ # === DEFAULT_REPORT_ALREADY
59
+ #
60
+ # If this constant is set to true then we will automatically report
61
+ # information on the commandline to the user.
62
+ # ========================================================================= #
63
+ DEFAULT_REPORT_ALREADY = true
64
+
65
+ # ========================================================================= #
66
+ # === MAIN_REGEX
67
+ # ========================================================================= #
68
+ MAIN_REGEX = /Duration: (\d\d:\d\d:\d\d.\d\d)/
69
+
36
70
  # ========================================================================= #
37
71
  # === USE_THIS_REGEX
38
72
  # ========================================================================= #
39
- USE_THIS_REGEX = /Duration: (\d\d:\d\d:\d\d.\d\d),/ # See: https://rubular.com/r/oTAPhuNYFTNB2w
73
+ USE_THIS_REGEX = /Duration: (\d\d:\d\d:\d\d.\d\d),/ # See: https://rubular.com/r/rD44DWZ6idNDK2
40
74
 
41
75
  # ========================================================================= #
42
76
  # === initialize
@@ -106,7 +140,41 @@ class FileDuration < ::MultimediaParadise::AudioBase # === MultimediaParadise::F
106
140
  # ======================================================================= #
107
141
  # === @internal_hash
108
142
  # ======================================================================= #
109
- @internal_hash = {}
143
+ reset_the_internal_variables
144
+ # ======================================================================= #
145
+ # === @use_colours
146
+ #
147
+ # Since as of May 2020 this class will make use of colours again.
148
+ # ======================================================================= #
149
+ set_use_colours
150
+ # ======================================================================= #
151
+ # === :be_verbose
152
+ # ======================================================================= #
153
+ set_be_verbose
154
+ # ======================================================================= #
155
+ # === :show_the_ffmpeg_command
156
+ # ======================================================================= #
157
+ @internal_hash[:show_the_ffmpeg_command] = false
158
+ end
159
+
160
+ # ========================================================================= #
161
+ # === do_show_the_ffmpeg_command
162
+ # ========================================================================= #
163
+ def do_show_the_ffmpeg_command
164
+ @internal_hash[:show_the_ffmpeg_command] = true
165
+ end
166
+
167
+ # ========================================================================= #
168
+ # === show_the_ffmpeg_command?
169
+ # ========================================================================= #
170
+ def show_the_ffmpeg_command?
171
+ @internal_hash[:show_the_ffmpeg_command]
172
+ end
173
+
174
+ # ========================================================================= #
175
+ # === reset_the_internal_variables
176
+ # ========================================================================= #
177
+ def reset_the_internal_variables
110
178
  # ======================================================================= #
111
179
  # === :work_on_this_file
112
180
  # ======================================================================= #
@@ -122,26 +190,16 @@ class FileDuration < ::MultimediaParadise::AudioBase # === MultimediaParadise::F
122
190
  # ======================================================================= #
123
191
  @internal_hash[:may_we_exit] = true
124
192
  # ======================================================================= #
125
- # === @total_duration
126
- # ======================================================================= #
127
- @total_duration = 0
128
- # ======================================================================= #
129
- # === @use_colours
130
- #
131
- # Since as of May 2020 this class will make use of colours again.
132
- # ======================================================================= #
133
- set_use_colours
134
- # ======================================================================= #
135
- # === :be_verbose
193
+ # === :total_duration
136
194
  # ======================================================================= #
137
- set_be_verbose
195
+ @internal_hash[:total_duration] = 0
138
196
  end
139
197
 
140
198
  # ========================================================================= #
141
199
  # === total_duration?
142
200
  # ========================================================================= #
143
201
  def total_duration?
144
- @total_duration
202
+ @internal_hash[:total_duration]
145
203
  end
146
204
 
147
205
  # ========================================================================= #
@@ -188,13 +246,6 @@ class FileDuration < ::MultimediaParadise::AudioBase # === MultimediaParadise::F
188
246
  @internal_hash[:mpeg_layer]
189
247
  end
190
248
 
191
- # ========================================================================= #
192
- # === reset_the_internal_hash
193
- # ========================================================================= #
194
- def reset_the_internal_hash
195
- @internal_hash.clear
196
- end
197
-
198
249
  # ========================================================================= #
199
250
  # === determine_the_file_duration_via_ffmpeg
200
251
  #
@@ -227,7 +278,7 @@ class FileDuration < ::MultimediaParadise::AudioBase # === MultimediaParadise::F
227
278
  i = '"'+i+'"'
228
279
  end
229
280
  cmd = "ffmpeg -i #{i} #{ERROR_LINE}"
230
- if be_verbose
281
+ if be_verbose and show_the_ffmpeg_command?
231
282
  e "#{rev}The following command will be run next:"
232
283
  e
233
284
  e ::Colours.slateblue(" #{cmd}")
@@ -304,10 +355,11 @@ class FileDuration < ::MultimediaParadise::AudioBase # === MultimediaParadise::F
304
355
  # ========================================================================= #
305
356
  def report_duration(
306
357
  this_file = main_file?,
307
- report_how = :verbose
358
+ report_how = :verbose,
359
+ be_verbose = be_verbose?
308
360
  ) # Can be :verbose or :compact
309
361
  length = length?
310
- if be_verbose?
362
+ if be_verbose
311
363
  case report_how
312
364
  when :verbose
313
365
  result = rev+
@@ -319,7 +371,7 @@ class FileDuration < ::MultimediaParadise::AudioBase # === MultimediaParadise::F
319
371
  if length.to_f > 60
320
372
  result = result.dup
321
373
  n_minutes = ( length.to_f / 60.0 ).round(1)
322
- result << ' ('+sfancy(n_minutes.to_s+' minutes')+')'
374
+ result << "#{rev} (#{sfancy(n_minutes.to_s+' minutes')}#{rev})"
323
375
  end
324
376
  opne result
325
377
  else
@@ -368,7 +420,7 @@ class FileDuration < ::MultimediaParadise::AudioBase # === MultimediaParadise::F
368
420
  # === reset_the_total_duration
369
421
  # ========================================================================= #
370
422
  def reset_the_total_duration
371
- @total_duration = 0
423
+ @internal_hash[:total_duration] = 0
372
424
  end
373
425
 
374
426
  # ========================================================================= #
@@ -483,11 +535,11 @@ class FileDuration < ::MultimediaParadise::AudioBase # === MultimediaParadise::F
483
535
  reset_the_total_duration # Reset it, just in case.
484
536
  _.each {|this_file|
485
537
  check_if_this_file_exists(this_file)
486
- reset_the_internal_hash
538
+ reset_the_internal_variables
487
539
  set_work_on_this_file(this_file) # Update the main "pointer" here.
488
540
  do_analyse_this_file(this_file)
489
541
  report_duration(this_file)
490
- @total_duration += duration? if duration?
542
+ @internal_hash[:total_duration] += duration? if duration?
491
543
  }
492
544
  report_the_total_duration
493
545
  end
@@ -541,60 +593,62 @@ class FileDuration < ::MultimediaParadise::AudioBase # === MultimediaParadise::F
541
593
 
542
594
  end
543
595
 
544
- # ========================================================================= #
545
- # === MultimediaParadise.report_duration_of
546
- #
547
- # This module-method will report in a compact way.
548
- #
549
- # Usage example:
550
- #
551
- # MultimediaParadise.report_duration_of('/Depot/Audio/foobar.mp3')
552
- #
553
- # ========================================================================= #
554
- def self.report_duration_of(this_file)
555
- if this_file.is_a? Array
556
- this_file.each {|entry| report_duration_of(entry) }
557
- else
558
- _ = MultimediaParadise::FileDuration.new(this_file)
559
- _.report_duration(:compact)
560
- end
596
+ # =========================================================================== #
597
+ # === MultimediaParadise.report_duration_of
598
+ #
599
+ # This module-method will report in a verbose manner way.
600
+ #
601
+ # Usage example:
602
+ #
603
+ # MultimediaParadise.report_duration_of('/Depot/Audio/foobar.mp3')
604
+ #
605
+ # =========================================================================== #
606
+ def self.report_duration_of(this_file)
607
+ if this_file.is_a? Array
608
+ this_file.each {|entry| report_duration_of(entry) }
609
+ else
610
+ _ = MultimediaParadise::FileDuration.new(this_file)
611
+ _.do_show_the_ffmpeg_command
612
+ _.report_duration(:compact)
561
613
  end
614
+ end
562
615
 
563
- # ========================================================================= #
564
- # === MultimediaParadise.return_duration_of_this_file
565
- # ========================================================================= #
566
- def self.return_duration_of_this_file(i)
567
- return ::MultimediaParadise::FileDuration.return_duration_of_this_file(i)
568
- end; self.instance_eval { alias duration? return_duration_of_this_file } # === MultimediaParadise.duration?
569
- self.instance_eval { alias length_of? return_duration_of_this_file } # === MultimediaParadise.length_of?
570
- self.instance_eval { alias file_duration_of return_duration_of_this_file } # === MultimediaParadise.file_duration_of
616
+ # =========================================================================== #
617
+ # === MultimediaParadise.return_duration_of_this_file
618
+ # =========================================================================== #
619
+ def self.return_duration_of_this_file(i)
620
+ return ::MultimediaParadise::FileDuration.return_duration_of_this_file(i)
621
+ end; self.instance_eval { alias duration? return_duration_of_this_file } # === MultimediaParadise.duration?
622
+ self.instance_eval { alias length_of? return_duration_of_this_file } # === MultimediaParadise.length_of?
623
+ self.instance_eval { alias file_duration_of return_duration_of_this_file } # === MultimediaParadise.file_duration_of
571
624
 
572
- # ========================================================================= #
573
- # === MultimediaParadise.file_duration_of
574
- #
575
- # This method will return, as number, the file duration of e. g. an
576
- # audio file. Other than that it is silent, so it will not output
577
- # anything on the commandline.
578
- #
579
- # Usage example:
580
- #
581
- # require 'multimedia_paradise/multimedia/file_duration.rb'
582
- #
583
- # MultimediaParadise.duration? '/home/x/songs/WetWetWet_Loveisallaround.mp3'
584
- # MultimediaParadise.length_of?('/home/x/songs/Veracocha_CarteBlancha.mp3')
585
- #
586
- # ========================================================================= #
587
- def self.file_duration_of(i)
588
- duration = ::MultimediaParadise::FileDuration.new(i) {
589
- :be_quiet_and_we_may_not_exit
590
- }.duration?
591
- return duration
592
- end
625
+ # =========================================================================== #
626
+ # === MultimediaParadise.file_duration_of
627
+ #
628
+ # This method will return, as number, the file duration of e. g. an
629
+ # audio file. Other than that it is silent, so it will not output
630
+ # anything on the commandline.
631
+ #
632
+ # Usage example:
633
+ #
634
+ # require 'multimedia_paradise/multimedia/file_duration.rb'
635
+ #
636
+ # MultimediaParadise.duration? '/home/x/songs/WetWetWet_Loveisallaround.mp3'
637
+ # MultimediaParadise.length_of?('/home/x/songs/Veracocha_CarteBlancha.mp3')
638
+ #
639
+ # =========================================================================== #
640
+ def self.file_duration_of(i)
641
+ duration = ::MultimediaParadise::FileDuration.new(i) {
642
+ :be_quiet_and_we_may_not_exit
643
+ }.duration?
644
+ return duration
645
+ end
593
646
 
594
647
  end
595
648
 
596
649
  if __FILE__ == $PROGRAM_NAME
597
- MultimediaParadise::FileDuration.new(ARGV)
650
+ alias e puts
651
+ MultimediaParadise.file_duration_of(ARGV)
598
652
  #_.report_duration # By default we will report in n seconds.
599
653
  # puts MultimediaParadise::FileDuration.new(ARGV[0]).duration
600
654
  end # duration /Depot/Test/073_Inception.avi
@@ -602,5 +656,5 @@ end # duration /Depot/Test/073_Inception.avi
602
656
  # duration /Depot/Downloads/Beethoven_Symphony7.flv.mp3
603
657
  # duration "/Downloads/Married.With.Children.Season.5(UKB-RG-BINGOWINGZ)/S05E10.avi"
604
658
  # duration bloodsport.avi
605
- # duration /Depot/Audio/WolfgangAmbros_ZwicktsMi.mp3
606
- # duration /Depot/j/foobar.mp3
659
+ # duration /Depot/j/foobar.mp3
660
+ # duration /home/x/songs/HansZimmer_LastSamurai_RoebeMix.mp3
@@ -10,11 +10,6 @@ module MultimediaParadise
10
10
 
11
11
  class Boogie < ::MultimediaParadise::Genre
12
12
 
13
- # ========================================================================= #
14
- # === NAMESPACE
15
- # ========================================================================= #
16
- NAMESPACE = inspect
17
-
18
13
  # ========================================================================= #
19
14
  # === initialize
20
15
  # ========================================================================= #
@@ -24,7 +19,7 @@ class Boogie < ::MultimediaParadise::Genre
24
19
  )
25
20
  super(i, run_already)
26
21
  set_yaml_file(BOOGIE_FILE)
27
- set_namespace(NAMESPACE)
22
+ infer_the_namespace
28
23
  run
29
24
  end
30
25
 
@@ -10,11 +10,6 @@ module MultimediaParadise
10
10
 
11
11
  class Concerts < ::MultimediaParadise::Genre
12
12
 
13
- # ========================================================================= #
14
- # === NAMESPACE
15
- # ========================================================================= #
16
- NAMESPACE = inspect
17
-
18
13
  # ========================================================================= #
19
14
  # === initialize
20
15
  # ========================================================================= #
@@ -24,7 +19,7 @@ class Concerts < ::MultimediaParadise::Genre
24
19
  )
25
20
  super(i, run_already)
26
21
  set_yaml_file(CONCERTS_SONGS_FILE)
27
- set_namespace(NAMESPACE)
22
+ infer_the_namespace
28
23
  run
29
24
  end
30
25
 
@@ -13,7 +13,7 @@ module Genres # === MultimediaParadise::Genres
13
13
  # ========================================================================= #
14
14
  # === GENRE_DIR
15
15
  # ========================================================================= #
16
- GENRE_DIR = "#{::MultimediaParadise.project_yaml_dir?}genres/"
16
+ GENRE_DIR = "#{MultimediaParadise.project_yaml_dir?}genres/"
17
17
 
18
18
  # ========================================================================= #
19
19
  # === TRANCE_FILE
@@ -10,11 +10,6 @@ module MultimediaParadise
10
10
 
11
11
  class Eurodance < ::MultimediaParadise::Genre
12
12
 
13
- # ========================================================================= #
14
- # === NAMESPACE
15
- # ========================================================================= #
16
- NAMESPACE = inspect
17
-
18
13
  # ========================================================================= #
19
14
  # === initialize
20
15
  # ========================================================================= #
@@ -24,7 +19,7 @@ class Eurodance < ::MultimediaParadise::Genre
24
19
  )
25
20
  super(i, run_already)
26
21
  set_yaml_file(EURODANCE_FILE)
27
- set_namespace(NAMESPACE)
22
+ infer_the_namespace
28
23
  run
29
24
  end
30
25
 
@@ -53,11 +53,6 @@ class Genre < ::MultimediaParadise::Base # === MultimediaParadise::Eurodance
53
53
  # ========================================================================= #
54
54
  DEFAULT_FILE = MultimediaParadise::Genres::EURODANCE_FILE
55
55
 
56
- # ========================================================================= #
57
- # === NAMESPACE
58
- # ========================================================================= #
59
- NAMESPACE = inspect
60
-
61
56
  # ========================================================================= #
62
57
  # === initialize
63
58
  # ========================================================================= #
@@ -82,8 +77,7 @@ class Genre < ::MultimediaParadise::Base # === MultimediaParadise::Eurodance
82
77
  # === @dataset
83
78
  # ======================================================================= #
84
79
  @dataset = nil
85
- set_commandline_arguments
86
- set_namespace
80
+ infer_the_namespace
87
81
  end
88
82
 
89
83
  # ========================================================================= #
@@ -118,22 +112,6 @@ class Genre < ::MultimediaParadise::Base # === MultimediaParadise::Eurodance
118
112
  e sfile(@yaml_file)
119
113
  end
120
114
 
121
- # ========================================================================= #
122
- # === set_commandline_arguments
123
- # ========================================================================= #
124
- def set_commandline_arguments(i = DEFAULT_FILE)
125
- i = [i] unless i.is_a? Array
126
- i = [DEFAULT_FILE] if i.compact.empty?
127
- @commandline_arguments = i
128
- end
129
-
130
- # ========================================================================= #
131
- # === set_namespace
132
- # ========================================================================= #
133
- def set_namespace(i = NAMESPACE)
134
- @namespace = i
135
- end
136
-
137
115
  # ========================================================================= #
138
116
  # === open_playlist_in_your_editor
139
117
  #
@@ -160,13 +138,24 @@ class Genre < ::MultimediaParadise::Base # === MultimediaParadise::Eurodance
160
138
  rescue ArgumentError # This clause happens when syck raises an error.
161
139
  @dataset = File.read(_)
162
140
  rescue Exception => error
163
- opnn; e 'An error happened on line '+__LINE__.to_s+'.'
141
+ opne 'An error happened on line '+__LINE__.to_s+'.'
164
142
  pp error
165
143
  pp error.class
166
144
  end
167
145
  sanitize_yaml_dataset # Must sanitize it.
168
146
  end
169
147
 
148
+ # ========================================================================= #
149
+ # === files?
150
+ #
151
+ # This method will return all remote files, aka URLs, in particular to
152
+ # youtube files. The user can then create a playlist from this or
153
+ # batch-download these files.
154
+ # ========================================================================= #
155
+ def files?
156
+ dataset?.values.map {|entry| entry[1] }
157
+ end
158
+
170
159
  # ========================================================================= #
171
160
  # === sanitize_yaml_dataset
172
161
  # ========================================================================= #
@@ -346,7 +335,7 @@ class Genre < ::MultimediaParadise::Base # === MultimediaParadise::Eurodance
346
335
  # ======================================================================= #
347
336
  _ = use_this_dataset # We assume that this will always be a Hash.
348
337
  n_entries = _.keys.size
349
- opnn; e simp(n_entries.to_s)+' entries were registered in the yaml file.'
338
+ opne simp(n_entries.to_s)+' entries were registered in the yaml file.'
350
339
  e
351
340
  _.each_pair.with_index {|inner_hash, index|
352
341
  key, _array = *inner_hash
@@ -439,12 +428,19 @@ class Genre < ::MultimediaParadise::Base # === MultimediaParadise::Eurodance
439
428
  @dataset
440
429
  end; alias full_dataset? dataset? # === full_dataset?
441
430
 
431
+ # ========================================================================= #
432
+ # === set_dataset
433
+ # ========================================================================= #
434
+ def set_dataset(i)
435
+ @dataset = i
436
+ end
437
+
442
438
  # ========================================================================= #
443
439
  # === return_all_remote_urls
444
440
  # ========================================================================= #
445
441
  def return_all_remote_urls
446
- dataset = @dataset
447
- dataset = dataset.map {|key, inner_array|
442
+ dataset = dataset?
443
+ dataset.map! {|key, inner_array|
448
444
  inner_array[1] # This is the URL.
449
445
  }
450
446
  return dataset
@@ -497,7 +493,7 @@ class Genre < ::MultimediaParadise::Base # === MultimediaParadise::Eurodance
497
493
  _ = dataset
498
494
  key = _.keys.first
499
495
  name_of_the_group = _[key][0]
500
- opnn; e
496
+ opne
501
497
  e ' Now downloading the song '+dodgerblue(name_of_the_song)+
502
498
  ' (Group: '+simp(name_of_the_group)+') from the URL '+sfancy(url)
503
499
  name_of_the_song = key.to_s.delete('!')
@@ -524,8 +520,8 @@ class Genre < ::MultimediaParadise::Base # === MultimediaParadise::Eurodance
524
520
  _ = name_of_the_group.tr(' ','_')+'-'+name_of_the_song.tr(' ','_')+
525
521
  '_Year_'+release_year+extension_name
526
522
  mv(new_file_name, _)
527
- opnn; e 'The file name now is `'+sfile(_)+'`, in the '\
528
- 'directory `'+sdir(store_here)+'`.'
523
+ opne rev+'The file name now is `'+sfile(_)+rev+'`, in the '\
524
+ 'directory `'+sdir(store_here)+rev+'`.'
529
525
  }
530
526
  end; alias download_remote_file download_remote_files # === download_remote_file
531
527
 
@@ -533,7 +529,9 @@ class Genre < ::MultimediaParadise::Base # === MultimediaParadise::Eurodance
533
529
  # === download_file_at_number
534
530
  #
535
531
  # Invocation example:
532
+ #
536
533
  # eurodance 62
534
+ #
537
535
  # ========================================================================= #
538
536
  def download_file_at_number(i)
539
537
  i = i.to_i
@@ -671,7 +669,7 @@ class Genre < ::MultimediaParadise::Base # === MultimediaParadise::Eurodance
671
669
  # ======================================================================= #
672
670
  into = self.class.inspect.to_s.split(':').last.downcase
673
671
  into = log_dir?+into+'.html'
674
- opnn; e "Now storing into the file `#{sfile(into)}`."
672
+ opne "#{rev}Now storing into the file `#{sfile(into)}#{rev}`."
675
673
  write_what_into(_, into)
676
674
  end
677
675
 
@@ -685,12 +683,17 @@ class Genre < ::MultimediaParadise::Base # === MultimediaParadise::Eurodance
685
683
  # ========================================================================= #
686
684
  # === MultimediaParadise::Genre[]
687
685
  # ========================================================================= #
688
- def self.[](i = '')
686
+ def self.[](i = ARGV)
689
687
  new(i)
690
688
  end
691
689
 
692
690
  end; end
693
691
 
694
692
  if __FILE__ == $PROGRAM_NAME
695
- MultimediaParadise::Genre.new(ARGV)
693
+ alias e puts
694
+ genre = MultimediaParadise::Genre.new(ARGV)
695
+ e 'Debugging output:'
696
+ e
697
+ pp genre
698
+ e
696
699
  end # genre
@@ -10,11 +10,6 @@ module MultimediaParadise
10
10
 
11
11
  class HipHop < ::MultimediaParadise::Genre
12
12
 
13
- # ========================================================================= #
14
- # === NAMESPACE
15
- # ========================================================================= #
16
- NAMESPACE = inspect
17
-
18
13
  # ========================================================================= #
19
14
  # === initialize
20
15
  # ========================================================================= #
@@ -24,7 +19,7 @@ class HipHop < ::MultimediaParadise::Genre
24
19
  )
25
20
  super(i, run_already)
26
21
  set_yaml_file(HIP_HOP_FILE)
27
- set_namespace(NAMESPACE)
22
+ infer_the_namespace
28
23
  run
29
24
  end
30
25
 
@@ -10,11 +10,6 @@ module MultimediaParadise
10
10
 
11
11
  class ItalianSongs < ::MultimediaParadise::Genre
12
12
 
13
- # ========================================================================= #
14
- # === NAMESPACE
15
- # ========================================================================= #
16
- NAMESPACE = inspect
17
-
18
13
  # ========================================================================= #
19
14
  # === initialize
20
15
  # ========================================================================= #
@@ -24,7 +19,7 @@ class ItalianSongs < ::MultimediaParadise::Genre
24
19
  )
25
20
  super(i, run_already)
26
21
  set_yaml_file(ITALIAN_SONGS_FILE)
27
- set_namespace(NAMESPACE)
22
+ infer_the_namespace
28
23
  run
29
24
  end
30
25
 
@@ -10,11 +10,6 @@ module MultimediaParadise
10
10
 
11
11
  class The1980s < ::MultimediaParadise::Genre
12
12
 
13
- # ========================================================================= #
14
- # === NAMESPACE
15
- # ========================================================================= #
16
- NAMESPACE = inspect
17
-
18
13
  # ========================================================================= #
19
14
  # === initialize
20
15
  # ========================================================================= #
@@ -24,7 +19,7 @@ class The1980s < ::MultimediaParadise::Genre
24
19
  )
25
20
  super(i, run_already)
26
21
  set_yaml_file(THE_1980s_FILE)
27
- set_namespace(NAMESPACE)
22
+ infer_the_namespace
28
23
  run
29
24
  end
30
25
 
@@ -10,11 +10,6 @@ module MultimediaParadise
10
10
 
11
11
  class Trance < ::MultimediaParadise::Genre
12
12
 
13
- # ========================================================================= #
14
- # === NAMESPACE
15
- # ========================================================================= #
16
- NAMESPACE = inspect
17
-
18
13
  # ========================================================================= #
19
14
  # === initialize
20
15
  # ========================================================================= #
@@ -24,12 +19,14 @@ class Trance < ::MultimediaParadise::Genre
24
19
  )
25
20
  super(i, run_already)
26
21
  set_yaml_file(TRANCE_FILE)
27
- set_namespace(NAMESPACE)
22
+ infer_the_namespace
28
23
  run
29
24
  end
30
25
 
31
26
  end; end
32
27
 
33
28
  if __FILE__ == $PROGRAM_NAME
34
- MultimediaParadise::Trance.new(ARGV)
29
+ alias e puts
30
+ trance = MultimediaParadise::Trance.new(ARGV)
31
+ e; trance.files?.each {|entry| e " #{entry}" }; e
35
32
  end # trance