multimedia_paradise 1.1.314

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of multimedia_paradise might be problematic. Click here for more details.

Files changed (417) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +2340 -0
  3. data/bin/audio_player +12 -0
  4. data/bin/auto_title +7 -0
  5. data/bin/convert_audio_to_mp4video_with_image +7 -0
  6. data/bin/cut_audio +7 -0
  7. data/bin/cut_multimedia +7 -0
  8. data/bin/extract_audio +7 -0
  9. data/bin/ffmpeg_merge +7 -0
  10. data/bin/file_duration +7 -0
  11. data/bin/gtk_radio +7 -0
  12. data/bin/loop_this_video +7 -0
  13. data/bin/merge_avi_files +7 -0
  14. data/bin/merge_mp3 +7 -0
  15. data/bin/missing_video_files +7 -0
  16. data/bin/movie_searcher +7 -0
  17. data/bin/mp3_to_opus +7 -0
  18. data/bin/mplayer_wrapper +7 -0
  19. data/bin/multimedia_information +11 -0
  20. data/bin/multimedia_paradise +9 -0
  21. data/bin/multimedia_paradise_sinatra +7 -0
  22. data/bin/play_random_simpsons_video +7 -0
  23. data/bin/playlist +7 -0
  24. data/bin/random_video +7 -0
  25. data/bin/remove_audio +9 -0
  26. data/bin/remove_last_second +7 -0
  27. data/bin/remove_subtitles +7 -0
  28. data/bin/tag_mp3_files +7 -0
  29. data/bin/to_aiff +10 -0
  30. data/bin/to_mp4 +7 -0
  31. data/bin/verbose_analyse_this_mp3_file_for_id3_tags +9 -0
  32. data/bin/video_codec +7 -0
  33. data/bin/video_information +8 -0
  34. data/bin/video_player +11 -0
  35. data/bin/video_to_images +7 -0
  36. data/bin/vp9 +9 -0
  37. data/bin/waveform +73 -0
  38. data/doc/CHANGELOG.md +44 -0
  39. data/doc/LINKS.md +6 -0
  40. data/doc/MOTIVATION_FOR_THIS_PROJECT.md +22 -0
  41. data/doc/MergingVideoLectures.md +12 -0
  42. data/doc/README.gen +2300 -0
  43. data/doc/Readme_for_the_cut_audio_component.md +168 -0
  44. data/doc/todo/todo_for_the_GUIs.md +0 -0
  45. data/doc/todo/todo_for_the_multimedia_paradise_project.md +111 -0
  46. data/lib/multimedia_paradise/audio/audio_player/audio_player.rb +83 -0
  47. data/lib/multimedia_paradise/audio/audio_player/constants.rb +136 -0
  48. data/lib/multimedia_paradise/audio/audio_player/menu.rb +164 -0
  49. data/lib/multimedia_paradise/audio/audio_player/misc.rb +718 -0
  50. data/lib/multimedia_paradise/audio/audio_player/reset.rb +77 -0
  51. data/lib/multimedia_paradise/audio/audio_player/tab.rb +35 -0
  52. data/lib/multimedia_paradise/audio/audio_tag_reader/README.md +7 -0
  53. data/lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb +503 -0
  54. data/lib/multimedia_paradise/audio/base.rb +67 -0
  55. data/lib/multimedia_paradise/audio/compress.rb +97 -0
  56. data/lib/multimedia_paradise/audio/create_m3u_playlist.rb +245 -0
  57. data/lib/multimedia_paradise/audio/extract_audio/constants.rb +37 -0
  58. data/lib/multimedia_paradise/audio/extract_audio/extract_audio.rb +417 -0
  59. data/lib/multimedia_paradise/audio/file_duration/constants.rb +53 -0
  60. data/lib/multimedia_paradise/audio/file_duration/file_duration.rb +602 -0
  61. data/lib/multimedia_paradise/audio/genres/boogie.rb +35 -0
  62. data/lib/multimedia_paradise/audio/genres/concerts.rb +35 -0
  63. data/lib/multimedia_paradise/audio/genres/constants.rb +53 -0
  64. data/lib/multimedia_paradise/audio/genres/eurodance.rb +35 -0
  65. data/lib/multimedia_paradise/audio/genres/genre.rb +696 -0
  66. data/lib/multimedia_paradise/audio/genres/hip_hop.rb +35 -0
  67. data/lib/multimedia_paradise/audio/genres/italian_songs.rb +35 -0
  68. data/lib/multimedia_paradise/audio/genres/the_1980s.rb +35 -0
  69. data/lib/multimedia_paradise/audio/genres/trance.rb +35 -0
  70. data/lib/multimedia_paradise/audio/lyrics_fetcher.rb +238 -0
  71. data/lib/multimedia_paradise/audio/merge_audio_files.rb +136 -0
  72. data/lib/multimedia_paradise/audio/modify_year_of_audio_file.rb +151 -0
  73. data/lib/multimedia_paradise/audio/n_audio_songs.rb +216 -0
  74. data/lib/multimedia_paradise/audio/play_all_audio_files.rb +122 -0
  75. data/lib/multimedia_paradise/audio/playlist/playlist.rb +1559 -0
  76. data/lib/multimedia_paradise/audio/remove_audio.rb +98 -0
  77. data/lib/multimedia_paradise/audio/remove_last_second.rb +83 -0
  78. data/lib/multimedia_paradise/audio/report_missing_id.rb +139 -0
  79. data/lib/multimedia_paradise/audio/streamripper/constants.rb +51 -0
  80. data/lib/multimedia_paradise/audio/streamripper/streamripper_wrapper.rb +279 -0
  81. data/lib/multimedia_paradise/audio/to_mp3.rb +138 -0
  82. data/lib/multimedia_paradise/audio/to_ogg.rb +104 -0
  83. data/lib/multimedia_paradise/audio/wav_to_mp3.rb +87 -0
  84. data/lib/multimedia_paradise/audio/waveform/class.rb +341 -0
  85. data/lib/multimedia_paradise/audio/waveform/constants.rb +38 -0
  86. data/lib/multimedia_paradise/audio/waveform/log.rb +101 -0
  87. data/lib/multimedia_paradise/autoinclude.rb +3 -0
  88. data/lib/multimedia_paradise/autoinclude_remove_audio.rb +6 -0
  89. data/lib/multimedia_paradise/base/base.rb +34 -0
  90. data/lib/multimedia_paradise/base/colours.rb +354 -0
  91. data/lib/multimedia_paradise/base/commandline_arguments.rb +52 -0
  92. data/lib/multimedia_paradise/base/constants.rb +19 -0
  93. data/lib/multimedia_paradise/base/encoding.rb +31 -0
  94. data/lib/multimedia_paradise/base/misc.rb +618 -0
  95. data/lib/multimedia_paradise/base/namespace.rb +36 -0
  96. data/lib/multimedia_paradise/base/time.rb +25 -0
  97. data/lib/multimedia_paradise/colours/colours.rb +82 -0
  98. data/lib/multimedia_paradise/commandline/menu.rb +498 -0
  99. data/lib/multimedia_paradise/configuration/play_zoomed.yml +1 -0
  100. data/lib/multimedia_paradise/constants/constants.rb +23 -0
  101. data/lib/multimedia_paradise/constants/conversions.rb +62 -0
  102. data/lib/multimedia_paradise/constants/directory_constants.rb +133 -0
  103. data/lib/multimedia_paradise/constants/encodings.rb +26 -0
  104. data/lib/multimedia_paradise/constants/file_constants.rb +171 -0
  105. data/lib/multimedia_paradise/constants/misc.rb +80 -0
  106. data/lib/multimedia_paradise/constants/my_video_directory.rb +30 -0
  107. data/lib/multimedia_paradise/constants/namespace.rb +14 -0
  108. data/lib/multimedia_paradise/constants/newline.rb +14 -0
  109. data/lib/multimedia_paradise/constants/video_filetypes.rb +27 -0
  110. data/lib/multimedia_paradise/constants/web_constants.rb +150 -0
  111. data/lib/multimedia_paradise/conversions/README.md +2 -0
  112. data/lib/multimedia_paradise/conversions/conversions.rb +930 -0
  113. data/lib/multimedia_paradise/css/project.css +15 -0
  114. data/lib/multimedia_paradise/data/asoundrc +12 -0
  115. data/lib/multimedia_paradise/ffmpeg/README.md +2 -0
  116. data/lib/multimedia_paradise/ffmpeg/ffmpeg.rb +620 -0
  117. data/lib/multimedia_paradise/gui/fox/play_from_radio_station.rb +75 -0
  118. data/lib/multimedia_paradise/gui/gosu/video_player/video_player.rb +109 -0
  119. data/lib/multimedia_paradise/gui/gtk2/lyrics/lyrics.rb +33 -0
  120. data/lib/multimedia_paradise/gui/gtk2/multimedia_converter/multimedia_converter.rb +33 -0
  121. data/lib/multimedia_paradise/gui/gtk2/notebook.rb +144 -0
  122. data/lib/multimedia_paradise/gui/gtk2/play_video_from_my_collection/play_video_from_my_collection.rb +43 -0
  123. data/lib/multimedia_paradise/gui/gtk2/simple_play_widget/README.md +12 -0
  124. data/lib/multimedia_paradise/gui/gtk2/simple_play_widget/simple_play_widget.rb +40 -0
  125. data/lib/multimedia_paradise/gui/gtk2/video_collection/video_collection.rb +56 -0
  126. data/lib/multimedia_paradise/gui/gtk2/widget_increase_or_decrease_audio/widget_increase_or_decrease_audio.rb +42 -0
  127. data/lib/multimedia_paradise/gui/gtk2/youtube_downloader/youtube_downloader.rb +32 -0
  128. data/lib/multimedia_paradise/gui/gtk3/change_metadata_widget/README.md +3 -0
  129. data/lib/multimedia_paradise/gui/gtk3/change_metadata_widget/change_metadata_widget.rb +150 -0
  130. data/lib/multimedia_paradise/gui/gtk3/cut_multimedia/cut_multimedia.rb +321 -0
  131. data/lib/multimedia_paradise/gui/gtk3/information_about_a_mp3_file/information_about_a_mp3_file.rb +421 -0
  132. data/lib/multimedia_paradise/gui/gtk3/lyrics/lyrics.rb +33 -0
  133. data/lib/multimedia_paradise/gui/gtk3/multimedia_converter/multimedia_converter.rb +34 -0
  134. data/lib/multimedia_paradise/gui/gtk3/multimedia_notebook/multimedia_notebook.rb +34 -0
  135. data/lib/multimedia_paradise/gui/gtk3/play_video_from_my_collection/play_video_from_my_collection.rb +34 -0
  136. data/lib/multimedia_paradise/gui/gtk3/playlist/playlist.rb +34 -0
  137. data/lib/multimedia_paradise/gui/gtk3/radio/misc.rb +487 -0
  138. data/lib/multimedia_paradise/gui/gtk3/radio/radio.rb +698 -0
  139. data/lib/multimedia_paradise/gui/gtk3/simple_play_widget/simple_play_widget.rb +38 -0
  140. data/lib/multimedia_paradise/gui/gtk3/sound_effect_widget/sound_effect_widget.rb +34 -0
  141. data/lib/multimedia_paradise/gui/gtk3/tag_mp3_files/connect_skeleton.rb +61 -0
  142. data/lib/multimedia_paradise/gui/gtk3/tag_mp3_files/create.rb +405 -0
  143. data/lib/multimedia_paradise/gui/gtk3/tag_mp3_files/misc.rb +1820 -0
  144. data/lib/multimedia_paradise/gui/gtk3/tag_mp3_files/tag_mp3_files.config +6 -0
  145. data/lib/multimedia_paradise/gui/gtk3/tag_mp3_files/tag_mp3_files.rb +66 -0
  146. data/lib/multimedia_paradise/gui/gtk3/video_collection/video_collection.rb +43 -0
  147. data/lib/multimedia_paradise/gui/gtk3/video_editor/video_editor.rb +34 -0
  148. data/lib/multimedia_paradise/gui/gtk3/video_player/video_player.rb +34 -0
  149. data/lib/multimedia_paradise/gui/gtk3/webcam_widget/webcam_widget.rb +425 -0
  150. data/lib/multimedia_paradise/gui/gtk3/widget_increase_or_decrease_audio/widget_increase_or_decrease_audio.rb +36 -0
  151. data/lib/multimedia_paradise/gui/gtk3/youtube_channels/youtube_channels.rb +210 -0
  152. data/lib/multimedia_paradise/gui/gtk3/youtube_downloader/youtube_downloader.rb +32 -0
  153. data/lib/multimedia_paradise/gui/gui_base.rb +92 -0
  154. data/lib/multimedia_paradise/gui/libui/change_metadata_widget/change_metadata_widget.rb +115 -0
  155. data/lib/multimedia_paradise/gui/libui/cut_multimedia/cut_multimedia.rb +119 -0
  156. data/lib/multimedia_paradise/gui/libui/lyrics/lyrics.rb +67 -0
  157. data/lib/multimedia_paradise/gui/libui/simple_play_widget/simple_play_widget.rb +119 -0
  158. data/lib/multimedia_paradise/gui/libui/tag_mp3_files/tag_mp3_files.rb +268 -0
  159. data/lib/multimedia_paradise/gui/libui/video_player/video_player.rb +81 -0
  160. data/lib/multimedia_paradise/gui/libui/widget_increase_or_decrease_audio/widget_increase_or_decrease_audio.rb +126 -0
  161. data/lib/multimedia_paradise/gui/libui/youtube_channels/youtube_channels.rb +116 -0
  162. data/lib/multimedia_paradise/gui/libui/youtube_downloader/youtube_downloader.rb +107 -0
  163. data/lib/multimedia_paradise/gui/shared_code/change_metadata_widget/change_metadata_widget_module.rb +538 -0
  164. data/lib/multimedia_paradise/gui/shared_code/cut_multimedia/cut_multimedia_module.rb +268 -0
  165. data/lib/multimedia_paradise/gui/shared_code/information_about_a_mp3_file/information_about_a_mp3_file_module.rb +120 -0
  166. data/lib/multimedia_paradise/gui/shared_code/lyrics/lyrics_module.rb +141 -0
  167. data/lib/multimedia_paradise/gui/shared_code/multimedia_converter/multimedia_converter_module.rb +478 -0
  168. data/lib/multimedia_paradise/gui/shared_code/multimedia_notebook/multimedia_notebook_module.rb +171 -0
  169. data/lib/multimedia_paradise/gui/shared_code/play_video_from_my_collection/play_video_from_my_collection_module.rb +464 -0
  170. data/lib/multimedia_paradise/gui/shared_code/playlist/playlist_module.rb +151 -0
  171. data/lib/multimedia_paradise/gui/shared_code/simple_play_widget/simple_play_widget_module.rb +257 -0
  172. data/lib/multimedia_paradise/gui/shared_code/sound_effect_widget/sound_effect_widget_module.rb +173 -0
  173. data/lib/multimedia_paradise/gui/shared_code/tag_mp3_files/tag_mp3_files_module.rb +73 -0
  174. data/lib/multimedia_paradise/gui/shared_code/video_editor/video_editor_module.rb +287 -0
  175. data/lib/multimedia_paradise/gui/shared_code/video_player/video_player_module.rb +185 -0
  176. data/lib/multimedia_paradise/gui/shared_code/widget_increase_or_decrease_audio/widget_increase_or_decrease_audio_module.rb +310 -0
  177. data/lib/multimedia_paradise/gui/shared_code/youtube_downloader/youtube_downloader_module.rb +339 -0
  178. data/lib/multimedia_paradise/gui/tk/tk_multimedia_wrapper.rb +60 -0
  179. data/lib/multimedia_paradise/help/help.rb +75 -0
  180. data/lib/multimedia_paradise/images/MULTIMEDIA.jpg +0 -0
  181. data/lib/multimedia_paradise/images/MULTIMEDIA_PARADISE_ID_TAG_GUI_IN_RUBY_GTK3.png +0 -0
  182. data/lib/multimedia_paradise/images/MULTIMEDIA_PARADISE_LOGO.png +0 -0
  183. data/lib/multimedia_paradise/images/UK_flag.png +0 -0
  184. data/lib/multimedia_paradise/images/US_flag.png +0 -0
  185. data/lib/multimedia_paradise/images/austrian_flag.png +0 -0
  186. data/lib/multimedia_paradise/images/french_flag.png +0 -0
  187. data/lib/multimedia_paradise/images/german_flag.png +0 -0
  188. data/lib/multimedia_paradise/images/radio_image.png +0 -0
  189. data/lib/multimedia_paradise/images/trance.png +0 -0
  190. data/lib/multimedia_paradise/java/AudioPlayer.class +0 -0
  191. data/lib/multimedia_paradise/java/AudioPlayer.java +103 -0
  192. data/lib/multimedia_paradise/java/README.md +3 -0
  193. data/lib/multimedia_paradise/misc/long_format_to_milliseconds_converter.rb +182 -0
  194. data/lib/multimedia_paradise/misc/milliseconds_to_long_format_converter.rb +186 -0
  195. data/lib/multimedia_paradise/multimedia/analyse_multimedia_file.rb +180 -0
  196. data/lib/multimedia_paradise/multimedia/avisynth/README.md +4 -0
  197. data/lib/multimedia_paradise/multimedia/avisynth/avisynth_code.avs +471 -0
  198. data/lib/multimedia_paradise/multimedia/base.rb +60 -0
  199. data/lib/multimedia_paradise/multimedia/chord.rb +174 -0
  200. data/lib/multimedia_paradise/multimedia/convert_audio_to_video_with_image.rb +171 -0
  201. data/lib/multimedia_paradise/multimedia/cut_multimedia/10_minutes_chop.rb +29 -0
  202. data/lib/multimedia_paradise/multimedia/cut_multimedia/15_minutes_chop.rb +29 -0
  203. data/lib/multimedia_paradise/multimedia/cut_multimedia/30_minutes_chop.rb +29 -0
  204. data/lib/multimedia_paradise/multimedia/cut_multimedia/5_minutes_chop.rb +29 -0
  205. data/lib/multimedia_paradise/multimedia/cut_multimedia/cut_multimedia.rb +2017 -0
  206. data/lib/multimedia_paradise/multimedia/cut_multimedia/evaluate_from_this_file.rb +79 -0
  207. data/lib/multimedia_paradise/multimedia/cut_multimedia/interactive_menu.rb +514 -0
  208. data/lib/multimedia_paradise/multimedia/interactive_shell.rb +84 -0
  209. data/lib/multimedia_paradise/multimedia/merge_multimedia.rb +125 -0
  210. data/lib/multimedia_paradise/multimedia/note.rb +500 -0
  211. data/lib/multimedia_paradise/multimedia/play_from_this_list.rb +163 -0
  212. data/lib/multimedia_paradise/multimedia/read_meta_tags.rb +173 -0
  213. data/lib/multimedia_paradise/multimedia/simulate_youtube_playlist.rb +209 -0
  214. data/lib/multimedia_paradise/multimedia/start_length_duration.rb +205 -0
  215. data/lib/multimedia_paradise/multimedia/video_downloader/video_downloader.rb +143 -0
  216. data/lib/multimedia_paradise/project/project.rb +47 -0
  217. data/lib/multimedia_paradise/requires/require_audio_files.rb +74 -0
  218. data/lib/multimedia_paradise/requires/require_cut_multimedia.rb +7 -0
  219. data/lib/multimedia_paradise/requires/require_extract_audio.rb +7 -0
  220. data/lib/multimedia_paradise/requires/require_file_duration.rb +7 -0
  221. data/lib/multimedia_paradise/requires/require_streamripper.rb +7 -0
  222. data/lib/multimedia_paradise/requires/require_the_audio_player.rb +7 -0
  223. data/lib/multimedia_paradise/requires/require_the_multimedia_paradise_project.rb +38 -0
  224. data/lib/multimedia_paradise/requires/require_the_sinatra_components.rb +7 -0
  225. data/lib/multimedia_paradise/requires/require_toplevel_methods_files.rb +25 -0
  226. data/lib/multimedia_paradise/requires/require_video_files.rb +25 -0
  227. data/lib/multimedia_paradise/requires/require_video_player.rb +7 -0
  228. data/lib/multimedia_paradise/sinatra/app.rb +311 -0
  229. data/lib/multimedia_paradise/sinatra/embeddable_interface.rb +379 -0
  230. data/lib/multimedia_paradise/sound_effects/README.md +12 -0
  231. data/lib/multimedia_paradise/sound_effects/cat_meow.mp3 +0 -0
  232. data/lib/multimedia_paradise/sound_effects/channel_opened.mp3 +0 -0
  233. data/lib/multimedia_paradise/sound_effects/phone_ring.mp3 +0 -0
  234. data/lib/multimedia_paradise/statistics/README.md +5 -0
  235. data/lib/multimedia_paradise/statistics/video.rb +84 -0
  236. data/lib/multimedia_paradise/toplevel_cut_audio.rb +16 -0
  237. data/lib/multimedia_paradise/toplevel_methods/analyze_audio_stream.rb +31 -0
  238. data/lib/multimedia_paradise/toplevel_methods/chop_into_segments_of_n_seconds_size.rb +32 -0
  239. data/lib/multimedia_paradise/toplevel_methods/chop_off_first_five_minutes.rb +22 -0
  240. data/lib/multimedia_paradise/toplevel_methods/chop_off_first_n_seconds.rb +92 -0
  241. data/lib/multimedia_paradise/toplevel_methods/chop_off_first_ten_minutes.rb +22 -0
  242. data/lib/multimedia_paradise/toplevel_methods/chop_off_first_two_minutes.rb +24 -0
  243. data/lib/multimedia_paradise/toplevel_methods/codecs.rb +50 -0
  244. data/lib/multimedia_paradise/toplevel_methods/copy_and_merge_this_video_n_times.rb +51 -0
  245. data/lib/multimedia_paradise/toplevel_methods/copy_file.rb +18 -0
  246. data/lib/multimedia_paradise/toplevel_methods/create_video_from_this_audio.rb +65 -0
  247. data/lib/multimedia_paradise/toplevel_methods/cut_from_to.rb +156 -0
  248. data/lib/multimedia_paradise/toplevel_methods/delay_audio.rb +31 -0
  249. data/lib/multimedia_paradise/toplevel_methods/denoise.rb +90 -0
  250. data/lib/multimedia_paradise/toplevel_methods/deshake.rb +43 -0
  251. data/lib/multimedia_paradise/toplevel_methods/e.rb +16 -0
  252. data/lib/multimedia_paradise/toplevel_methods/encode_this_video.rb +49 -0
  253. data/lib/multimedia_paradise/toplevel_methods/ensure_that_the_output_directory_exists.rb +27 -0
  254. data/lib/multimedia_paradise/toplevel_methods/esystem.rb +43 -0
  255. data/lib/multimedia_paradise/toplevel_methods/files_and_directories.rb +90 -0
  256. data/lib/multimedia_paradise/toplevel_methods/flip_and_rotate.rb +58 -0
  257. data/lib/multimedia_paradise/toplevel_methods/increase_volume_of_this_audio_file.rb +61 -0
  258. data/lib/multimedia_paradise/toplevel_methods/is_a_multimedia_file.rb +27 -0
  259. data/lib/multimedia_paradise/toplevel_methods/is_audio_file.rb +27 -0
  260. data/lib/multimedia_paradise/toplevel_methods/is_image_file.rb +31 -0
  261. data/lib/multimedia_paradise/toplevel_methods/is_on_roebe.rb +17 -0
  262. data/lib/multimedia_paradise/toplevel_methods/is_video_file.rb +62 -0
  263. data/lib/multimedia_paradise/toplevel_methods/merge_multimedia_file.rb +327 -0
  264. data/lib/multimedia_paradise/toplevel_methods/merge_these_videos.rb +105 -0
  265. data/lib/multimedia_paradise/toplevel_methods/misc.rb +885 -0
  266. data/lib/multimedia_paradise/toplevel_methods/n_local_videos.rb +56 -0
  267. data/lib/multimedia_paradise/toplevel_methods/opn.rb +24 -0
  268. data/lib/multimedia_paradise/toplevel_methods/output_directory.rb +59 -0
  269. data/lib/multimedia_paradise/toplevel_methods/player_in_use.rb +80 -0
  270. data/lib/multimedia_paradise/toplevel_methods/query_the_audio_codec_of_this_file.rb +24 -0
  271. data/lib/multimedia_paradise/toplevel_methods/radio.rb +360 -0
  272. data/lib/multimedia_paradise/toplevel_methods/rds.rb +24 -0
  273. data/lib/multimedia_paradise/toplevel_methods/return_all_video_files.rb +64 -0
  274. data/lib/multimedia_paradise/toplevel_methods/return_data_from_video_collection_file_for_this_entry.rb +38 -0
  275. data/lib/multimedia_paradise/toplevel_methods/return_duration_of_this_multimedia_file.rb +27 -0
  276. data/lib/multimedia_paradise/toplevel_methods/return_full_name_for_video_at_this_position.rb +54 -0
  277. data/lib/multimedia_paradise/toplevel_methods/return_path_to_random_simpsons_video_file.rb +43 -0
  278. data/lib/multimedia_paradise/toplevel_methods/return_random_video_file_from_the_video_collection.rb +73 -0
  279. data/lib/multimedia_paradise/toplevel_methods/return_screen_resolution.rb +24 -0
  280. data/lib/multimedia_paradise/toplevel_methods/run_sys_command.rb +30 -0
  281. data/lib/multimedia_paradise/toplevel_methods/scale_video.rb +27 -0
  282. data/lib/multimedia_paradise/toplevel_methods/set_title_of.rb +65 -0
  283. data/lib/multimedia_paradise/toplevel_methods/slow_down_this_video_file.rb +33 -0
  284. data/lib/multimedia_paradise/toplevel_methods/start_screencast.rb +70 -0
  285. data/lib/multimedia_paradise/toplevel_methods/subtitles.rb +59 -0
  286. data/lib/multimedia_paradise/toplevel_methods/to_flac.rb +30 -0
  287. data/lib/multimedia_paradise/toplevel_methods/to_mp4.rb +24 -0
  288. data/lib/multimedia_paradise/toplevel_methods/total_duration.rb +35 -0
  289. data/lib/multimedia_paradise/toplevel_methods/use_lame_codec.rb +32 -0
  290. data/lib/multimedia_paradise/toplevel_methods/video_dataset.rb +76 -0
  291. data/lib/multimedia_paradise/version/version.rb +28 -0
  292. data/lib/multimedia_paradise/video/all_videos.rb +101 -0
  293. data/lib/multimedia_paradise/video/capture_screen.rb +285 -0
  294. data/lib/multimedia_paradise/video/check_numbers.rb +215 -0
  295. data/lib/multimedia_paradise/video/columbo/columbo.rb +139 -0
  296. data/lib/multimedia_paradise/video/copy_missing_video_files.rb +293 -0
  297. data/lib/multimedia_paradise/video/copy_random_video.rb +98 -0
  298. data/lib/multimedia_paradise/video/correct_video_numbers.rb +278 -0
  299. data/lib/multimedia_paradise/video/create_dvd.rb +50 -0
  300. data/lib/multimedia_paradise/video/encode_video.rb +81 -0
  301. data/lib/multimedia_paradise/video/ffmpeg_options.rb +156 -0
  302. data/lib/multimedia_paradise/video/find_video/constants.rb +23 -0
  303. data/lib/multimedia_paradise/video/find_video/find_video.rb +493 -0
  304. data/lib/multimedia_paradise/video/fix_married_with_children_videos.rb +70 -0
  305. data/lib/multimedia_paradise/video/guess_video_name.rb +189 -0
  306. data/lib/multimedia_paradise/video/imdb_rating/imdb_rating.rb +141 -0
  307. data/lib/multimedia_paradise/video/mike_hammer/mike_hammer.rb +74 -0
  308. data/lib/multimedia_paradise/video/missing_video_files/missing_video_files.rb +286 -0
  309. data/lib/multimedia_paradise/video/movie_searcher.rb +281 -0
  310. data/lib/multimedia_paradise/video/mplayer_wrapper.rb +504 -0
  311. data/lib/multimedia_paradise/video/play_random_file.rb +91 -0
  312. data/lib/multimedia_paradise/video/play_random_realvideo.rb +87 -0
  313. data/lib/multimedia_paradise/video/prepare_video_lecture.rb +272 -0
  314. data/lib/multimedia_paradise/video/random_video.rb +310 -0
  315. data/lib/multimedia_paradise/video/registered_video_file.rb +131 -0
  316. data/lib/multimedia_paradise/video/remove_metadata.rb +52 -0
  317. data/lib/multimedia_paradise/video/rename_video_file.rb +149 -0
  318. data/lib/multimedia_paradise/video/report_local_videos.rb +106 -0
  319. data/lib/multimedia_paradise/video/report_missing_videos_in_the_yaml_file.rb +107 -0
  320. data/lib/multimedia_paradise/video/resolution.rb +159 -0
  321. data/lib/multimedia_paradise/video/simpsons.rb +129 -0
  322. data/lib/multimedia_paradise/video/speed_up_video.rb +135 -0
  323. data/lib/multimedia_paradise/video/split_this_video.rb +126 -0
  324. data/lib/multimedia_paradise/video/srt_regex.rb +211 -0
  325. data/lib/multimedia_paradise/video/store_available_video_files.rb +138 -0
  326. data/lib/multimedia_paradise/video/the_simpsons/README.md +9 -0
  327. data/lib/multimedia_paradise/video/the_simpsons/good_the_simpsons_episodes.rb +107 -0
  328. data/lib/multimedia_paradise/video/the_simpsons/the_simpsons.rb +82 -0
  329. data/lib/multimedia_paradise/video/video.rb +14 -0
  330. data/lib/multimedia_paradise/video/video_encoding_settings.rb +57 -0
  331. data/lib/multimedia_paradise/video/video_genres.rb +337 -0
  332. data/lib/multimedia_paradise/video/video_information.rb +443 -0
  333. data/lib/multimedia_paradise/video/video_metadata.rb +132 -0
  334. data/lib/multimedia_paradise/video/video_player.rb +581 -0
  335. data/lib/multimedia_paradise/video/video_renamer.rb +160 -0
  336. data/lib/multimedia_paradise/video/watermark.rb +290 -0
  337. data/lib/multimedia_paradise/video/youtube/youtube.rb +17 -0
  338. data/lib/multimedia_paradise/video/youtube_embedder.rb +235 -0
  339. data/lib/multimedia_paradise/www/GIS/GIS.cgi +147 -0
  340. data/lib/multimedia_paradise/www/HDMI/HDMI.cgi +34 -0
  341. data/lib/multimedia_paradise/www/TALES_FROM_THE_CRYPT.html +71 -0
  342. data/lib/multimedia_paradise/www/alsa/alsa.cgi +7 -0
  343. data/lib/multimedia_paradise/www/alsa/alsa.rb +309 -0
  344. data/lib/multimedia_paradise/www/alsa/alsa.sinatra +56 -0
  345. data/lib/multimedia_paradise/www/audacity.cgi +30 -0
  346. data/lib/multimedia_paradise/www/audio/audio.cgi +9 -0
  347. data/lib/multimedia_paradise/www/audio/audio.rb +2739 -0
  348. data/lib/multimedia_paradise/www/audio/audio.sinatra +56 -0
  349. data/lib/multimedia_paradise/www/avisynth/avisynth.cgi +172 -0
  350. data/lib/multimedia_paradise/www/best_voices/best_voices.cgi +60 -0
  351. data/lib/multimedia_paradise/www/cassette/cassette.cgi +723 -0
  352. data/lib/multimedia_paradise/www/codecs/codecs.cgi +95 -0
  353. data/lib/multimedia_paradise/www/componists/vivaldi.cgi +218 -0
  354. data/lib/multimedia_paradise/www/decibel.cgi +79 -0
  355. data/lib/multimedia_paradise/www/ffmpeg/ffmpeg.cgi +439 -0
  356. data/lib/multimedia_paradise/www/lame/lame.cgi +7 -0
  357. data/lib/multimedia_paradise/www/lame/lame.rb +101 -0
  358. data/lib/multimedia_paradise/www/lame/lame.sinatra +56 -0
  359. data/lib/multimedia_paradise/www/lilypond.cgi +96 -0
  360. data/lib/multimedia_paradise/www/lyrics/lyrics.cgi +49 -0
  361. data/lib/multimedia_paradise/www/midi/al_adagi.mid +0 -0
  362. data/lib/multimedia_paradise/www/play_songs.cgi +102 -0
  363. data/lib/multimedia_paradise/www/play_this_video_file.cgi +100 -0
  364. data/lib/multimedia_paradise/www/pulseaudio/pulseaudio.cgi +7 -0
  365. data/lib/multimedia_paradise/www/pulseaudio/pulseaudio.rb +168 -0
  366. data/lib/multimedia_paradise/www/pulseaudio/pulseaudio.sinatra +56 -0
  367. data/lib/multimedia_paradise/www/rhythmbox/rhythmbox.cgi +120 -0
  368. data/lib/multimedia_paradise/www/sound_theory.cgi +163 -0
  369. data/lib/multimedia_paradise/www/tv/tv.cgi +182 -0
  370. data/lib/multimedia_paradise/www/video/video.cgi +7 -0
  371. data/lib/multimedia_paradise/www/video/video.rb +7709 -0
  372. data/lib/multimedia_paradise/www/video/video.sinatra +52 -0
  373. data/lib/multimedia_paradise/www/web_streams.cgi +58 -0
  374. data/lib/multimedia_paradise/yaml/audio_formats.yml +14 -0
  375. data/lib/multimedia_paradise/yaml/best_songs_in_an_era/eurodance/top20.yml +28 -0
  376. data/lib/multimedia_paradise/yaml/game_shows/ruck_zuck/ruck_zuck.yml +25 -0
  377. data/lib/multimedia_paradise/yaml/genres/1980s.yml +198 -0
  378. data/lib/multimedia_paradise/yaml/genres/README.md +5 -0
  379. data/lib/multimedia_paradise/yaml/genres/boogie.yml +68 -0
  380. data/lib/multimedia_paradise/yaml/genres/concerts.yml +29 -0
  381. data/lib/multimedia_paradise/yaml/genres/eurodance.yml +456 -0
  382. data/lib/multimedia_paradise/yaml/genres/hip_hop.yml +49 -0
  383. data/lib/multimedia_paradise/yaml/genres/italian_songs.yml +53 -0
  384. data/lib/multimedia_paradise/yaml/genres/trance.yml +167 -0
  385. data/lib/multimedia_paradise/yaml/good_horror_movies/good_horror_movies.yml +12 -0
  386. data/lib/multimedia_paradise/yaml/good_movie_actors/good_movie_actors.yml +6 -0
  387. data/lib/multimedia_paradise/yaml/image_formats.yml +8 -0
  388. data/lib/multimedia_paradise/yaml/internal/README.md +2 -0
  389. data/lib/multimedia_paradise/yaml/internal/installed_binaries.yml +31 -0
  390. data/lib/multimedia_paradise/yaml/lyrics.yml +6275 -0
  391. data/lib/multimedia_paradise/yaml/movie_reviews/the_hateful_eight_september_2016.md +305 -0
  392. data/lib/multimedia_paradise/yaml/music_genres.yml +51 -0
  393. data/lib/multimedia_paradise/yaml/playlist.yml +127 -0
  394. data/lib/multimedia_paradise/yaml/radio/README.md +5 -0
  395. data/lib/multimedia_paradise/yaml/radio/radio_stations.yml +359 -0
  396. data/lib/multimedia_paradise/yaml/song_tags.yml +815 -0
  397. data/lib/multimedia_paradise/yaml/tales_from_the_crypt/tales_from_the_crypt.yml +418 -0
  398. data/lib/multimedia_paradise/yaml/tom_and_jerry/README.md +2 -0
  399. data/lib/multimedia_paradise/yaml/tom_and_jerry/tom_and_jerry_episodes.yml +27 -0
  400. data/lib/multimedia_paradise/yaml/tv_channels/tv_channels.yml +46 -0
  401. data/lib/multimedia_paradise/yaml/use_this_video_player.yml +1 -0
  402. data/lib/multimedia_paradise/yaml/video/video.yml +26 -0
  403. data/lib/multimedia_paradise/yaml/video_collection/video_collection.yml +1933 -0
  404. data/lib/multimedia_paradise/yaml/video_encoding_settings.yml +62 -0
  405. data/lib/multimedia_paradise/yaml/video_filter_aliases.yml +221 -0
  406. data/lib/multimedia_paradise/yaml/youtube/alltagsgeschichte/alltagsgeschichte.yml +172 -0
  407. data/lib/multimedia_paradise/yaml/youtube/songs/README.md +3 -0
  408. data/lib/multimedia_paradise/yaml/youtube/songs/songs.yml +6 -0
  409. data/lib/multimedia_paradise/yaml/youtube_playlist/youtube_playlist.yml +6 -0
  410. data/lib/multimedia_paradise.rb +5 -0
  411. data/multimedia_paradise.gemspec +76 -0
  412. data/test/testing_audio_player.rb +15 -0
  413. data/test/testing_ffmpeg_options.rb +14 -0
  414. data/test/testing_file_duration.rb +17 -0
  415. data/test/testing_modify_year_of_audio_file.rb +14 -0
  416. data/test/testing_multimedia_paradise_project.rb +151 -0
  417. metadata +581 -0
