daydreamer-json commited on
Commit
b32dc46
1 Parent(s): d44e1e3
Files changed (3) hide show
  1. db/master.json +361 -1
  2. index.html +60 -54
  3. script.js +20 -7
db/master.json CHANGED
@@ -114,6 +114,18 @@
114
  "spotify": "1Ogp4yK6RFM50S1RKqU21b",
115
  "youtube": "UCdGCfJqGjqmIOkpskWVz8Jw"
116
  }
 
 
 
 
 
 
 
 
 
 
 
 
117
  }
118
  ],
119
  "codecs": [
@@ -143,7 +155,35 @@
143
  "bitDepth": 24,
144
  "sampleRate": 48000,
145
  "channelCount": 2,
146
- "encodeParams": null
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
  },
148
  {
149
  "uuid": "018d2821-51f1-7203-bd3d-34ff786250f3",
@@ -159,6 +199,20 @@
159
  "channelCount": 2,
160
  "encodeParams": "qaac64 --tvbr 127 -q 2 --rate keep --no-delay --gapless-mode 0 --threading"
161
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  {
163
  "uuid": "018d2821-51f2-75aa-856a-a02ff306eb55",
164
  "nameBasic": "HE-AAC",
@@ -173,6 +227,20 @@
173
  "channelCount": 2,
174
  "encodeParams": "qaac64 --cvbr 64 --he -q 2 --rate keep --gapless-mode 0 --threading"
175
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
  {
177
  "uuid": "018d5a94-8aac-740d-b5f7-4d9b87396715",
178
  "nameBasic": "Opus",
@@ -542,6 +610,298 @@
542
  "durationSamples": 29235967
543
  }
544
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
545
  }
546
  ]
547
  }
 
114
  "spotify": "1Ogp4yK6RFM50S1RKqU21b",
115
  "youtube": "UCdGCfJqGjqmIOkpskWVz8Jw"
116
  }
117
+ },
118
+ {
119
+ "uuid": "018dadeb-101f-7ae2-a287-ad5d4b98d011",
120
+ "mbid": "fbd0f271-dc3d-444a-868b-c97d3b861608",
121
+ "name": "Alva Gracia",
122
+ "nameLatin": null,
123
+ "nameFileName": null,
124
+ "link": {
125
+ "itunes": 1408806188,
126
+ "spotify": "3XIfUQhOkgdfKXzL6bUX07",
127
+ "youtube": "UCr4NUDFAd9wchdDk-EtQl7Q"
128
+ }
129
  }
130
  ],
131
  "codecs": [
 
155
  "bitDepth": 24,
156
  "sampleRate": 48000,
157
  "channelCount": 2,
158
+ "encodeParams": "flac -V -l 12 -b 4608 -m -r 8 -A subdivide_tukey(5)"
159
+ },
160
+ {
161
+ "uuid": "018dade4-df3d-7552-92f4-6babc27d7c2d",
162
+ "nameBasic": "FLAC",
163
+ "nameLong": "Free Lossless Audio Codec",
164
+ "extension": "flac",
165
+ "isCompress": true,
166
+ "isLossless": true,
167
+ "bitRateAvg": null,
168
+ "bitRateMax": 2116800,
169
+ "bitDepth": 24,
170
+ "sampleRate": 44100,
171
+ "channelCount": 2,
172
+ "encodeParams": "flac -V -l 12 -b 4608 -m -r 8 -A subdivide_tukey(5)"
173
+ },
174
+ {
175
+ "uuid": "018db181-e98a-78d1-acc3-84590681af8d",
176
+ "nameBasic": "FLAC",
177
+ "nameLong": "Free Lossless Audio Codec",
178
+ "extension": "flac",
179
+ "isCompress": true,
180
+ "isLossless": true,
181
+ "bitRateAvg": null,
182
+ "bitRateMax": 1411200,
183
+ "bitDepth": 16,
184
+ "sampleRate": 44100,
185
+ "channelCount": 2,
186
+ "encodeParams": "flac -V -l 12 -b 4608 -m -r 8 -A subdivide_tukey(5)"
187
  },
188
  {
189
  "uuid": "018d2821-51f1-7203-bd3d-34ff786250f3",
 
199
  "channelCount": 2,
200
  "encodeParams": "qaac64 --tvbr 127 -q 2 --rate keep --no-delay --gapless-mode 0 --threading"
201
  },
