beautified

This commit is contained in:
Brandon4466
2022-12-14 22:07:25 -08:00
parent 5a4265247b
commit d65bc6989a
17 changed files with 62 additions and 1254 deletions

View File

@@ -1 +1 @@
{"access_token": "BQDT_WherHrUXbbhIgBKI7Fo7emhUb-CW2hhY2eGzJjIS01ryBT2r71AxXKkVQcX1aa7-98pw_0yMOvIjWO8w6WwJuZVTRM4y0_-NvZLuTTCCF7fr7pme0EYQ8VdHdJtxESZO81ZGatYvpt7MQ59TsTQSE9aGhIKfnTprUtWJR43XfYJn6QWcT2bfNTIkQ", "token_type": "Bearer", "expires_in": 3600, "scope": "user-modify-playback-state user-read-playback-state", "expires_at": 1671062858, "refresh_token": "AQAQRkRkmOxwR34lsJu_mpG4wxEFiNuJ1FIdmHYN5j0dClEEqMRqPPFX8jM3cQTQkRpeXXyi3xPQ8YImc7Fc-PH1CKTvyARy9VkMKXIes4-l6ijO9fVMyCNwbI0IGvpfrqE"}
{"access_token": "BQDGLDKMfiNe4CK2l9-RdoedRx2QfGqoYkmW21bEXH43BW2731XrUtwkQnomX472HG0U04FahklGSfPSFHJLl4052Bxdypf6I1LWmlEh9Y_pGYVWxK279xyUMrg6MUksj3QcxFfn44PCajOvkgCrSQU3gdaBxbUWvNStiaYZ6DgcE2ou9fJ-HYhm3EeCkA", "token_type": "Bearer", "expires_in": 3600, "scope": "user-modify-playback-state user-read-playback-state", "expires_at": 1671086161, "refresh_token": "AQAQRkRkmOxwR34lsJu_mpG4wxEFiNuJ1FIdmHYN5j0dClEEqMRqPPFX8jM3cQTQkRpeXXyi3xPQ8YImc7Fc-PH1CKTvyARy9VkMKXIes4-l6ijO9fVMyCNwbI0IGvpfrqE"}

View File

@@ -1 +1 @@
{"username": "thebrandon45", "credentials": "QVFESGtlN01Mb3VURGRWT1YyQy0xRHh4LXFfSmczdkdzbTNvbVRIbVNVSDVXMVg3ZjZWMmxOTWdxYnpTdG93RmpwR2tjYkhKYVBsc3h3RTVDWVVoVXh6Q2NuTlR0dHVRYXlhai1WbUQ0WnlDTEdtbDg0cVVCQUxXMEVfcno2bWpDOHdieUdneXM4N0tnQQ==", "type": "AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS"}
{"username": "thebrandon45", "credentials": "QVFEalQxYVlobUdHczYwd21NNERDcWgxMVhtUFBlU1dicWN6VW9PR0JraDNLa0NrUDU4YlFVSzNQUDRka2NTLUo3aHVtQlFrMHJYWGlnai1pc0RQNjY4a1dDSDFZYmR6NnB6ZGhRaFd0bkNaSjVpMVZLeXlWWlE2dEJiOW5zR3RwMy1IQlkxdEJ2RjhMQQ==", "type": "AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS"}

BIN
icons/pause-circle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 859 B

BIN
icons/play-circle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 934 B

BIN
icons/skip-next.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

BIN
icons/skip-previous.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 B

View File

@@ -1,109 +0,0 @@
{
"actions": {
"disallows": {
"resuming": true,
"skipping_prev": true
}
},
"context": null,
"currently_playing_type": "track",
"device": {
"id": "3e20a2964c1151e118255b819e12e57836e32c1b",
"is_active": true,
"is_private_session": false,
"is_restricted": false,
"name": "SILVERHAND",
"type": "Computer",
"volume_percent": 20
},
"is_playing": true,
"item": {
"album": {
"album_type": "album",
"artists": [
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/2tIP7SsRs7vjIcLrU85W8J"
},
"href": "https://api.spotify.com/v1/artists/2tIP7SsRs7vjIcLrU85W8J",
"id": "2tIP7SsRs7vjIcLrU85W8J",
"name": "The Kid LAROI",
"type": "artist",
"uri": "spotify:artist:2tIP7SsRs7vjIcLrU85W8J"
}
],
"available_markets": [
"AD",
"ZM",
"ZW"
],
"external_urls": {
"spotify": "https://open.spotify.com/album/3YjfdLdpQcVI72uKhooZst"
},
"href": "https://api.spotify.com/v1/albums/3YjfdLdpQcVI72uKhooZst",
"id": "3YjfdLdpQcVI72uKhooZst",
"images": [
{
"height": 640,
"url": "https://i.scdn.co/image/ab67616d0000b273df16d539f508603bfb1efe02",
"width": 640
},
{
"height": 300,
"url": "https://i.scdn.co/image/ab67616d00001e02df16d539f508603bfb1efe02",
"width": 300
},
{
"height": 64,
"url": "https://i.scdn.co/image/ab67616d00004851df16d539f508603bfb1efe02",
"width": 64
}
],
"name": "F*CK LOVE (SAVAGE)",
"release_date": "2020-11-06",
"release_date_precision": "day",
"total_tracks": 22,
"type": "album",
"uri": "spotify:album:3YjfdLdpQcVI72uKhooZst"
},
"artists": [
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/2tIP7SsRs7vjIcLrU85W8J"
},
"href": "https://api.spotify.com/v1/artists/2tIP7SsRs7vjIcLrU85W8J",
"id": "2tIP7SsRs7vjIcLrU85W8J",
"name": "The Kid LAROI",
"type": "artist",
"uri": "spotify:artist:2tIP7SsRs7vjIcLrU85W8J"
}
],
"available_markets": [
"AD",
"ZM",
"ZW"
],
"disc_number": 1,
"duration_ms": 151704,
"explicit": true,
"external_ids": {
"isrc": "USSM12006583"
},
"external_urls": {
"spotify": "https://open.spotify.com/track/3QCU8BT0zDS9LPVfEhRFEE"
},
"href": "https://api.spotify.com/v1/tracks/3QCU8BT0zDS9LPVfEhRFEE",
"id": "3QCU8BT0zDS9LPVfEhRFEE",
"is_local": false,
"name": "ALWAYS DO",
"popularity": 71,
"preview_url": "https://p.scdn.co/mp3-preview/d5f01637c9840500d1434131f804a4cc184bd1e4?cid=69b82a34d0fb40be80b020eae8e80f25",
"track_number": 4,
"type": "track",
"uri": "spotify:track:3QCU8BT0zDS9LPVfEhRFEE"
},
"progress_ms": 25688,
"repeat_state": "off",
"shuffle_state": true,
"timestamp": 1670714537726
}

View File