@@ -0,0 +1,723 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # http://localhost/programming/ruby/src/multimedia_paradise/lib/multimedia_paradise/www/cassette/cassette.cgi
6
+ # =========================================================================== #
7
+ require 'cyberweb/autoinclude'
8
+
9
+ english(:capitlaize) {
10
+ created_on '27.07.2022' # Wednesday.
11
+ autoextend
12
+ ruby_favicon
13
+
14
+ main_css '
15
+ @import url(\'https://fonts.googleapis.com/css?family=Roboto:500,700\');
16
+ *, *:before, *:after {
17
+ box-sizing: border-box;
18
+ }
19
+ body {
20
+ display: grid;
21
+ place-items: center;
22
+ min-height: 100vh;
23
+ background: black;
24
+ animation: static 2s steps(1) infinite;
25
+ }
26
+ .grain {
27
+ position: fixed;
28
+ width: 100%;
29
+ height: 100%;
30
+ animation: static 2s steps(1) infinite;
31
+ opacity: 0.4;
32
+ z-index: 11;
33
+ }
34
+ @keyframes static {
35
+ 0 {
36
+ background-position: 4900% 4500%;
37
+ }
38
+ 1 {
39
+ background-position: 5800% 2200%;
40
+ }
41
+ 2 {
42
+ background-position: 1400% 6500%;
43
+ }
44
+ 3 {
45
+ background-position: 3400% 2000%;
46
+ }
47
+ 4 {
48
+ background-position: 6700% 4300%;
49
+ }
50
+ 5 {
51
+ background-position: 7500% 200%;
52
+ }
53
+ 6 {
54
+ background-position: 3700% 9800%;
55
+ }
56
+ 7 {
57
+ background-position: 8800% 1800%;
58
+ }
59
+ 8 {
60
+ background-position: 4000% 9500%;
61
+ }
62
+ 9 {
63
+ background-position: 8700% 2500%;
64
+ }
65
+ 10 {
66
+ background-position: 7500% 6600%;
67
+ }
68
+ 11 {
69
+ background-position: 200% 1200%;
70
+ }
71
+ 12 {
72
+ background-position: 6900% 6000%;
73
+ }
74
+ 13 {
75
+ background-position: 7500% 400%;
76
+ }
77
+ 14 {
78
+ background-position: 9000% 800%;
79
+ }
80
+ 15 {
81
+ background-position: 7200% 3300%;
82
+ }
83
+ 16 {
84
+ background-position: 4400% 1700%;
85
+ }
86
+ 17 {
87
+ background-position: 4700% 7700%;
88
+ }
89
+ 18 {
90
+ background-position: 3300% 400%;
91
+ }
92
+ 19 {
93
+ background-position: 4200% 8600%;
94
+ }
95
+ 20 {
96
+ background-position: 100% 4500%;
97
+ }
98
+ 21 {
99
+ background-position: 500% 700%;
100
+ }
101
+ 22 {
102
+ background-position: 6400% 3300%;
103
+ }
104
+ 23 {
105
+ background-position: 500% 600%;
106
+ }
107
+ 24 {
108
+ background-position: 500% 7400%;
109
+ }
110
+ 25 {
111
+ background-position: 2500% 6600%;
112
+ }
113
+ 26 {
114
+ background-position: 1200% 1100%;
115
+ }
116
+ 27 {
117
+ background-position: 9300% 1000%;
118
+ }
119
+ 28 {
120
+ background-position: 4400% 800%;
121
+ }
122
+ 29 {
123
+ background-position: 7400% 4600%;
124
+ }
125
+ 30 {
126
+ background-position: 700% 1100%;
127
+ }
128
+ 31 {
129
+ background-position: 9000% 5100%;
130
+ }
131
+ 32 {
132
+ background-position: 1000% 3500%;
133
+ }
134
+ 33 {
135
+ background-position: 9300% 3900%;
136
+ }
137
+ 34 {
138
+ background-position: 5500% 7900%;
139
+ }
140
+ 35 {
141
+ background-position: 7100% 9500%;
142
+ }
143
+ 36 {
144
+ background-position: 6800% 2700%;
145
+ }
146
+ 37 {
147
+ background-position: 9100% 1700%;
148
+ }
149
+ 38 {
150
+ background-position: 9800% 1900%;
151
+ }
152
+ 39 {
153
+ background-position: 7800% 2100%;
154
+ }
155
+ 40 {
156
+ background-position: 9600% 8100%;
157
+ }
158
+ 41 {
159
+ background-position: 3900% 300%;
160
+ }
161
+ 42 {
162
+ background-position: 2500% 5600%;
163
+ }
164
+ 43 {
165
+ background-position: 3000% 100%;
166
+ }
167
+ 44 {
168
+ background-position: 9900% 3800%;
169
+ }
170
+ 45 {
171
+ background-position: 7700% 8900%;
172
+ }
173
+ 46 {
174
+ background-position: 6900% 3500%;
175
+ }
176
+ 47 {
177
+ background-position: 1700% 9900%;
178
+ }
179
+ 48 {
180
+ background-position: 1100% 8200%;
181
+ }
182
+ 49 {
183
+ background-position: 2500% 5600%;
184
+ }
185
+ 50 {
186
+ background-position: 4700% 3700%;
187
+ }
188
+ 51 {
189
+ background-position: 6500% 8700%;
190
+ }
191
+ 52 {
192
+ background-position: 900% 1600%;
193
+ }
194
+ 53 {
195
+ background-position: 1200% 7100%;
196
+ }
197
+ 54 {
198
+ background-position: 3200% 8900%;
199
+ }
200
+ 55 {
201
+ background-position: 3600% 7600%;
202
+ }
203
+ 56 {
204
+ background-position: 6400% 5800%;
205
+ }
206
+ 57 {
207
+ background-position: 3000% 9200%;
208
+ }
209
+ 58 {
210
+ background-position: 7600% 9000%;
211
+ }
212
+ 59 {
213
+ background-position: 7100% 6400%;
214
+ }
215
+ 60 {
216
+ background-position: 6500% 6300%;
217
+ }
218
+ 61 {
219
+ background-position: 9300% 5700%;
220
+ }
221
+ 62 {
222
+ background-position: 9200% 900%;
223
+ }
224
+ 63 {
225
+ background-position: 8300% 6000%;
226
+ }
227
+ 64 {
228
+ background-position: 9900% 2100%;
229
+ }
230
+ 65 {
231
+ background-position: 4000% 4900%;
232
+ }
233
+ 66 {
234
+ background-position: 3200% 4900%;
235
+ }
236
+ 67 {
237
+ background-position: 6100% 2000%;
238
+ }
239
+ 68 {
240
+ background-position: 7500% 2100%;
241
+ }
242
+ 69 {
243
+ background-position: 9700% 2000%;
244
+ }
245
+ 70 {
246
+ background-position: 1100% 8000%;
247
+ }
248
+ 71 {
249
+ background-position: 300% 2300%;
250
+ }
251
+ 72 {
252
+ background-position: 3400% 7200%;
253
+ }
254
+ 73 {
255
+ background-position: 8800% 8900%;
256
+ }
257
+ 74 {
258
+ background-position: 6200% 6700%;
259
+ }
260
+ 75 {
261
+ background-position: 2800% 6800%;
262
+ }
263
+ 76 {
264
+ background-position: 5500% 8700%;
265
+ }
266
+ 77 {
267
+ background-position: 6600% 4500%;
268
+ }
269
+ 78 {
270
+ background-position: 100% 5800%;
271
+ }
272
+ 79 {
273
+ background-position: 500% 8700%;
274
+ }
275
+ 80 {
276
+ background-position: 6200% 5000%;
277
+ }
278
+ 81 {
279
+ background-position: 6300% 800%;
280
+ }
281
+ 82 {
282
+ background-position: 4000% 4800%;
283
+ }
284
+ 83 {
285
+ background-position: 9700% 6200%;
286
+ }
287
+ 84 {
288
+ background-position: 9200% 9200%;
289
+ }
290
+ 85 {
291
+ background-position: 5800% 3100%;
292
+ }
293
+ 86 {
294
+ background-position: 7300% 100%;
295
+ }
296
+ 87 {
297
+ background-position: 1500% 8400%;
298
+ }
299
+ 88 {
300
+ background-position: 3500% 7500%;
301
+ }
302
+ 89 {
303
+ background-position: 5200% 8300%;
304
+ }
305
+ 90 {
306
+ background-position: 6800% 900%;
307
+ }
308
+ 91 {
309
+ background-position: 3900% 2400%;
310
+ }
311
+ 92 {
312
+ background-position: 5800% 4900%;
313
+ }
314
+ 93 {
315
+ background-position: 400% 9800%;
316
+ }
317
+ 94 {
318
+ background-position: 8600% 8800%;
319
+ }
320
+ 95 {
321
+ background-position: 1600% 4100%;
322
+ }
323
+ 96 {
324
+ background-position: 4800% 5200%;
325
+ }
326
+ 97 {
327
+ background-position: 300% 4100%;
328
+ }
329
+ 98 {
330
+ background-position: 9800% 1100%;
331
+ }
332
+ }
333
+ a {
334
+ position: fixed;
335
+ bottom: 0;
336
+ text-align: center;
337
+ width: 100%;
338
+ padding: 10px;
339
+ font-family: "Roboto", sans-serif;
340
+ color: rgba(0, 0, 0, 0.3);
341
+ z-index: 12;
342
+ }
343
+ .cassette {
344
+ width: 554px;
345
+ height: 350px;
346
+ background: #4b4b56;
347
+ border-radius: 10px;
348
+ border: 4px solid #353535;
349
+ position: relative;
350
+ }
351
+ @media (max-width: 600px) {
352
+ .cassette {
353
+ width: 300px;
354
+ height: 190px;
355
+ font-size: 0.55em;
356
+ }
357
+ }
358
+ .cassette:after {
359
+ display: block;
360
+ content: \'\';
361
+ width: 104%;
362
+ height: 30%;
363
+ margin-left: -2%;
364
+ background: #4b4b56;
365
+ border-radius: 10px;
366
+ bottom: 7%;
367
+ position: absolute;
368
+ z-index: -1;
369
+ border: 4px solid #353535;
370
+ }
371
+ .cassette:before {
372
+ display: block;
373
+ content: \'\';
374
+ width: 89%;
375
+ height: 4px;
376
+ margin: auto;
377
+ background: rgba(255, 255, 255, 0.1);
378
+ border-radius: 10px;
379
+ top: 3%;
380
+ position: relative;
381
+ }
382
+ .cassette .label {
383
+ width: 90%;
384
+ height: 64%;
385
+ position: relative;
386
+ margin: auto;
387
+ top: 7%;
388
+ border-radius: 8px;
389
+ box-shadow: inset 0 0 0 4px #353535;
390
+ background: linear-gradient(#e6584c 8%, #f8f8f8 8%, #f8f8f8 30%, #484848 30%, #484848 31.5%, #f8f8f8 31.5%, #f8f8f8 36%, #484848 36%, #484848 37.5%, #f8f8f8 37.5%, #f8f8f8 39%, #484848 39%, #484848 40.5%, #f8f8f8 40.5%, #f8f8f8 42%, #484848 42%, #484848 43.5%, #f8f8f8 43.5%, #f8f8f8 45%, #484848 45%, #484848 46.5%, #f8f8f8 46.5%, #f8f8f8 48%, #484848 48%, #484848 49.5%, #f8f8f8 49.5%, #f8f8f8 51%, #484848 51%, #484848 52.5%, #f8f8f8 52.5%, #f8f8f8 54%, #484848 54%, #484848 55.5%, #f8f8f8 55.5%, #f8f8f8 57%, #484848 57%, #484848 58.5%, #f8f8f8 58.5%, #f8f8f8 60%, #484848 60%, #484848 61.5%, #f8f8f8 61.5%, #f8f8f8 63%, #484848 63%, #484848 64.5%, #f8f8f8 64.5%, #f8f8f8 66%, #484848 66%, #484848 67.5%, #f8f8f8 67.5%, #f8f8f8 69%, #484848 69%, #484848 70.5%, #f8f8f8 70.5%, #f8f8f8 72%, #484848 72%, #484848 73.5%, #f8f8f8 73.5%, #f8f8f8 75%, #484848 75%, #484848 76.5%, #f8f8f8 76.5%, #f8f8f8 78%, #484848 78%, #484848 79.5%, #f8f8f8 79.5%, #f8f8f8 81%, #484848 81%, #484848 82.5%);
391
+ }
392
+ .cassette .label:before {
393
+ position: absolute;
394
+ display: block;
395
+ top: 12%;
396
+ left: 3%;
397
+ content: \'B\';
398
+ padding: 3px;
399
+ text-align: center;
400
+ width: 1.3em;
401
+ height: 1.3em;
402
+ color: #f8f8f8;
403
+ font-weight: bold;
404
+ font-size: 1.4em;
405
+ background: #4b4b56;
406
+ border-radius: 1px;
407
+ }
408
+ .cassette .label:after {
409
+ position: absolute;
410
+ display: block;
411
+ content: \'N.R. [\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0\00a0] ☐\fe0e IN ☒\fe0e OUT\';
412
+ font-weight: 700;
413
+ font-family: "Roboto", sans-serif;
414
+ font-size: 0.9em;
415
+ top: 22%;
416
+ right: 3%;
417
+ color: #4b4b56;
418
+ }
419
+ .cassette .label .cutout {
420
+ width: 70%;
421
+ height: 46%;
422
+ position: relative;
423
+ margin: auto;
424
+ top: 36%;
425
+ background: #4b4b56;
426
+ border-radius: 3px;
427
+ box-shadow: inset 0 0 0 4px #353535;
428
+ }
429
+ .cassette .label .cutout:before {
430
+ position: absolute;
431
+ display: block;
432
+ content: \'The Beatles - Best of\';
433
+ color: rgba(255, 255, 255, 0.8);
434
+ font-size: 0.85em;
435
+ font-weight: 500;
436
+ font-family: "Roboto", sans-serif;
437
+ bottom: -25%;
438
+ }
439
+ .cassette .label .cutout:after {
440
+ position: absolute;
441
+ display: block;
442
+ content: \'A 60\';
443
+ color: rgba(255, 255, 255, 0.8);
444
+ font-size: 1.5em;
445
+ font-weight: bold;
446
+ top: 100%;
447
+ right: 0;
448
+ background: #e6584c;
449
+ background-image: linear-gradient(90deg, #e6584c 44%, rgba(255, 255, 255, 0.8) 44%, rgba(255, 255, 255, 0.8) 45%, #e6584c 45%);
450
+ height: 36%;
451
+ padding: 1.2% 5%;
452
+ box-shadow: inset 0 0 0 8px #e6584c;
453
+ font-family: "Roboto", sans-serif;
454
+ }
455
+ .cassette .label .cutout .reel_hole {
456
+ position: absolute;
457
+ background: #adadad;
458
+ width: 20%;
459
+ top: 15%;
460
+ border: 3px solid #353535;
461
+ box-shadow: 0 0 0 3px #4b4b56, 0 0 0 5px #353535;
462
+ border-radius: 50%;
463
+ right: 5.5%;
464
+ }
465
+ .cassette .label .cutout .reel_hole:after {
466
+ content: \'\';
467
+ display: block;
468
+ padding-bottom: 100%;
469
+ box-shadow: inset 0 0 0 6px #adadad;
470
+ background: #353535;
471
+ border-radius: 50%;
472
+ }
473
+ .cassette .label .cutout .reel_hole:before {
474
+ position: absolute;
475
+ display: block;
476
+ content: \'\';
477
+ width: 100%;
478
+ height: 100%;
479
+ top: 0;
480
+ left: 0;
481
+ border-radius: 50%;
482
+ background: #8fe2ec;
483
+ transform: scale(0.75);
484
+ z-index: 10;
485
+ }
486
+ .cassette .label .cutout .reel_hole:first-of-type {
487
+ left: 5.5%;
488
+ }
489
+ .cassette .label .cutout .reel_hole .gear {
490
+ position: absolute;
491
+ width: 14%;
492
+ height: 86%;
493
+ background: #8fe2ec;
494
+ top: 50%;
495
+ left: 50%;
496
+ margin-left: -7%;
497
+ margin-top: -43%;
498
+ box-shadow: 0 0 0 2px #353535;
499
+ animation: gears 3.5s linear infinite alternate;
500
+ }
501
+ .cassette .label .cutout .reel_hole .gear:before, .cassette .label .cutout .reel_hole .gear:after {
502
+ display: block;
503
+ content: \'\';
504
+ position: absolute;
505
+ width: 100%;
506
+ height: 100%;
507
+ background: #8fe2ec;
508
+ top: 0;
509
+ left: 0;
510
+ box-shadow: 0 0 0 2px #353535;
511
+ transform: rotate(240deg);
512
+ }
513
+ .cassette .label .cutout .reel_hole .gear:after {
514
+ transform: rotate(120deg);
515
+ width: 220%;
516
+ top: 2%;
517
+ left: -75%;
518
+ background: none;
519
+ box-shadow: -2px -2px 0 0 #353535;
520
+ background-image: linear-gradient(90deg, #8fe2ec calc(50% - 1px), #353535 calc(50% - 1px), #353535 calc(50% + 1px), #e6584c calc(50% + 2px)), linear-gradient(#8fe2ec calc(100% - 2px), #353535 calc(100% - 2px));
521
+ background-size: 100% 50%, 50% 100%;
522
+ background-repeat: no-repeat;
523
+ }
524
+ @keyframes gears {
525
+ from {
526
+ transform: rotate(0deg);
527
+ }
528
+ to {
529
+ transform: rotate(2160deg);
530
+ }
531
+ }
532
+ .cassette .label .cutout .window {
533
+ position: absolute;
534
+ background: #8fe2ec;
535
+ width: 40%;
536
+ height: 68%;
537
+ top: 15%;
538
+ left: 30%;
539
+ border: 3px solid #353535;
540
+ overflow: hidden;
541
+ }
542
+ .cassette .label .cutout .window:after {
543
+ display: block;
544
+ position: absolute;
545
+ background: linear-gradient(transparent 13%, rgba(255, 255, 255, 0.4) 13%, rgba(255, 255, 255, 0.4) 24%, transparent 24%, transparent 34%, rgba(255, 255, 255, 0.4) 34%, rgba(255, 255, 255, 0.4) 50%, transparent 50%);
546
+ content: \'\';
547
+ width: 100%;
548
+ height: 100%;
549
+ }
550
+ .cassette .label .cutout .window .spool {
551
+ position: absolute;
552
+ top: -22%;
553
+ width: 70%;
554
+ background: #adadad;
555
+ border: 3px solid #353535;
556
+ border-radius: 50%;
557
+ box-shadow: 0 0 0 10px #626262, 0 0 0 13px #353535;
558
+ }
559
+ .cassette .label .cutout .window .spool:after {
560
+ content: \'\';
561
+ display: block;
562
+ padding-bottom: 100%;
563
+ }
564
+ .cassette .label .cutout .window .spool:first-of-type {
565
+ left: -64%;
566
+ animation: spooling 3.5s linear infinite alternate;
567
+ }
568
+ .cassette .label .cutout .window .spool:last-of-type {
569
+ right: -64%;
570
+ animation: spooling 3.5s linear infinite alternate-reverse;
571
+ }
572
+ @keyframes spooling {
573
+ from {
574
+ box-shadow: 0 0 0 0.5em #626262, 0 0 0 calc(0.5em + 3px) #353535;
575
+ }
576
+ to {
577
+ box-shadow: 0 0 0 5em #626262, 0 0 0 calc(5em + 3px) #353535;
578
+ }
579
+ }
580
+ .cassette .head {
581
+ width: 60%;
582
+ height: 25.5%;
583
+ position: absolute;
584
+ margin-left: 20%;
585
+ bottom: -4%;
586
+ }
587
+ .cassette .head:before, .cassette .head:after {
588
+ display: block;
589
+ content: \'\';
590
+ width: 70%;
591
+ height: 100%;
592
+ position: absolute;
593
+ background: #4b4b56;
594
+ border: 4px solid #353535;
595
+ background-image: linear-gradient(rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0.1) 100%);
596
+ background-repeat: no-repeat;
597
+ background-position: 15% 8%;
598
+ background-size: 100% 4px;
599
+ }
600
+ .cassette .head:before {
601
+ transform: skew(-15deg);
602
+ left: -8%;
603
+ border-right: none;
604
+ border-radius: 10px 0 0 10px;
605
+ box-shadow: inset 6px 0 0 0 #4b4b56;
606
+ }
607
+ .cassette .head:after {
608
+ transform: skew(15deg);
609
+ right: -8%;
610
+ border-left: none;
611
+ border-radius: 0 10px 10px 0;
612
+ box-shadow: inset -6px 0 0 0 #4b4b56;
613
+ }
614
+
615
+ .cassette
616
+ .screw:before {
617
+ content: \'\20e0\fe0e\';
618
+ font-size: 1.1em;
619
+ color: #353535;
620
+ font-weight: bold;
621
+ position: absolute;
622
+ right: 0;
623
+ bottom: 0;
624
+ }
625
+ .cassette .screw.i2 {
626
+ right: 1%;
627
+ }
628
+ .cassette .screw.i2:before {
629
+ transform: rotate(90deg);
630
+ }
631
+ .cassette .screw.i3 {
632
+ bottom: 1%;
633
+ }
634
+ .cassette .screw.i3:before {
635
+ transform: rotate(-30deg);
636
+ }
637
+ .cassette .screw.i4 {
638
+ right: 1%;
639
+ bottom: 1%;
640
+ }
641
+ .cassette .screw.i4:before {
642
+ transform: rotate(-90deg);
643
+ }
644
+ .cassette .screw.i5 {
645
+ left: calc(50% + 0.5em);
646
+ bottom: 9%;
647
+ }
648
+ .cassette .screw.i5:before {
649
+ transform: rotate(45deg);
650
+ }
651
+ .cassette .hole {
652
+ width: 5%;
653
+ background: #8fe2ec;
654
+ position: absolute;
655
+ border-radius: 50%;
656
+ border: 3px solid #353535;
657
+ bottom: 0;
658
+ left: 50%;
659
+ margin-left: -2.5%;
660
+ }
661
+ .cassette .hole:after {
662
+ content: \'\';
663
+ display: block;
664
+ padding-bottom: 100%;
665
+ }
666
+ .cassette .hole.i1 {
667
+ bottom: 0%;
668
+ left: 28%;
669
+ }
670
+ .cassette .hole.i2 {
671
+ bottom: 2%;
672
+ left: 38%;
673
+ }
674
+ .cassette .hole.i3 {
675
+ bottom: 0%;
676
+ left: 72%;
677
+ }
678
+ .cassette .hole.i4 {
679
+ bottom: 2%;
680
+ left: 62%;
681
+ }
682
+ '
683
+ body_css_class 'mar0px s2px padt2px VERDANAs'
684
+ body_css_style 'background-color: black'
685
+ font_size 'def'
686
+
687
+ doc('mar0px pad0px s0_6em') {
688
+ ee '
689
+ <div class="grain">
690
+ </div>
691
+ <div class="cassette">
692
+ <div class="head">
693
+ </div>
694
+ <div class="label">
695
+ <div class="cutout">
696
+ <div class="reel_hole">
697
+ <div class="gear">
698
+ </div>
699
+ </div>
700
+ <div class="reel_hole">
701
+ <div class="gear">
702
+ </div>
703
+ </div>
704
+ <div class="window">
705
+ <div class="spool">
706
+ </div>
707
+ <div class="spool">
708
+ </div>
709
+ </div>
710
+ </div>
711
+ </div>
712
+
713
+
714
+
715
+ <div class="accents">
716
+ <div class="hole i1"></div>
717
+ <div class="hole i2"></div>
718
+ <div class="hole i3"></div>
719
+ <div class="hole i4"></div>
720
+ </div>
721
+ </div>
722
+ '
723
+ }}