202
+ {
203
+ "uuid": "018dadbb-c8d6-7a2f-ab0c-67ccfbda28b0",
204
+ "nameBasic": "AAC-LC",
205
+ "nameLong": "Advanced Audio Coding - Low Complexity",
206
+ "extension": "m4a",
207
+ "isCompress": true,
208
+ "isLossless": false,
209
+ "bitRateAvg": 320000,
210
+ "bitRateMax": 384000,
211
+ "bitDepth": null,
212
+ "sampleRate": 44100,
213
+ "channelCount": 2,
214
+ "encodeParams": "qaac64 --tvbr 127 -q 2 --rate keep --no-delay --gapless-mode 0 --threading"
215
+ },
216
  {
217
  "uuid": "018d2821-51f2-75aa-856a-a02ff306eb55",
218
  "nameBasic": "HE-AAC",
 
227
  "channelCount": 2,
228
  "encodeParams": "qaac64 --cvbr 64 --he -q 2 --rate keep --gapless-mode 0 --threading"
229
  },
230
+ {
231
+ "uuid": "018dadbb-c8d6-7a2f-ab0c-67cd22beae91",
232
+ "nameBasic": "HE-AAC",
233
+ "nameLong": "Advanced Audio Coding - High Efficiency",
234
+ "extension": "m4a",
235
+ "isCompress": true,
236
+ "isLossless": false,
237
+ "bitRateAvg": 64000,
238
+ "bitRateMax": 72000,
239
+ "bitDepth": null,
240
+ "sampleRate": 44100,
241
+ "channelCount": 2,
242
+ "encodeParams": "qaac64 --cvbr 64 --he -q 2 --rate keep --gapless-mode 0 --threading"
243
+ },
244
  {
245
  "uuid": "018d5a94-8aac-740d-b5f7-4d9b87396715",
246
  "nameBasic": "Opus",
 
610
  "durationSamples": 29235967
611
  }
612
  ]