@@ -1,184 +0,0 @@
{
"artists": {
"href": "https://api.spotify.com/v1/search?query=artist%3Amachine+gun+kelly&type=artist&offset=0&limit=10",
"items": [
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/6TIYQ3jFPwQSRmorSezPxX"
},
"followers": {
"href": null,
"total": 4894771
},
"genres": [
"ohio hip hop",
"pop",
"pop rap"
],
"href": "https://api.spotify.com/v1/artists/6TIYQ3jFPwQSRmorSezPxX",
"id": "6TIYQ3jFPwQSRmorSezPxX",
"images": [
{
"height": 640,
"url": "https://i.scdn.co/image/ab6761610000e5eb1fd54eb6e30d0bc8f633621e",
"width": 640
},
{
"height": 320,
"url": "https://i.scdn.co/image/ab676161000051741fd54eb6e30d0bc8f633621e",
"width": 320
},
{
"height": 160,
"url": "https://i.scdn.co/image/ab6761610000f1781fd54eb6e30d0bc8f633621e",
"width": 160
}
],
"name": "Machine Gun Kelly",
"popularity": 80,
"type": "artist",
"uri": "spotify:artist:6TIYQ3jFPwQSRmorSezPxX"
},
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/1lP7f2evgtQcghRmqkPb3j"
},
"followers": {
"href": null,
"total": 686
},
"genres": [],
"href": "https://api.spotify.com/v1/artists/1lP7f2evgtQcghRmqkPb3j",
"id": "1lP7f2evgtQcghRmqkPb3j",
"images": [
{
"height": 640,
"url": "https://i.scdn.co/image/ab67616d0000b2734f88aa4c73f3017a3e21d9d4",
"width": 640
},
{
"height": 300,
"url": "https://i.scdn.co/image/ab67616d00001e024f88aa4c73f3017a3e21d9d4",
"width": 300
},
{
"height": 64,
"url": "https://i.scdn.co/image/ab67616d000048514f88aa4c73f3017a3e21d9d4",
"width": 64
}
],
"name": "Machine Gun Kelly",
"popularity": 1,
"type": "artist",
"uri": "spotify:artist:1lP7f2evgtQcghRmqkPb3j"
},
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/4VPvSWeZ4gpl80xJBJ4Dsh"
},
"followers": {
"href": null,
"total": 2473
},
"genres": [
"swedish hard rock"
],
"href": "https://api.spotify.com/v1/artists/4VPvSWeZ4gpl80xJBJ4Dsh",
"id": "4VPvSWeZ4gpl80xJBJ4Dsh",
"images": [
{
"height": 640,
"url": "https://i.scdn.co/image/ab67616d0000b273bed51eb447e0d2c2fcd5d80f",
"width": 640
},
{
"height": 300,
"url": "https://i.scdn.co/image/ab67616d00001e02bed51eb447e0d2c2fcd5d80f",
"width": 300
},
{
"height": 64,
"url": "https://i.scdn.co/image/ab67616d00004851bed51eb447e0d2c2fcd5d80f",
"width": 64
}
],
"name": "MachineGun Kelly",
"popularity": 19,
"type": "artist",
"uri": "spotify:artist:4VPvSWeZ4gpl80xJBJ4Dsh"
},
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/05m0YksOWOcA4yJ32hqNui"
},
"followers": {
"href": null,
"total": 340
},
"genres": [],
"href": "https://api.spotify.com/v1/artists/05m0YksOWOcA4yJ32hqNui",
"id": "05m0YksOWOcA4yJ32hqNui",
"images": [
{
"height": 640,
"url": "https://i.scdn.co/image/ab67616d0000b2736fa54a23a30401c989fd5fa7",
"width": 640
},
{
"height": 300,
"url": "https://i.scdn.co/image/ab67616d00001e026fa54a23a30401c989fd5fa7",
"width": 300
},
{
"height": 64,
"url": "https://i.scdn.co/image/ab67616d000048516fa54a23a30401c989fd5fa7",
"width": 64
}
],
"name": "Machine Gun Kelly",
"popularity": 0,
"type": "artist",
"uri": "spotify:artist:05m0YksOWOcA4yJ32hqNui"
},
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/3I5tJ05CH0HiK1PCw3vqOS"
},
"followers": {
"href": null,
"total": 847
},
"genres": [],
"href": "https://api.spotify.com/v1/artists/3I5tJ05CH0HiK1PCw3vqOS",
"id": "3I5tJ05CH0HiK1PCw3vqOS",
"images": [],
"name": "Machine Gun Kelly & Ray Jr.",
"popularity": 4,
"type": "artist",
"uri": "spotify:artist:3I5tJ05CH0HiK1PCw3vqOS"
},
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/1DKkR55mGDMlx2bASVW4iq"
},
"followers": {
"href": null,
"total": 26
},
"genres": [],
"href": "https://api.spotify.com/v1/artists/1DKkR55mGDMlx2bASVW4iq",
"id": "1DKkR55mGDMlx2bASVW4iq",
"images": [],
"name": "Machine Gunn Kelly",
"popularity": 0,
"type": "artist",
"uri": "spotify:artist:1DKkR55mGDMlx2bASVW4iq"
}
],
"limit": 10,
"next": null,
"offset": 0,
"previous": null,
"total": 6
}
}

View File