613
+ },
614
+ {
615
+ "uuid": "018dadbb-c8d6-7a2f-ab0c-67ca1174150f",
616
+ "mbid": null,
617
+ "releaseDate": "2022-02-10",
618
+ "title": "Emotions Like",
619
+ "titleLatin": null,
620
+ "artist": ["018dadeb-101f-7ae2-a287-ad5d4b98d011"],
621
+ "barCode": 0,
622
+ "isCompilation": false,
623
+ "copyright": "(C) 2022 NCS",
624
+ "link": {
625
+ "itunes": 1600594931,
626
+ "spotify": "4j3Nf5FXhfkkQg45VMR8kB"
627
+ },
628
+ "isAllTrackSameCodecs": true,
629
+ "codecs": [
630
+ {
631
+ "uuid": "018dade4-df3d-7552-92f4-6babc27d7c2d",
632
+ "isOriginal": true,
633
+ "path": "flac"
634
+ },
635
+ {
636
+ "uuid": "018dadbb-c8d6-7a2f-ab0c-67ccfbda28b0",
637
+ "isOriginal": false,
638
+ "path": "aac_320k"
639
+ },
640
+ {
641
+ "uuid": "018d5a94-8aac-740d-b5f7-4d9b87396715",
642
+ "isOriginal": false,
643
+ "path": "opus_144k"
644
+ },
645
+ {
646
+ "uuid": "018d5a94-8aac-740d-b5f7-4d9cc9b69c80",
647
+ "isOriginal": false,
648
+ "path": "opus_64k"
649
+ },
650
+ {
651
+ "uuid": "018dadbb-c8d6-7a2f-ab0c-67cd22beae91",
652
+ "isOriginal": false,
653
+ "path": "aac_64k"
654
+ }
655
+ ],
656
+ "isCoverArtsUseDefault": true,
657
+ "coverArts": null,
658
+ "coverArtPotatoWebp16pxBase64": "UklGRogAAABXRUJQVlA4IHwAAACwAgCdASoQABAAAsBMJbACdFQgFP6Vz2DJZk4TAEAA9nf6Nl24aeSn/h35Ew6k9s21LQiHfti34M/xDWoIJr1w+sWP0hQFVFfNUxPc1Rr6zx+oLqPmTtf5xgz4a0jQ+6IAMoZ9jYHScTu801+xX+HmAJTFZ5et7oprzwAA",
659
+ "tracks": [
660
+ {
661
+ "uuid": "018dadbb-c8d6-7a2f-ab0c-67cb223970ec",
662
+ "disc": 1,
663
+ "index": 1,
664
+ "title": "Emotions Like",
665
+ "titleLatin": null,
666
+ "titleFileName": null,
667
+ "artist": ["018dadeb-101f-7ae2-a287-ad5d4b98d011"],
668
+ "lyricist": null,
669
+ "composer": null,
670
+ "arranger": null,
671
+ "codecs": null,
672
+ "durationSamples": 6846000
673
+ }
674
+ ]
675
+ },
676
+ {
677
+ "uuid": "018dae76-ab7d-7287-a65c-50f5493a7456",
678
+ "mbid": "1d721d0c-82a7-4667-b28a-c58a2429e8e2",
679
+ "releaseDate": "2022-11-22",
680
+ "title": "planetarium",
681
+ "titleLatin": null,
682
+ "artist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
683
+ "barCode": 859758916831,
684
+ "isCompilation": false,
685
+ "copyright": "(C) 2022 Aqu3ra",
686
+ "link": {
687
+ "itunes": 1652622029,
688
+ "spotify": "0wrOe41JwHY2fTeueb9Cbu"
689
+ },
690
+ "isAllTrackSameCodecs": true,
691
+ "codecs": [
692
+ {
693
+ "uuid": "018db181-e98a-78d1-acc3-84590681af8d",
694
+ "isOriginal": true,
695
+ "path": "flac"
696
+ },
697
+ {
698
+ "uuid": "018dadbb-c8d6-7a2f-ab0c-67ccfbda28b0",
699
+ "isOriginal": false,
700
+ "path": "aac_320k"
701
+ },
702
+ {
703
+ "uuid": "018d5a94-8aac-740d-b5f7-4d9b87396715",
704
+ "isOriginal": false,
705
+ "path": "opus_144k"
706
+ },
707
+ {
708
+ "uuid": "018d5a94-8aac-740d-b5f7-4d9cc9b69c80",
709
+ "isOriginal": false,
710
+ "path": "opus_64k"
711
+ },
712
+ {
713
+ "uuid": "018dadbb-c8d6-7a2f-ab0c-67cd22beae91",
714
+ "isOriginal": false,
715
+ "path": "aac_64k"
716
+ }
717
+ ],
718
+ "isCoverArtsUseDefault": true,
719
+ "coverArts": null,
720
+ "coverArtPotatoWebp16pxBase64": "UklGRoAAAABXRUJQVlA4IHQAAAAQAgCdASoQABAAAsBMJbACdAEO+W9L0HFAAP75R85WcMwQulyASIsZfYcJSGfPgcYcdqBsf3bTqVyxaUpZ0mVG3pyqv8JZCXK3fkTEobJ/y3H+uaRf8Qmi4iF7dBbwk1zoNvHDgcYbTD8FNz4wsSUIPwAAAA==",
721
+ "tracks": [
722
+ {
723
+ "uuid": "018dae75-e118-7e89-bfaf-46d4f03a570d",
724
+ "disc": 1,
725
+ "index": 1,
726
+ "title": "Sleeping Awake",
727
+ "titleLatin": null,
728
+ "titleFileName": null,
729
+ "artist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
730
+ "lyricist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
731
+ "composer": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
732
+ "arranger": null,
733
+ "codecs": null,
734
+ "durationSamples": 9599019
735
+ },
736
+ {
737
+ "uuid": "018dae75-e118-7e89-bfaf-46d5fa064c3d",
738
+ "disc": 1,
739
+ "index": 2,
740
+ "title": "アイボリー",
741
+ "titleLatin": "Ivory",
742
+ "titleFileName": null,
743
+ "artist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
744
+ "lyricist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
745
+ "composer": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
746
+ "arranger": null,
747
+ "codecs": null,
748
+ "durationSamples": 8690668
749
+ },
750
+ {
751
+ "uuid": "018dae75-e118-7e89-bfaf-46d6038a8268",
752
+ "disc": 1,
753
+ "index": 3,
754
+ "title": "ロンリーユニバース",
755
+ "titleLatin": "Lonely Universe",
756
+ "titleFileName": null,
757
+ "artist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
758
+ "lyricist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
759
+ "composer": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
760
+ "arranger": null,
761
+ "codecs": null,
762
+ "durationSamples": 9657900
763
+ },
764
+ {
765
+ "uuid": "018dae75-e118-7e89-bfaf-46d7bf4c12af",
766
+ "disc": 1,
767
+ "index": 4,
768
+ "title": "メーデー",
769
+ "titleLatin": "Mayday",
770
+ "titleFileName": null,
771
+ "artist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
772
+ "lyricist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
773
+ "composer": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
774
+ "arranger": null,
775
+ "codecs": null,
776
+ "durationSamples": 9641865
777
+ },
778
+ {
779
+ "uuid": "018dae75-e118-7e89-bfaf-46d802fed938",
780
+ "disc": 1,
781
+ "index": 5,
782
+ "title": "ラムネ",
783
+ "titleLatin": "Ramune",
784
+ "titleFileName": null,
785
+ "artist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
786
+ "lyricist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
787
+ "composer": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
788
+ "arranger": null,
789
+ "codecs": null,
790
+ "durationSamples": 9426375
791
+ },
792
+ {
793
+ "uuid": "018dae75-e118-7e89-bfaf-46d9ad4b6697",
794
+ "disc": 1,
795
+ "index": 6,
796
+ "title": "ゴーストダンス",
797
+ "titleLatin": "Ghost Dance",
798
+ "titleFileName": null,
799
+ "artist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
800
+ "lyricist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
801
+ "composer": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
802
+ "arranger": null,
803
+ "codecs": null,
804
+ "durationSamples": 10079290
805
+ },
806
+ {
807
+ "uuid": "018dae75-e118-7e89-bfaf-46da55192a4c",
808
+ "disc": 1,
809
+ "index": 7,
810
+ "title": "シックス・フィート・アンダー",
811
+ "titleLatin": "Six Feet Under",
812
+ "titleFileName": null,
813
+ "artist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
814
+ "lyricist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
815
+ "composer": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
816
+ "arranger": null,
817
+ "codecs": null,
818
+ "durationSamples": 9497747
819
+ },
820
+ {
821
+ "uuid": "018dae75-e118-7e89-bfaf-46db82fdf937",
822
+ "disc": 1,
823
+ "index": 8,
824
+ "title": "ミッドナイトサン",
825
+ "titleLatin": "MidnightSun",
826
+ "titleFileName": null,
827
+ "artist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
828
+ "lyricist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
829
+ "composer": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
830
+ "arranger": null,
831
+ "codecs": null,
832
+ "durationSamples": 9523328
833
+ },
834
+ {
835
+ "uuid": "018dae75-e118-7e89-bfaf-46dce8f44275",
836
+ "disc": 1,
837
+ "index": 9,
838
+ "title": "Day&Night",
839
+ "titleLatin": null,
840
+ "titleFileName": null,
841
+ "artist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
842
+ "lyricist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
843
+ "composer": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
844
+ "arranger": null,
845
+ "codecs": null,
846
+ "durationSamples": 9235721
847
+ },
848
+ {
849
+ "uuid": "018dae75-e118-7e89-bfaf-46ddf81d0461",
850
+ "disc": 1,
851
+ "index": 10,
852
+ "title": "解けない夏",
853
+ "titleLatin": "Tokenai Natsu",
854
+ "titleFileName": null,
855
+ "artist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
856
+ "lyricist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
857
+ "composer": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
858
+ "arranger": null,
859
+ "codecs": null,
860
+ "durationSamples": 9525600
861
+ },
862
+ {
863
+ "uuid": "018dae75-e118-7e89-bfaf-46de48d8d5ea",
864
+ "disc": 1,
865
+ "index": 11,
866
+ "title": "アイスドロップ",
867
+ "titleLatin": "Ice Drop",
868
+ "titleFileName": null,
869
+ "artist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
870
+ "lyricist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
871
+ "composer": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
872
+ "arranger": null,
873
+ "codecs": null,
874
+ "durationSamples": 9916150
875
+ },
876
+ {
877
+ "uuid": "018dae75-e118-7e89-bfaf-46dfd37e561d",
878
+ "disc": 1,
879
+ "index": 12,
880
+ "title": "真夜中のダイバー",
881
+ "titleLatin": "Midnight Diver",
882
+ "titleFileName": null,
883
+ "artist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
884
+ "lyricist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
885
+ "composer": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
886
+ "arranger": null,
887
+ "codecs": null,
888
+ "durationSamples": 6968825
889
+ },
890
+ {
891
+ "uuid": "018dae75-e119-784d-93da-3566d8057f01",
892
+ "disc": 1,
893
+ "index": 13,
894
+ "title": "Namioto",
895
+ "titleLatin": null,
896
+ "titleFileName": null,
897
+ "artist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
898
+ "lyricist": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
899
+ "composer": ["018d286b-9507-70d9-b4cd-17416f6d8d64"],
900
+ "arranger": null,
901
+ "codecs": null,
902
+ "durationSamples": 8424000
903
+ }
904
+ ]
905
  }