@@ -1,404 +0,0 @@
{
"albums": {
"href": "https://api.spotify.com/v1/search?query=machine+gun+kelly&type=album&market=US&offset=0&limit=2",
"items": [
{
"album_type": "album",
"artists": [
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/6TIYQ3jFPwQSRmorSezPxX"
},
"href": "https://api.spotify.com/v1/artists/6TIYQ3jFPwQSRmorSezPxX",
"id": "6TIYQ3jFPwQSRmorSezPxX",
"name": "Machine Gun Kelly",
"type": "artist",
"uri": "spotify:artist:6TIYQ3jFPwQSRmorSezPxX"
}
],
"external_urls": {
"spotify": "https://open.spotify.com/album/3sKZHtQoq3tPtkXbT8PJAc"
},
"href": "https://api.spotify.com/v1/albums/3sKZHtQoq3tPtkXbT8PJAc",
"id": "3sKZHtQoq3tPtkXbT8PJAc",
"images": [
{
"height": 640,
"url": "https://i.scdn.co/image/ab67616d0000b273b4683d9ac3c5f14a71523c84",
"width": 640
},
{
"height": 300,
"url": "https://i.scdn.co/image/ab67616d00001e02b4683d9ac3c5f14a71523c84",
"width": 300
},
{
"height": 64,
"url": "https://i.scdn.co/image/ab67616d00004851b4683d9ac3c5f14a71523c84",
"width": 64
}
],
"name": "mainstream sellout",
"release_date": "2022-03-25",
"release_date_precision": "day",
"total_tracks": 16,
"type": "album",
"uri": "spotify:album:3sKZHtQoq3tPtkXbT8PJAc"
},
{
"album_type": "album",
"artists": [
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/6TIYQ3jFPwQSRmorSezPxX"
},
"href": "https://api.spotify.com/v1/artists/6TIYQ3jFPwQSRmorSezPxX",
"id": "6TIYQ3jFPwQSRmorSezPxX",
"name": "Machine Gun Kelly",
"type": "artist",
"uri": "spotify:artist:6TIYQ3jFPwQSRmorSezPxX"
}
],
"external_urls": {
"spotify": "https://open.spotify.com/album/57lgFncHBYu5E3igZnuCJK"
},
"href": "https://api.spotify.com/v1/albums/57lgFncHBYu5E3igZnuCJK",
"id": "57lgFncHBYu5E3igZnuCJK",
"images": [
{
"height": 640,
"url": "https://i.scdn.co/image/ab67616d0000b273d4d4929a3a86fe2f9fadbd42",
"width": 640
},
{
"height": 300,
"url": "https://i.scdn.co/image/ab67616d00001e02d4d4929a3a86fe2f9fadbd42",
"width": 300
},
{
"height": 64,
"url": "https://i.scdn.co/image/ab67616d00004851d4d4929a3a86fe2f9fadbd42",
"width": 64
}
],
"name": "Tickets To My Downfall",
"release_date": "2020-09-25",
"release_date_precision": "day",
"total_tracks": 15,
"type": "album",
"uri": "spotify:album:57lgFncHBYu5E3igZnuCJK"
}
],
"limit": 2,
"next": "https://api.spotify.com/v1/search?query=machine+gun+kelly&type=album&market=US&offset=2&limit=2",
"offset": 0,
"previous": null,
"total": 532
},
"artists": {
"href": "https://api.spotify.com/v1/search?query=machine+gun+kelly&type=artist&market=US&offset=0&limit=2",
"items": [
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/6TIYQ3jFPwQSRmorSezPxX"
},
"followers": {
"href": null,
"total": 4894771
},
"genres": [
"ohio hip hop",
"pop",
"pop rap"
],
"href": "https://api.spotify.com/v1/artists/6TIYQ3jFPwQSRmorSezPxX",
"id": "6TIYQ3jFPwQSRmorSezPxX",
"images": [
{
"height": 640,
"url": "https://i.scdn.co/image/ab6761610000e5eb1fd54eb6e30d0bc8f633621e",
"width": 640
},
{
"height": 320,
"url": "https://i.scdn.co/image/ab676161000051741fd54eb6e30d0bc8f633621e",
"width": 320
},
{
"height": 160,
"url": "https://i.scdn.co/image/ab6761610000f1781fd54eb6e30d0bc8f633621e",
"width": 160
}
],
"name": "Machine Gun Kelly",
"popularity": 80,
"type": "artist",
"uri": "spotify:artist:6TIYQ3jFPwQSRmorSezPxX"
},
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/4VPvSWeZ4gpl80xJBJ4Dsh"
},
"followers": {
"href": null,
"total": 2473
},
"genres": [
"swedish hard rock"
],
"href": "https://api.spotify.com/v1/artists/4VPvSWeZ4gpl80xJBJ4Dsh",
"id": "4VPvSWeZ4gpl80xJBJ4Dsh",
"images": [
{
"height": 640,
"url": "https://i.scdn.co/image/ab67616d0000b273bed51eb447e0d2c2fcd5d80f",
"width": 640
},
{
"height": 300,
"url": "https://i.scdn.co/image/ab67616d00001e02bed51eb447e0d2c2fcd5d80f",
"width": 300
},
{
"height": 64,
"url": "https://i.scdn.co/image/ab67616d00004851bed51eb447e0d2c2fcd5d80f",
"width": 64
}
],
"name": "MachineGun Kelly",
"popularity": 19,
"type": "artist",
"uri": "spotify:artist:4VPvSWeZ4gpl80xJBJ4Dsh"
}
],
"limit": 2,
"next": "https://api.spotify.com/v1/search?query=machine+gun+kelly&type=artist&market=US&offset=2&limit=2",
"offset": 0,
"previous": null,
"total": 25
},
"playlists": {
"href": "https://api.spotify.com/v1/search?query=machine+gun+kelly&type=playlist&market=US&offset=0&limit=2",
"items": [
{
"collaborative": false,
"description": "",
"external_urls": {
"spotify": "https://open.spotify.com/playlist/51UkIAIWZwzn0pav4LTixC"
},
"href": "https://api.spotify.com/v1/playlists/51UkIAIWZwzn0pav4LTixC",
"id": "51UkIAIWZwzn0pav4LTixC",
"images": [
{
"height": null,
"url": "https://i.scdn.co/image/ab67706c0000bebb4cba5729c734756bc3171e8f",
"width": null
}
],
"name": "Machine Gun Kelly: Best Of",
"owner": {
"display_name": "MGK",
"external_urls": {
"spotify": "https://open.spotify.com/user/machinegunkellyak"
},
"href": "https://api.spotify.com/v1/users/machinegunkellyak",
"id": "machinegunkellyak",
"type": "user",
"uri": "spotify:user:machinegunkellyak"
},
"primary_color": null,
"public": null,
"snapshot_id": "MzAzLDJiNjNhMjBlMjA2OTA1NDJhNTMwMTk5ZDFjMmVhMTc0ZDA5ZmJmZWM=",
"tracks": {
"href": "https://api.spotify.com/v1/playlists/51UkIAIWZwzn0pav4LTixC/tracks",
"total": 125
},
"type": "playlist",
"uri": "spotify:playlist:51UkIAIWZwzn0pav4LTixC"
},
{
"collaborative": false,
"description": "This is Machine Gun Kelly. The essential tracks, all in one playlist.",
"external_urls": {
"spotify": "https://open.spotify.com/playlist/37i9dQZF1DZ06evO44TgnC"
},
"href": "https://api.spotify.com/v1/playlists/37i9dQZF1DZ06evO44TgnC",
"id": "37i9dQZF1DZ06evO44TgnC",
"images": [
{
"height": null,
"url": "https://thisis-images.scdn.co/37i9dQZF1DZ06evO44TgnC-large.jpg",
"width": null
}
],
"name": "This Is Machine Gun Kelly",
"owner": {
"display_name": "Spotify",
"external_urls": {
"spotify": "https://open.spotify.com/user/spotify"
},
"href": "https://api.spotify.com/v1/users/spotify",
"id": "spotify",
"type": "user",
"uri": "spotify:user:spotify"
},
"primary_color": null,
"public": null,
"snapshot_id": "Mjc4NDQ5MDIsMDAwMDAwMDAxYWFhZTljYTZlM2U5NzYzZjVkMDBmMjg3M2JlYzQ4MQ==",
"tracks": {
"href": "https://api.spotify.com/v1/playlists/37i9dQZF1DZ06evO44TgnC/tracks",
"total": 48
},
"type": "playlist",
"uri": "spotify:playlist:37i9dQZF1DZ06evO44TgnC"
}
],
"limit": 2,
"next": "https://api.spotify.com/v1/search?query=machine+gun+kelly&type=playlist&market=US&offset=2&limit=2",
"offset": 0,
"previous": null,
"total": 3793
},
"tracks": {
"href": "https://api.spotify.com/v1/search?query=machine+gun+kelly&type=track&market=US&offset=0&limit=2",
"items": [
{
"album": {
"album_type": "album",
"artists": [
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/6TIYQ3jFPwQSRmorSezPxX"
},
"href": "https://api.spotify.com/v1/artists/6TIYQ3jFPwQSRmorSezPxX",
"id": "6TIYQ3jFPwQSRmorSezPxX",
"name": "Machine Gun Kelly",
"type": "artist",
"uri": "spotify:artist:6TIYQ3jFPwQSRmorSezPxX"
}
],
"external_urls": {
"spotify": "https://open.spotify.com/album/57lgFncHBYu5E3igZnuCJK"
},
"href": "https://api.spotify.com/v1/albums/57lgFncHBYu5E3igZnuCJK",
"id": "57lgFncHBYu5E3igZnuCJK",
"images": [
{
"height": 640,
"url": "https://i.scdn.co/image/ab67616d0000b273d4d4929a3a86fe2f9fadbd42",
"width": 640
},
{
"height": 300,
"url": "https://i.scdn.co/image/ab67616d00001e02d4d4929a3a86fe2f9fadbd42",
"width": 300
},
{
"height": 64,
"url": "https://i.scdn.co/image/ab67616d00004851d4d4929a3a86fe2f9fadbd42",
"width": 64
}
],
"name": "Tickets To My Downfall",
"release_date": "2020-09-25",
"release_date_precision": "day",
"total_tracks": 15,
"type": "album",
"uri": "spotify:album:57lgFncHBYu5E3igZnuCJK"
},
"artists": [
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/6TIYQ3jFPwQSRmorSezPxX"
},
"href": "https://api.spotify.com/v1/artists/6TIYQ3jFPwQSRmorSezPxX",
"id": "6TIYQ3jFPwQSRmorSezPxX",
"name": "Machine Gun Kelly",
"type": "artist",
"uri": "spotify:artist:6TIYQ3jFPwQSRmorSezPxX"
},
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/2cFrymmkijnjDg9SS92EPM"
},
"href": "https://api.spotify.com/v1/artists/2cFrymmkijnjDg9SS92EPM",
"id": "2cFrymmkijnjDg9SS92EPM",
"name": "blackbear",
"type": "artist",
"uri": "spotify:artist:2cFrymmkijnjDg9SS92EPM"
}
],
"disc_number": 1,
"duration_ms": 139460,
"explicit": true,
"external_ids": {
"isrc": "USUM72014730"
},
"external_urls": {
"spotify": "https://open.spotify.com/track/7kDUspsoYfLkWnZR7qwHZl"
},
"href": "https://api.spotify.com/v1/tracks/7kDUspsoYfLkWnZR7qwHZl",
"id": "7kDUspsoYfLkWnZR7qwHZl",
"is_local": false,
"is_playable": true,
"name": "my ex's best friend (with blackbear)",
"popularity": 78,
"preview_url": null,
"track_number": 11,
"type": "track",
"uri": "spotify:track:7kDUspsoYfLkWnZR7qwHZl"
},
{
"album": {
"album_type": "album",
"artists": [
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/6TIYQ3jFPwQSRmorSezPxX"
},
"href": "https://api.spotify.com/v1/artists/6TIYQ3jFPwQSRmorSezPxX",
"id": "6TIYQ3jFPwQSRmorSezPxX",
"name": "Machine Gun Kelly",
"type": "artist",
"uri": "spotify:artist:6TIYQ3jFPwQSRmorSezPxX"
}
],
"external_urls": {
"spotify": "https://open.spotify.com/album/5NzdnPboXcqvuvyEH1wSEJ"
},
"href": "https://api.spotify.com/v1/albums/5NzdnPboXcqvuvyEH1wSEJ",
"id": "5NzdnPboXcqvuvyEH1wSEJ",
"images": [
{
"height": 640,
"url": "https://i.scdn.co/image/ab67616d0000b273a57d3a2736f815d3cf358e37",
"width": 640
},
{
"height": 300,
"url": "https://i.scdn.co/image/ab67616d00001e02a57d3a2736f815d3cf358e37",
"width": 300
},
{
"height": 64,
"url": "https://i.scdn.co/image/ab67616d00004851a57d3a2736f815d3cf358e37",
"width": 64
}
],
"name": "Lace Up (Deluxe)",
"release_date": "2012-01-01",
"release_date_precision": "day",
"total_tracks": 16,
"type": "album",
"uri": "spotify:album:5NzdnPboXcqvuvyEH1wSEJ"
},
"artists": [
}
],
"limit": 2,
"next": "https://api.spotify.com/v1/search?query=machine+gun+kelly&type=track&market=US&offset=2&limit=2",
"offset": 0,
"previous": null,
"total": 2563
}
}