906
  ]
907
  }
index.html CHANGED
@@ -38,7 +38,11 @@
38
  <div id="mainContainer" class="container px-4 my-4">
39
  <h1 class="user-select-none text-center">discography_v2_cdn_front</h1>
40
  <hr class="my-4">
41
- <button id="showSettingsModalButton" class="btn btn-primary" type="button" data-bs-toggle="modal" data-bs-target="#settingsModal"><i class="bi bi-gear-wide-connected me-1"></i>Settings</button>
 
 
 
 
42
  <div class="modal fade user-select-none" id="settingsModal" tabindex="-1">
43
  <div class="modal-dialog modal-dialog-scrollable">
44
  <div class="modal-content">
@@ -66,7 +70,7 @@
66
  </div>
67
  </div>
68
  <hr class="my-4">
69
- <h3 class="mb-3 user-select-none">Album List</h3>
70
  <div class="fetchingDataNowLabel user-select-none d-none">
71
  <div class="d-inline-flex align-items-center mb-3">
72
  <div class="spinner-border text-primary me-2" role="status">
@@ -77,7 +81,7 @@
77
  </div>
78
  <div id="albumAllCardGroup" class="row row-cols-2 row-cols-md-3 row-cols-lg-4 row-cols-xl-5 g-4 user-select-none"></div>