View File

@@ -1,402 +0,0 @@
{
"playlists": {
"href": "https://api.spotify.com/v1/search?query=playlist%3Arap&type=playlist&offset=0&limit=10",
"items": [
{
"collaborative": false,
"description": "",
"external_urls": {
"spotify": "https://open.spotify.com/playlist/6jkyRflychhI50Lcv9TCfr"
},
"href": "https://api.spotify.com/v1/playlists/6jkyRflychhI50Lcv9TCfr",
"id": "6jkyRflychhI50Lcv9TCfr",
"images": [
{
"height": 640,
"url": "https://mosaic.scdn.co/640/ab67616d0000b273419cedff7b313b962a93932eab67616d0000b273bba7cfaf7c59ff0898acba1fab67616d0000b273ce159a3ba2096e13fa9d4b4cab67616d0000b273e31a279d267f3b3d8912e6f1",
"width": 640
},
{
"height": 300,
"url": "https://mosaic.scdn.co/300/ab67616d0000b273419cedff7b313b962a93932eab67616d0000b273bba7cfaf7c59ff0898acba1fab67616d0000b273ce159a3ba2096e13fa9d4b4cab67616d0000b273e31a279d267f3b3d8912e6f1",
"width": 300
},
{
"height": 60,
"url": "https://mosaic.scdn.co/60/ab67616d0000b273419cedff7b313b962a93932eab67616d0000b273bba7cfaf7c59ff0898acba1fab67616d0000b273ce159a3ba2096e13fa9d4b4cab67616d0000b273e31a279d267f3b3d8912e6f1",
"width": 60
}
],
"name": "Playlist Rap us Chill \ud83c\uddfa\ud83c\uddf8",
"owner": {
"display_name": "Pierre-Louis Drouelle",
"external_urls": {
"spotify": "https://open.spotify.com/user/21x6ai6t5q6udgg3hx45fxmay"
},
"href": "https://api.spotify.com/v1/users/21x6ai6t5q6udgg3hx45fxmay",
"id": "21x6ai6t5q6udgg3hx45fxmay",
"type": "user",
"uri": "spotify:user:21x6ai6t5q6udgg3hx45fxmay"
},
"primary_color": null,
"public": null,
"snapshot_id": "MzgsYWQwMzNmZTdmNjVkZjYxZDRmOWQ0ZTgwOGFiMWE3OTY4ZGFjYTdhOQ==",
"tracks": {
"href": "https://api.spotify.com/v1/playlists/6jkyRflychhI50Lcv9TCfr/tracks",
"total": 37
},
"type": "playlist",
"uri": "spotify:playlist:6jkyRflychhI50Lcv9TCfr"
},
{
"collaborative": false,
"description": "Les classiques et les nouveaut\u00e9s du Rap FR ! Photo : Orelsan Contact, insta : @lerapenfrance",
"external_urls": {
"spotify": "https://open.spotify.com/playlist/2kZm59MItcYXMO0RMtTTjd"
},
"href": "https://api.spotify.com/v1/playlists/2kZm59MItcYXMO0RMtTTjd",
"id": "2kZm59MItcYXMO0RMtTTjd",
"images": [
{
"height": null,
"url": "https://i.scdn.co/image/ab67706c0000bebbca81a1f3a58ab3893bced31d",
"width": null
}
],
"name": "Playlist Rap Francais 2022",
"owner": {
"display_name": "LeRapEnFrance",
"external_urls": {
"spotify": "https://open.spotify.com/user/math.vecchioni-fr"
},
"href": "https://api.spotify.com/v1/users/math.vecchioni-fr",
"id": "math.vecchioni-fr",
"type": "user",
"uri": "spotify:user:math.vecchioni-fr"
},
"primary_color": null,
"public": null,
"snapshot_id": "NjU5NSw0NGMwOGQwOTIyMDYyZWNjYmUwOGVkYzRlNjllZTdiOTkwMDQxM2Vl",
"tracks": {
"href": "https://api.spotify.com/v1/playlists/2kZm59MItcYXMO0RMtTTjd/tracks",
"total": 85
},
"type": "playlist",
"uri": "spotify:playlist:2kZm59MItcYXMO0RMtTTjd"
},
{
"collaborative": false,
"description": "",
"external_urls": {
"spotify": "https://open.spotify.com/playlist/7HFibvUcJL4V1ixYYsGK8J"
},
"href": "https://api.spotify.com/v1/playlists/7HFibvUcJL4V1ixYYsGK8J",
"id": "7HFibvUcJL4V1ixYYsGK8J",
"images": [
{
"height": 640,
"url": "https://mosaic.scdn.co/640/ab67616d0000b27336f15d38804d5bdd29b9fc7aab67616d0000b27341b41e6f7924e530a9b00f9cab67616d0000b273ce159a3ba2096e13fa9d4b4cab67616d0000b273f54b99bf27cda88f4a7403ce",
"width": 640
},
{
"height": 300,
"url": "https://mosaic.scdn.co/300/ab67616d0000b27336f15d38804d5bdd29b9fc7aab67616d0000b27341b41e6f7924e530a9b00f9cab67616d0000b273ce159a3ba2096e13fa9d4b4cab67616d0000b273f54b99bf27cda88f4a7403ce",
"width": 300
},
{
"height": 60,
"url": "https://mosaic.scdn.co/60/ab67616d0000b27336f15d38804d5bdd29b9fc7aab67616d0000b27341b41e6f7924e530a9b00f9cab67616d0000b273ce159a3ba2096e13fa9d4b4cab67616d0000b273f54b99bf27cda88f4a7403ce",
"width": 60
}
],
"name": "",
"owner": {
"display_name": "Jakedorworth",
"external_urls": {
"spotify": "https://open.spotify.com/user/toxicsnouis"
},
"href": "https://api.spotify.com/v1/users/toxicsnouis",
"id": "toxicsnouis",
"type": "user",
"uri": "spotify:user:toxicsnouis"
},
"primary_color": null,
"public": null,
"snapshot_id": "NjExLDI2OTFjNjYxMmJiOWYzZGQ1NzRhMDJjNDE4MDliOWRiYmM2YjlmODY=",
"tracks": {
"href": "https://api.spotify.com/v1/playlists/7HFibvUcJL4V1ixYYsGK8J/tracks",
"total": 487
},
"type": "playlist",
"uri": "spotify:playlist:7HFibvUcJL4V1ixYYsGK8J"
},
{
"collaborative": false,
"description": "",
"external_urls": {
"spotify": "https://open.spotify.com/playlist/3aUN9KuF9Ce87BXdL86MVI"
},
"href": "https://api.spotify.com/v1/playlists/3aUN9KuF9Ce87BXdL86MVI",
"id": "3aUN9KuF9Ce87BXdL86MVI",
"images": [
{
"height": null,
"url": "https://i.scdn.co/image/ab67706c0000bebb72951219c5e1ef0daad297d4",
"width": null
}
],
"name": "Playlist rap triste ",
"owner": {
"display_name": "bastien lefel",
"external_urls": {
"spotify": "https://open.spotify.com/user/8bu7sbzpe1qn67adebtn65lgn"
},
"href": "https://api.spotify.com/v1/users/8bu7sbzpe1qn67adebtn65lgn",
"id": "8bu7sbzpe1qn67adebtn65lgn",
"type": "user",
"uri": "spotify:user:8bu7sbzpe1qn67adebtn65lgn"
},
"primary_color": null,
"public": null,
"snapshot_id": "Mjg4LGI3YmMyMWRlMzI2ZjJiZDA1MTYyMzVlNTE3NjdlNGE2YTQ3YzFhMWY=",
"tracks": {
"href": "https://api.spotify.com/v1/playlists/3aUN9KuF9Ce87BXdL86MVI/tracks",
"total": 243
},
"type": "playlist",
"uri": "spotify:playlist:3aUN9KuF9Ce87BXdL86MVI"
},
{
"collaborative": false,
"description": "You can also find us with: top country rap songs - cowboy rap music - country rap songs - best country rap songs - country rap music - top country rap songs 2022 - cowboy rap song - rap country - country rap 2022 - best country rap songs 2022 - country rap songs 2022 - country rap - rap country 2022",
"external_urls": {
"spotify": "https://open.spotify.com/playlist/25GMAkhuPpZvT2UqNp1G04"
},
"href": "https://api.spotify.com/v1/playlists/25GMAkhuPpZvT2UqNp1G04",
"id": "25GMAkhuPpZvT2UqNp1G04",
"images": [
{
"height": null,
"url": "https://i.scdn.co/image/ab67706c0000bebb341e17482a0f26650e4645a9",
"width": null
}
],
"name": "Country Rap 2022 - Best Country Rap Songs 2022 Playlist (Cowboy Rap Music Hits)",
"owner": {
"display_name": "Redlist Playlists",
"external_urls": {
"spotify": "https://open.spotify.com/user/7bntwjdswpqhrnqr0gssydbd0"
},
"href": "https://api.spotify.com/v1/users/7bntwjdswpqhrnqr0gssydbd0",
"id": "7bntwjdswpqhrnqr0gssydbd0",
"type": "user",
"uri": "spotify:user:7bntwjdswpqhrnqr0gssydbd0"
},
"primary_color": null,
"public": null,
"snapshot_id": "MjA5NSwyNmYyZjZmNjViNGIyZTJhYzdlMDA0OWMzZWNmMDUzZDM1ZTg5MTQ0",
"tracks": {
"href": "https://api.spotify.com/v1/playlists/25GMAkhuPpZvT2UqNp1G04/tracks",
"total": 40
},
"type": "playlist",
"uri": "spotify:playlist:25GMAkhuPpZvT2UqNp1G04"
},
{
"collaborative": false,
"description": "HOTTEST HIP HOP BANGERS \ud83d\udd25 BEST INDIE RAP - BEST RAP PLAYLIST 2022 - HIP HOP 2022",
"external_urls": {
"spotify": "https://open.spotify.com/playlist/6cqAN7tZC8eUY3862EYnUK"
},
"href": "https://api.spotify.com/v1/playlists/6cqAN7tZC8eUY3862EYnUK",
"id": "6cqAN7tZC8eUY3862EYnUK",
"images": [
{
"height": null,
"url": "https://i.scdn.co/image/ab67706c0000bebb90dd7bab8ab72f66406f6574",
"width": null
}
],
"name": "Best Rap Playlist 2022 \ud83d\udd25 Hip Hop 2022 \ud83d\udd25 Best Rap Hits 2022 / Hip Hop Hits 2022 / Rap Playlist",
"owner": {
"display_name": "LABYRINTH RECORDS",
"external_urls": {
"spotify": "https://open.spotify.com/user/7wbrcexsh97eqgo8wyk3be4zi"
},
"href": "https://api.spotify.com/v1/users/7wbrcexsh97eqgo8wyk3be4zi",
"id": "7wbrcexsh97eqgo8wyk3be4zi",
"type": "user",
"uri": "spotify:user:7wbrcexsh97eqgo8wyk3be4zi"
},
"primary_color": null,
"public": null,
"snapshot_id": "NzM2NCw5NTI1MWE0YTZhYmIxOTVjY2I1Y2U4MGEzODJiYjYxNDcxOTAzZWU5",
"tracks": {
"href": "https://api.spotify.com/v1/playlists/6cqAN7tZC8eUY3862EYnUK/tracks",
"total": 310
},
"type": "playlist",
"uri": "spotify:playlist:6cqAN7tZC8eUY3862EYnUK"
},
{
"collaborative": false,
"description": "",
"external_urls": {
"spotify": "https://open.spotify.com/playlist/4ERLnbsHKTjKRJjLuPjr8g"
},
"href": "https://api.spotify.com/v1/playlists/4ERLnbsHKTjKRJjLuPjr8g",
"id": "4ERLnbsHKTjKRJjLuPjr8g",
"images": [
{
"height": 640,
"url": "https://mosaic.scdn.co/640/ab67616d0000b2734ad6e5838f15401ff7d62856ab67616d0000b2739b19c107109de740bad72df5ab67616d0000b273f7f74100d5cc850e01172cbfab67616d0000b273fe3cf32b1320e8ded39d8c74",
"width": 640
},
{
"height": 300,
"url": "https://mosaic.scdn.co/300/ab67616d0000b2734ad6e5838f15401ff7d62856ab67616d0000b2739b19c107109de740bad72df5ab67616d0000b273f7f74100d5cc850e01172cbfab67616d0000b273fe3cf32b1320e8ded39d8c74",
"width": 300
},
{
"height": 60,
"url": "https://mosaic.scdn.co/60/ab67616d0000b2734ad6e5838f15401ff7d62856ab67616d0000b2739b19c107109de740bad72df5ab67616d0000b273f7f74100d5cc850e01172cbfab67616d0000b273fe3cf32b1320e8ded39d8c74",
"width": 60
}
],
"name": "Playlist rap us 2000",
"owner": {
"display_name": "Ade.bltr",
"external_urls": {
"spotify": "https://open.spotify.com/user/8mntv4fukzl27b86nl85t66sf"
},
"href": "https://api.spotify.com/v1/users/8mntv4fukzl27b86nl85t66sf",
"id": "8mntv4fukzl27b86nl85t66sf",
"type": "user",
"uri": "spotify:user:8mntv4fukzl27b86nl85t66sf"
},
"primary_color": null,
"public": null,
"snapshot_id": "OTYsY2U5ZDkzYzY1ODM4NGFlMzE1MzdmZGM0ZDk1NzA1OGI1NzkwOGMyZA==",
"tracks": {
"href": "https://api.spotify.com/v1/playlists/4ERLnbsHKTjKRJjLuPjr8g/tracks",
"total": 95
},
"type": "playlist",
"uri": "spotify:playlist:4ERLnbsHKTjKRJjLuPjr8g"
},
{
"collaborative": false,
"description": "Game time",
"external_urls": {
"spotify": "https://open.spotify.com/playlist/2ms4lv3Kl23tXdC0O8F0ZW"
},
"href": "https://api.spotify.com/v1/playlists/2ms4lv3Kl23tXdC0O8F0ZW",
"id": "2ms4lv3Kl23tXdC0O8F0ZW",
"images": [
{
"height": null,
"url": "https://i.scdn.co/image/ab67706c0000bebbe28d1988febe51f64b4493bc",
"width": null
}
],
"name": "Gym Workout Rap Playlist ",
"owner": {
"display_name": "Jayden",
"external_urls": {
"spotify": "https://open.spotify.com/user/31xjko2hitivryhl3xm7afsntbdu"
},
"href": "https://api.spotify.com/v1/users/31xjko2hitivryhl3xm7afsntbdu",
"id": "31xjko2hitivryhl3xm7afsntbdu",
"type": "user",
"uri": "spotify:user:31xjko2hitivryhl3xm7afsntbdu"
},
"primary_color": null,
"public": null,
"snapshot_id": "MjUzLGJhZjMyODEwOWIxMDY2OGVjOTQ5Y2VhMTg3NThjNzkyZDc3MGNlNTU=",
"tracks": {
"href": "https://api.spotify.com/v1/playlists/2ms4lv3Kl23tXdC0O8F0ZW/tracks",
"total": 619
},
"type": "playlist",
"uri": "spotify:playlist:2ms4lv3Kl23tXdC0O8F0ZW"
},
{
"collaborative": false,
"description": "Curating Christian Rap culture. Tap the \ud83d\udc9a to follow! The Rapzilla Playlist is the hottest new songs in Christian Hip Hop. Follow our <a href=\"https://open.spotify.com/playlist/4Bm5LgLhIRjXa6HzSNHn2w\">New Songs Daily Playlist</a> also. Cover Artists: DJ Mykael V &amp; 1995",
"external_urls": {
"spotify": "https://open.spotify.com/playlist/4UoWnawInXuG6Z8iyi2YAs"
},
"href": "https://api.spotify.com/v1/playlists/4UoWnawInXuG6Z8iyi2YAs",
"id": "4UoWnawInXuG6Z8iyi2YAs",
"images": [
{
"height": null,
"url": "https://i.scdn.co/image/ab67706c0000bebb10306e9bf3961142807c6c4e",
"width": null
}
],
"name": "Christian Rap - The Rapzilla Playlist",
"owner": {
"display_name": "Rapzilla.com",
"external_urls": {
"spotify": "https://open.spotify.com/user/rapzilla.com"
},
"href": "https://api.spotify.com/v1/users/rapzilla.com",
"id": "rapzilla.com",
"type": "user",
"uri": "spotify:user:rapzilla.com"
},
"primary_color": null,
"public": null,
"snapshot_id": "ODQ2OSwwNDQ1ZDQxZDZmNTdiM2I2ODZlMWI3OWVlY2Q5ZTJlMzM3NTJhMjJl",
"tracks": {
"href": "https://api.spotify.com/v1/playlists/4UoWnawInXuG6Z8iyi2YAs/tracks",
"total": 97
},
"type": "playlist",
"uri": "spotify:playlist:4UoWnawInXuG6Z8iyi2YAs"
},
{
"collaborative": false,
"description": "Damn son, where'd ya find this? Cover: MOUNT WESTMORE",
"external_urls": {
"spotify": "https://open.spotify.com/playlist/37i9dQZF1DX3XgesiUXnsq"
},
"href": "https://api.spotify.com/v1/playlists/37i9dQZF1DX3XgesiUXnsq",
"id": "37i9dQZF1DX3XgesiUXnsq",
"images": [
{
"height": null,
"url": "https://i.scdn.co/image/ab67706f00000003186ba85b84fc0c0af0ceec24",
"width": null
}
],
"name": "Raw & Uncut",
"owner": {
"display_name": "Spotify",
"external_urls": {
"spotify": "https://open.spotify.com/user/spotify"
},
"href": "https://api.spotify.com/v1/users/spotify",
"id": "spotify",
"type": "user",
"uri": "spotify:user:spotify"
},
"primary_color": null,
"public": null,
"snapshot_id": "MTY3MDU2MjAwMCwwMDAwMDAwMDI1OTFhZjdiZDVhNzIyOTE5ZjY2Mjg4OWYzMzZiMzRl",
"tracks": {
"href": "https://api.spotify.com/v1/playlists/37i9dQZF1DX3XgesiUXnsq/tracks",
"total": 100
},
"type": "playlist",
"uri": "spotify:playlist:37i9dQZF1DX3XgesiUXnsq"
}
],
"limit": 10,
"next": "https://api.spotify.com/v1/search?query=playlist%3Arap&type=playlist&offset=10&limit=10",
"offset": 0,
"previous": null,
"total": 20017
}
}