79
  <hr class="my-4">
80
- <h3 class="mb-3 user-select-none">Track List</h3>
81
  <div class="fetchingDataNowLabel user-select-none d-none">
82
  <div class="d-inline-flex align-items-center mb-3">
83
  <div class="spinner-border text-primary me-2" role="status">
@@ -101,57 +105,59 @@
101
  <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
102
  </div>
103
  <div class="modal-body">
104
- <h3>Metadata</h3>
105
- <h4>General</h4>
106
- <table class="table table-sm table-responsive table-hover table-borderless align-middle">
107
- <tbody>
108
- <tr>
109
- <td>Album Title</td>
110
- <td id="albumInfoModal-metadataTable-albumTitle">---</td>
111
- </tr>
112
- <tr>
113
- <td>Album Artist</td>
114
- <td id="albumInfoModal-metadataTable-albumArtist">---</td>
115
- </tr>
116
- <tr>
117
- <td>Album Released</td>
118
- <td id="albumInfoModal-metadataTable-albumReleaseDate">YYYY/MM/DD</td>
119
- </tr>
120
- <tr>
121
- <td>Album Barcode</td>
122
- <td id="albumInfoModal-metadataTable-albumBarcode">Sample Number</td>
123
- </tr>
124
- <tr>
125
- <td>Album Copyright</td>
126
- <td id="albumInfoModal-metadataTable-albumCopyright">---</td>
127
- </tr>
128
- </tbody>
129
- </table>
130
- <h4>Track List</h4>
131
- <div id="albumInfoModal-trackAllListGroup" class="list-group user-select-none mb-4">
132
- <!-- <button type="button" class="list-group-item list-group-item-action d-flex" disabled>
133
- <div class="flex-fill w-100">Artist</div>
134
- <div class="flex-fill w-100">Track</div>
135
- </button> -->
136
- </div>
137
- <h4>External Links</h4>
138
- <table id="albumInfoModal-externalLinkTableRoot" class="table table-sm table-responsive table-hover table-borderless align-middle">
139
- <tbody id="albumInfoModal-externalLinkTable">
140
- </tbody>
141
- </table>
142
- <h4>Cover Artwork Images</h4>
143
- <div class="mb-3" id="albumInfoModal-coverArtLinkDiv">
144
- </div>
145
- <div id="debugAreaSection" class="d-none">
146
- <h3>Debug Area</h3>
147
- <div class="accordion" id="albumInfoModal-DebugAcd">
148
- <div class="accordion-item">
149
- <h2 class="accordion-header">
150
- <button class="accordion-button collapsed user-select-none" type="button" data-bs-toggle="collapse" data-bs-target="#albumInfoModal-DebugAcdInCollapse">Parsed data output (album)</button>
151
- </h2>
152
- <div id="albumInfoModal-DebugAcdInCollapse" class="accordion-collapse collapse" data-bs-parent="#albumInfoModal-DebugAcd">
153
- <div class="accordion-body">
154
- <pre class=""><code id="albumInfoModal-DebugAcdOutputEl"></code></pre>
 
 
155
  </div>
156
  </div>
157
  </div>
 
38
  <div id="mainContainer" class="container px-4 my-4">
39
  <h1 class="user-select-none text-center">discography_v2_cdn_front</h1>
40
  <hr class="my-4">
41
+ <div id="topMenuButtonContainer" class="text-center">
42
+ <a class="btn btn-primary mx-1" href="#albumAllListTitleLabel" role="button">Album List</a>
43
+ <a class="btn btn-primary mx-1" href="#trackAllListTitleLabel" role="button">Track List</a>
44
+ <button id="showSettingsModalButton" class="btn btn-primary mx-1" type="button" data-bs-toggle="modal" data-bs-target="#settingsModal"><!-- <i class="bi bi-gear-wide-connected me-1"></i> -->Settings</button>
45
+ </div>
46
  <div class="modal fade user-select-none" id="settingsModal" tabindex="-1">
47
  <div class="modal-dialog modal-dialog-scrollable">
48
  <div class="modal-content">
 
70
  </div>
71
  </div>
72
  <hr class="my-4">
73
+ <h3 id="albumAllListTitleLabel" class="mb-3 user-select-none">Album List</h3>
74
  <div class="fetchingDataNowLabel user-select-none d-none">
75
  <div class="d-inline-flex align-items-center mb-3">
76
  <div class="spinner-border text-primary me-2" role="status">
 
81
  </div>
82
  <div id="albumAllCardGroup" class="row row-cols-2 row-cols-md-3 row-cols-lg-4 row-cols-xl-5 g-4 user-select-none"></div>
83
  <hr class="my-4">
84
+ <h3 id="trackAllListTitleLabel" class="mb-3 user-select-none">Track List</h3>
85
  <div class="fetchingDataNowLabel user-select-none d-none">
86
  <div class="d-inline-flex align-items-center mb-3">
87
  <div class="spinner-border text-primary me-2" role="status">
 
105
  <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
106
  </div>
107
  <div class="modal-body">
108
+ <div id="albumInfoModalContent" class="bg-transparent position-relative">
109
+ <h3>Metadata</h3>
110
+ <h4>General</h4>
111
+ <table class="table table-sm table-responsive table-hover table-borderless align-middle">
112
+ <tbody>
113
+ <tr>
114
+ <td>Album Title</td>
115
+ <td id="albumInfoModal-metadataTable-albumTitle">---</td>
116
+ </tr>
117
+ <tr>
118
+ <td>Album Artist</td>
119
+ <td id="albumInfoModal-metadataTable-albumArtist">---</td>
120
+ </tr>
121
+ <tr>
122
+ <td>Album Released</td>
123
+ <td id="albumInfoModal-metadataTable-albumReleaseDate">YYYY/MM/DD</td>
124
+ </tr>
125
+ <tr>
126
+ <td>Album Barcode</td>
127
+ <td id="albumInfoModal-metadataTable-albumBarcode">Sample Number</td>
128
+ </tr>
129
+ <tr>
130
+ <td>Album Copyright</td>
131
+ <td id="albumInfoModal-metadataTable-albumCopyright">---</td>
132
+ </tr>
133
+ </tbody>
134
+ </table>
135
+ <h4>Track List</h4>
136
+ <div id="albumInfoModal-trackAllListGroup" class="list-group user-select-none mb-4">
137
+ <!-- <button type="button" class="list-group-item list-group-item-action d-flex" disabled>
138
+ <div class="flex-fill w-100">Artist</div>
139
+ <div class="flex-fill w-100">Track</div>
140
+ </button> -->
141
+ </div>
142
+ <h4>External Links</h4>
143
+ <table id="albumInfoModal-externalLinkTableRoot" class="table table-sm table-responsive table-hover table-borderless align-middle">
144
+ <tbody id="albumInfoModal-externalLinkTable">
145
+ </tbody>
146
+ </table>
147
+ <h4>Cover Artwork Images</h4>
148
+ <div class="mb-3" id="albumInfoModal-coverArtLinkDiv">
149
+ </div>
150
+ <div id="debugAreaSection" class="d-none">
151
+ <h3>Debug Area</h3>
152
+ <div class="accordion" id="albumInfoModal-DebugAcd">
153
+ <div class="accordion-item">
154
+ <h2 class="accordion-header">
155
+ <button class="accordion-button collapsed user-select-none" type="button" data-bs-toggle="collapse" data-bs-target="#albumInfoModal-DebugAcdInCollapse">Parsed data output (album)</button>
156
+ </h2>
157
+ <div id="albumInfoModal-DebugAcdInCollapse" class="accordion-collapse collapse" data-bs-parent="#albumInfoModal-DebugAcd">
158
+ <div class="accordion-body">
159
+ <pre class=""><code id="albumInfoModal-DebugAcdOutputEl"></code></pre>
160
+ </div>
161
  </div>
162
  </div>
163
  </div>
script.js CHANGED
@@ -188,8 +188,8 @@ function loadTrackInfoModal (trackUuid) {
188
  document.getElementById('trackInfoModal-metadataTable-artists').setAttribute('data-bs-toggle', 'tooltip');
189
  document.getElementById('trackInfoModal-metadataTable-artists').setAttribute('data-bs-title', trackParsedObject.artist.map((obj) => {if (obj.nameLatin !== null) {return obj.nameLatin} else {return obj.name}}).join(', '));
190
  } else {
191
- document.getElementById('trackInfoModal-metadataTable-artistsLatin').removeAttribute('data-bs-toggle');
192
- document.getElementById('trackInfoModal-metadataTable-artistsLatin').removeAttribute('data-bs-title');
193
  }
194
  if (trackParsedObject.lyricist === null) {
195
  document.getElementById('trackInfoModal-metadataTable-lyricist').parentNode.classList.add('d-none');
@@ -237,7 +237,7 @@ function loadTrackInfoModal (trackUuid) {
237
  }
238
  }
239
  document.getElementById('trackInfoModal-metadataTable-trackDurationReadable').innerHTML = msecToReadableTime(trackParsedObject.durationMsecs);
240
- document.getElementById('trackInfoModal-metadataTable-trackDurationMsec').innerHTML = `${trackParsedObject.durationMsecs} ms`;
241
  document.getElementById('trackInfoModal-metadataTable-trackDurationSamples').innerHTML = `${trackParsedObject.durationSamples} samples`;
242
  document.getElementById('trackInfoModal-metadataTable-albumTitle').innerHTML = albumParsedObject.title;
243
  if (albumParsedObject.titleLatin === null) {
@@ -369,6 +369,8 @@ function loadTrackInfoModal (trackUuid) {
369
  const bootstrapTooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]');
370
  bootstrapTooltipList = [...bootstrapTooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl));
371
  document.getElementById('trackInfoModal-DebugAcdOutputEl').innerHTML = JSON.stringify(albumParsedObject, '', ' ');
 
 
372
  const trackInfoModal = new bootstrap.Modal(document.getElementById('trackInfoModal'));
373
  trackInfoModal.show();
374
  }
@@ -389,8 +391,8 @@ function loadTrackInfoModal2 (trackUuid) {
389
  document.getElementById('trackInfoModal2-metadataTable-artists').setAttribute('data-bs-toggle', 'tooltip');
390
  document.getElementById('trackInfoModal2-metadataTable-artists').setAttribute('data-bs-title', trackParsedObject.artist.map((obj) => {if (obj.nameLatin !== null) {return obj.nameLatin} else {return obj.name}}).join(', '));
391
  } else {
392
- document.getElementById('trackInfoModal2-metadataTable-artistsLatin').removeAttribute('data-bs-toggle');
393
- document.getElementById('trackInfoModal2-metadataTable-artistsLatin').removeAttribute('data-bs-title');
394
  }
395
  if (trackParsedObject.lyricist === null) {
396
  document.getElementById('trackInfoModal2-metadataTable-lyricist').parentNode.classList.add('d-none');
@@ -438,7 +440,7 @@ function loadTrackInfoModal2 (trackUuid) {
438
  }
439
  }
440
  document.getElementById('trackInfoModal2-metadataTable-trackDurationReadable').innerHTML = msecToReadableTime(trackParsedObject.durationMsecs);
441
- document.getElementById('trackInfoModal2-metadataTable-trackDurationMsec').innerHTML = `${trackParsedObject.durationMsecs} ms`;
442
  document.getElementById('trackInfoModal2-metadataTable-trackDurationSamples').innerHTML = `${trackParsedObject.durationSamples} samples`;
443
  document.getElementById('trackInfoModal2-metadataTable-albumTitle').innerHTML = albumParsedObject.title;
444
  if (albumParsedObject.titleLatin === null) {
@@ -570,6 +572,8 @@ function loadTrackInfoModal2 (trackUuid) {
570
  const bootstrapTooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]');
571
  bootstrapTooltipList = [...bootstrapTooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl));
572
  document.getElementById('trackInfoModal2-DebugAcdOutputEl').innerHTML = JSON.stringify(albumParsedObject, '', ' ');
 
 
573
  const trackInfoModal2 = new bootstrap.Modal(document.getElementById('trackInfoModal2'));
574
  trackInfoModal2.show();
575
  }
@@ -998,6 +1002,15 @@ function writeAppSettingsToLocalStorage () {
998
  console.log(`Wrote appSettings:\n${JSON.stringify(appSettingsSaveData)}`);
999
  }
1000
 
 
 
 
 
 
 
 
 
 
1001
  // ========== その他使い回す汎用関数など ==========
1002
 
1003
  function msecToReadableTime (msec) {
@@ -1006,4 +1019,4 @@ function msecToReadableTime (msec) {
1006
  let min = ('00' + Math.floor(sec / 60)).slice(-2);
1007
  let secPart = ('00' + Math.floor(sec % 60)).slice(-2);
1008
  return `${min}:${secPart}.${('000' + msecCeiled % 1000).slice(-3)}`;
1009
- }
 
188
  document.getElementById('trackInfoModal-metadataTable-artists').setAttribute('data-bs-toggle', 'tooltip');
189
  document.getElementById('trackInfoModal-metadataTable-artists').setAttribute('data-bs-title', trackParsedObject.artist.map((obj) => {if (obj.nameLatin !== null) {return obj.nameLatin} else {return obj.name}}).join(', '));
190
  } else {
191
+ document.getElementById('trackInfoModal-metadataTable-artists').removeAttribute('data-bs-toggle');
192
+ document.getElementById('trackInfoModal-metadataTable-artists').removeAttribute('data-bs-title');
193
  }
194
  if (trackParsedObject.lyricist === null) {
195
  document.getElementById('trackInfoModal-metadataTable-lyricist').parentNode.classList.add('d-none');
 
237
  }
238
  }
239
  document.getElementById('trackInfoModal-metadataTable-trackDurationReadable').innerHTML = msecToReadableTime(trackParsedObject.durationMsecs);
240
+ document.getElementById('trackInfoModal-metadataTable-trackDurationMsec').innerHTML = `${Math.ceil(trackParsedObject.durationMsecs)} ms`;
241
  document.getElementById('trackInfoModal-metadataTable-trackDurationSamples').innerHTML = `${trackParsedObject.durationSamples} samples`;
242
  document.getElementById('trackInfoModal-metadataTable-albumTitle').innerHTML = albumParsedObject.title;
243
  if (albumParsedObject.titleLatin === null) {
 
369
  const bootstrapTooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]');
370
  bootstrapTooltipList = [...bootstrapTooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl));
371
  document.getElementById('trackInfoModal-DebugAcdOutputEl').innerHTML = JSON.stringify(albumParsedObject, '', ' ');
372
+ document.getElementById('trackInfoModal-ModalCloseButton').addEventListener('click', () => {allAudioElementStop()});
373
+ document.getElementById('trackInfoModal-ModalCloseIconButton').addEventListener('click', () => {allAudioElementStop()});
374
  const trackInfoModal = new bootstrap.Modal(document.getElementById('trackInfoModal'));
375
  trackInfoModal.show();
376
  }
 
391
  document.getElementById('trackInfoModal2-metadataTable-artists').setAttribute('data-bs-toggle', 'tooltip');
392
  document.getElementById('trackInfoModal2-metadataTable-artists').setAttribute('data-bs-title', trackParsedObject.artist.map((obj) => {if (obj.nameLatin !== null) {return obj.nameLatin} else {return obj.name}}).join(', '));
393
  } else {
394
+ document.getElementById('trackInfoModal2-metadataTable-artists').removeAttribute('data-bs-toggle');
395
+ document.getElementById('trackInfoModal2-metadataTable-artists').removeAttribute('data-bs-title');
396
  }
397
  if (trackParsedObject.lyricist === null) {
398
  document.getElementById('trackInfoModal2-metadataTable-lyricist').parentNode.classList.add('d-none');
 
440
  }
441
  }
442
  document.getElementById('trackInfoModal2-metadataTable-trackDurationReadable').innerHTML = msecToReadableTime(trackParsedObject.durationMsecs);
443
+ document.getElementById('trackInfoModal2-metadataTable-trackDurationMsec').innerHTML = `${Math.ceil(trackParsedObject.durationMsecs)} ms`;
444
  document.getElementById('trackInfoModal2-metadataTable-trackDurationSamples').innerHTML = `${trackParsedObject.durationSamples} samples`;
445
  document.getElementById('trackInfoModal2-metadataTable-albumTitle').innerHTML = albumParsedObject.title;
446
  if (albumParsedObject.titleLatin === null) {
 
572
  const bootstrapTooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]');
573
  bootstrapTooltipList = [...bootstrapTooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl));
574
  document.getElementById('trackInfoModal2-DebugAcdOutputEl').innerHTML = JSON.stringify(albumParsedObject, '', ' ');
575
+ document.getElementById('trackInfoModal2-ModalCloseButton').addEventListener('click', () => {allAudioElementStop()});
576
+ document.getElementById('trackInfoModal2-ModalCloseIconButton').addEventListener('click', () => {allAudioElementStop()});
577
  const trackInfoModal2 = new bootstrap.Modal(document.getElementById('trackInfoModal2'));
578
  trackInfoModal2.show();
579
  }
 
1002
  console.log(`Wrote appSettings:\n${JSON.stringify(appSettingsSaveData)}`);
1003
  }
1004
 
1005
+ // ========== 全てのAudio要素をStop ==========
1006
+
1007
+ function allAudioElementStop () {
1008
+ let audioElements = document.getElementsByTagName('audio');
1009
+ for (let i = 0; i < audioElements.length; i++) {
1010
+ audioElements[i].pause();
1011
+ }
1012
+ }
1013
+
1014
  // ========== その他使い回す汎用関数など ==========
1015
 
1016
  function msecToReadableTime (msec) {
 
1019
  let min = ('00' + Math.floor(sec / 60)).slice(-2);
1020
  let secPart = ('00' + Math.floor(sec % 60)).slice(-2);
1021
  return `${min}:${secPart}.${('000' + msecCeiled % 1000).slice(-3)}`;
1022
+ }