View File

View File

View File

@@ -1,121 +0,0 @@
import os
import re
import socket
import threading
from librespot.audio.decoders import AudioQuality, VorbisOnlyAudioQuality
from librespot.core import Session
from librespot.metadata import TrackId
session: Session
sock: socket
def handler(client: socket.socket, address: str):
req_raw = client.recv(1024 * 1024)
if len(req_raw) == 0:
return
req_arr = req_raw.split(b"\r\n")
req_http_raw = req_arr[0]
req_header_str = req_raw.split(b"\r\n\r\n")[0]
req_body_str = req_raw.split(b"\r\n\r\n")[1]
req_http_arr = req_http_raw.split(b" ")
req_method = req_http_arr[0]
req_uri = req_http_arr[1]
req_http_version = req_http_arr[2]
req_header = {}
for header in req_header_str.split(b"\r\n"):
try:
key, value = header.split(b": ")
except ValueError:
continue
else:
req_header[key.decode().lower()] = value.decode()
status, headers, content, manually = response(client, req_uri.decode(),
req_header, req_body_str)
if not manually:
client.send(req_http_version + b" " + status.encode() + b"\r\n")
client.send(b"Access-Control-Allow-Origin: *\r\n")
for header in headers:
client.send(header.encode() + "\r\n")
client.send(b"\r\n")
client.send(content)
client.close()
class HttpCode:
http_200 = "200 OK"
http_204 = "204 No Content"
http_400 = "400 Bad Request"
http_403 = "403 Forbidden"
http_404 = "404 Not Found"
http_500 = "500 Internal Server Error"
def main():
global session, sock
session = None
if os.path.isfile("credentials.json"):
try:
session = Session.Builder().stored_file().create()
except RuntimeError:
pass
if session is None or not session.is_valid():
username = input("Username: ")
password = input("Password: ")
session = Session.Builder().user_pass(username, password).create()
if not session.is_valid():
return
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(("127.0.0.1", 8080))
sock.listen(5)
while True:
threading.Thread(target=handler, args=sock.accept()).start()
def response(client: socket.socket, uri: str, header: dict,
body: bytes) -> tuple[str, list, bytes, bool]:
if re.search(r"^/audio/track/([0-9a-zA-Z]{22})$", uri) is not None:
track_id_search = re.search(
r"^/audio/track/(?P<TrackID>[0-9a-zA-Z]{22})$", uri)
track_id_str = track_id_search.group("TrackID")
track_id = TrackId.from_base62(track_id_str)
stream = session.content_feeder().load(
track_id, VorbisOnlyAudioQuality(AudioQuality.VERY_HIGH), False,
None)
start = 0
end = stream.input_stream.stream().size()
if header.get("range") is not None:
range_search = re.search(
"^bytes=(?P<start>[0-9]+?)-(?P<end>[0-9]+?)$",
header.get("range"))
if range_search is not None:
start = int(range_search.group("start"))
end = (int(range_search.group("end"))
if int(range_search.group("end")) <=
stream.input_stream.stream().size() else
stream.input_stream.stream().size())
stream.input_stream.stream().skip(start)
client.send(b"HTTP/1.0 200 OK\r\n")
client.send(b"Access-Control-Allow-Origin: *\r\n")
client.send(b"Content-Length: " +
(str(stream.input_stream.stream().size()).encode() if
stream.input_stream.stream().size() == end else "{}-{}/{}"
.format(start, end,
stream.input_stream.stream().size()).encode()) +
b"\r\n")
client.send(b"Content-Type: audio/ogg\r\n")
client.send(b"\r\n")
while True:
if (stream.input_stream.stream().pos() >=
stream.input_stream.stream().size()):
break
byte = stream.input_stream.stream().read(1)
client.send(byte)
return "", [], b"", True
else:
return HttpCode.http_404, [], HttpCode.http_404.encode(), False
if __name__ == "__main__":
main()

View File

@@ -39,6 +39,8 @@ spotify = spotipy.Spotify(auth=token)
root = ttk.Tk()
root.title("Media Controller")
root.attributes("-topmost", True)
root.overrideredirect(1)
# root.geometry("380x160")
sv_ttk.use_dark_theme()
@@ -47,10 +49,14 @@ sv_ttk.use_dark_theme()
# Function to call the Spotify API to play the current track
def play():
play_button.grid_forget()
pause_button.grid(row=0, column=1)
spotify.start_playback()
# Function to call the Spotify API to pause the current track
def pause():
pause_button.grid_forget()
play_button.grid(row=0, column=1)
spotify.pause_playback()
def next():
@@ -140,21 +146,27 @@ def hide_devices():
# audio_analysis_label.config(text=audio_analysis)
# frame = tk.Frame(root)
# frame2 = tk.Frame(root)
play_img = ttk.PhotoImage(file="icons/play-circle.png")
pause_img = ttk.PhotoImage(file="icons/pause-circle.png")
next_img = ttk.PhotoImage(file="icons/skip-next.png")
previous_img = ttk.PhotoImage(file="icons/skip-previous.png")
frame_artist_song = tk.Frame(root)
frame_controls = tk.Frame(root)
# Create the media control buttons and a text label
play_button = tk.Button(root, text="Play", command=play)
pause_button = tk.Button(root, text="Pause", command=pause)
next_button = tk.Button(root, text="Next", command=next)
previous_button = tk.Button(root, text="Previous", command=previous)
play_button = ttk.Button(frame_controls, image=play_img, command=play, borderwidth=0, relief=None)
pause_button = ttk.Button(frame_controls, image=pause_img, command=pause, borderwidth=0)
next_button = ttk.Button(frame_controls, image=next_img, command=next, borderwidth=0)
previous_button = ttk.Button(frame_controls, image=previous_img, command=previous, borderwidth=0)
maxvolume_button = tk.Button(root, text="Max Volume", command=maxvolume)
minvolume_button = tk.Button(root, text="Min Volume", command=minvolume)
randomvolume_button = tk.Button(root, text="Random Volume", command=randomvolume)
volumeslider_button = tk.Scale(root, from_=0, to=100, orient=ttk.HORIZONTAL, command=volumeslider)
volumeslider_button = tk.Scale(root, from_=100, to=0, orient=ttk.VERTICAL, command=volumeslider)
#doaudio_analysis = tk.Button(root, text="Audio Analysis", command=doaudioanalysis)
artist_label = tk.Label(root, text="")
song_label = tk.Label(root, text="")
artist_label = tk.Label(frame_artist_song, text="")
song_label = tk.Label(frame_artist_song, text="")
track_progress_label = tk.Label(root, text="")
track_duration_label = tk.Label(root, text="")
track_combined_label = tk.Label(root, text="")
@@ -169,7 +181,7 @@ username_label = tk.Label(root, text="Username: " + spotify.me()["display_name"]
devices_list = ttk.Listbox(root, selectmode=ttk.SINGLE)
progress_bar = tk.Progressbar(root, orient=ttk.HORIZONTAL, length=180)
progress_bar = tk.Progressbar(root, orient=ttk.HORIZONTAL, length=300)
# Play music locally
@@ -179,31 +191,47 @@ progress_bar = tk.Progressbar(root, orient=ttk.HORIZONTAL, length=180)
#audio_analysis = tk.Label(root, text="")
#track_label = tk.Label(root, text="")
# root.grid_rowconfigure(1, weight=1)
# root.grid_columnconfigure(0)
# root.grid_columnconfigure(1)
# root.grid_columnconfigure(2)
# frame.pack()
# frame2.pack()
# Place the media control buttons and text label on the window
username_label.pack()
maxvolume_button.pack()
minvolume_button.pack()
randomvolume_button.pack()
volumeslider_button.pack()
artist_label.pack()
song_label.pack()
# username_label.grid(row=0, column=0, columnspan=2)
# minvolume_button.grid(row=1, column=1, sticky="e", padx=(0,5))
# maxvolume_button.grid()
# randomvolume_button.grid()
volumeslider_button.grid(row=1, column=1, rowspan=3, sticky="e", padx=(0,5))
frame_artist_song.grid(row=1, column=1, pady=(20,5))
frame_controls.grid(row=2, column=1, pady=(20,0))
artist_label.grid()
song_label.grid()
previous_button.grid(row=0, column=0, padx=(0,10))
play_button.grid(row=0, column=1)
next_button.grid(row=0, column=2, padx=(10,0))
# track_progress_label.grid(row=3, column=0, pady=(20,5), padx=10)
progress_bar.grid(row=3, column=1, pady=(20,5))
# track_duration_label.grid(row=3, column=2, pady=(20,5), padx=10)
# pause_button.grid()
# track_combined_label.grid()
# track_search.grid()
# track_search_button.grid()
# get_devices_button.grid()
#doaudio_analysis.pack()
#audio_analysis.pack()
play_button.pack()
pause_button.pack()
next_button.pack()
previous_button.pack()
track_combined_label.pack()
progress_bar.pack()
track_search.pack()
track_search_button.pack()
get_devices_button.pack()
# start_local_playback_button.pack()
# audio_analysis_button.pack()
# album_image_label.pack()
root.bind("<Return>", search)
# Function to update the song label with the current track's name
@@ -225,17 +253,17 @@ def update_song_label():
# Set the text of the song label to the track's name
song_label.config(text=track_name)
artist_label.config(text=artist_name)
track_progress_label.config(text=((track_progress//(1000*60))%60, "m", (track_progress//1000)%60, "s"))
track_duration_label.config(text=((track_duration//(1000*60))%60, "m", (track_duration//1000)%60, "s"))
track_progress_min = track_progress//(1000*60)%60
track_progress_sec = (track_progress//1000)%60
track_duration_min = track_duration//(1000*60)%60
track_duration_sec = (track_duration//1000)%60
track_progress_label.config(text=("{}:{:02d}".format(track_progress_min, track_progress_sec)))
track_duration_label.config(text=("{}:{:02d}".format(track_duration_min, track_duration_sec)))
progress_bar.config(maximum=track_duration)
progress_bar.config(value=track_progress)
# urllib.request.urlretrieve(album_image_url, "album_image.jpg")
# image_data = tk.PhotoImage("album_image.jpg")
# album_image_label.config(image=image_data)
track_progress_min = track_progress//(1000*60)%60
track_progress_sec = (track_progress//1000)%60
track_duration_min = track_duration//(1000*60)%60
track_duration_sec = (track_duration//1000)%60
track_combined_label.config(text=("{}:{:02d} / {}:{:02d}".format(track_progress_min, track_progress_sec, track_duration_min, track_duration_sec)))
# track_combined_label.config(text=((track_progress//(1000*60))%60, ":", (track_progress//1000)%60, "/", (track_duration//(1000*60))%60, ":", (track_duration//1000)%60))

BIN
schematics/design.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB