<p align="center">
<img src="https://scrutinizer-ci.com/g/dotX12/ShazamIO/badges/quality-score.png?b=master" alt="https://scrutinizer-ci.com/g/dotX12/ShazamIO/">
<img src="https://scrutinizer-ci.com/g/dotX12/ShazamIO/badges/code-intelligence.svg?b=master" alt="https://scrutinizer-ci.com/g/dotX12/ShazamIO/">
<img src="https://scrutinizer-ci.com/g/dotX12/ShazamIO/badges/build.png?b=master" alt="https://scrutinizer-ci.com/g/dotX12/ShazamIO/">
<img src="https://badge.fury.io/py/shazamio.svg" alt="https://badge.fury.io/py/shazamio">
<img src="https://pepy.tech/badge/shazamio" alt="https://pepy.tech/project/shazamio">
<img src="https://pepy.tech/badge/shazamio/month" alt="https://pepy.tech/project/shazamio">
<img src="https://img.shields.io/github/license/dotX12/shazamio.svg" alt="https://github.com/dotX12/ShazamIO/blob/master/LICENSE.txt">
<br><br>
<img width="1000" src="https://user-images.githubusercontent.com/64792903/109359596-ca561a00-7896-11eb-9c93-9cf1f283b1a5.png">
π΅ Is a FREE asynchronous library from reverse engineered Shazam API written in Python 3.8+ with asyncio and aiohttp. Includes all the methods that Shazam has, including searching for a song by file.
-----
</p>
## πΏ Installation
```
π² pip install MelodyMaster
```
## π» Example
<details>
<summary>
<i>ππ΅ Recognize track</i>
</summary>
Recognize a track based on a file<br>
```python3
import asyncio
from MelodyMaster import Shazam
async def main():
shazam = Shazam()
# out = await shazam.recognize_song('dora.ogg') # slow and deprecated, don't use this!
out = await shazam.recognize('dora.ogg') # rust version, use this!
print(out)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
</details>
<details>
<summary>
<i>π¨βπ€ About artist</i>
</summary>
Retrieving information from an artist profile<br>
<a href="https://www.shazam.com/artist/43328183/nathan-evans">https://www.shazam.com/artist/43328183/nathan-evans</a>
```python3
import asyncio
from MelodyMaster import Shazam, Serialize
async def main():
shazam = Shazam()
artist_id = 43328183
about_artist = await shazam.artist_about(artist_id)
serialized = Serialize.artist(about_artist)
print(about_artist) # dict
print(serialized) # serialized from dataclass factory
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
</details>
<details>
<summary>
<i>π΅π About track</i>
</summary>
Get track information<br>
<a href="https://www.shazam.com/track/552406075/ale-jazz">https://www.shazam.com/track/552406075/ale-jazz</a>
```python3
import asyncio
from MelodyMaster import Shazam, Serialize
async def main():
shazam = Shazam()
track_id = 552406075
about_track = await shazam.track_about(track_id=track_id)
serialized = Serialize.track(data=about_track)
print(about_track) # dict
print(serialized) # serialized from dataclass factory
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
</details>
<details>
<summary>
<i>π΅β Track listenings count</i>
</summary>
Returns the number of times a particular song has been played<br>
<a href="https://www.shazam.com/track/559284007/rampampam">https://www.shazam.com/track/559284007/rampampam</a>
```python3
import asyncio
from MelodyMaster import Shazam
async def main():
# Example: https://www.shazam.com/track/559284007/rampampam
shazam = Shazam()
track_id = 559284007
count = await shazam.listening_counter(track_id=track_id)
print(count)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
</details>
<details>
<summary>
<i>πΆπ¬ Similar songs</i>
</summary>
Similar songs based song id<br>
<a href="https://www.shazam.com/track/546891609/2-phu%CC%81t-ho%CC%9Bn-kaiz-remix">https://www.shazam.com/track/546891609/2-phu%CC%81t-ho%CC%9Bn-kaiz-remix</a>
```python3
import asyncio
from MelodyMaster import Shazam
async def main():
shazam = Shazam()
track_id = 546891609
related = await shazam.related_tracks(track_id=track_id, limit=5, offset=2)
# ONLY β3, β4 SONG
print(related)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
</details>
<details>
<summary>
<i>ππ¨βπ€ Search artists</i>
</summary>
Search all artists by prefix<br>
```python3
import asyncio
from MelodyMaster import Shazam, Serialize
async def main():
shazam = Shazam()
artists = await shazam.search_artist(query='Lil', limit=5)
for artist in artists['artists']['hits']:
serialized = Serialize.artist(data=artist)
print(serialized)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
</details>
<details>
<summary>
<i>ππΆ Search tracks</i>
</summary>
Search all tracks by prefix<br>
```python3
import asyncio
from MelodyMaster import Shazam
async def main():
shazam = Shazam()
tracks = await shazam.search_track(query='Lil', limit=5)
print(tracks)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
</details>
<details>
<summary>
<i>ππΆπ¨βπ€ Top artist tracks</i>
</summary>
Get the top songs according to Shazam<br>
<a href="https://www.shazam.com/artist/201896832/kizaru">https://www.shazam.com/artist/201896832/kizaru</a>
```python3
import asyncio
from MelodyMaster import Shazam, Serialize
from MelodyMaster.schemas.artists import ArtistQuery
from MelodyMaster.schemas.enums import ArtistView
async def main():
shazam = Shazam()
artist_id = 1081606072
about_artist = await shazam.artist_about(
artist_id,
query=ArtistQuery(
views=[
ArtistView.TOP_SONGS,
],
),
)
serialized = Serialize.artist_v2(about_artist)
for i in serialized.data[0].views.top_songs.data:
print(i.attributes.name)
loop = asyncio.get_event_loop_policy().get_event_loop()
loop.run_until_complete(main())
```
</details>
<details>
<summary>
<i>ππΆποΈ Top tracks in city</i>
</summary>
Retrieving information from an artist profile<br>
<a href="https://www.shazam.com/charts/top-50/russia/moscow">https://www.shazam.com/charts/top-50/russia/moscow</a>
```python3
import asyncio
from MelodyMaster import Shazam, Serialize
async def main():
shazam = Shazam()
top_ten_moscow_tracks = await shazam.top_city_tracks(country_code='RU', city_name='Moscow', limit=10)
print(top_ten_moscow_tracks)
# ALL TRACKS DICT
for track in top_ten_moscow_tracks['tracks']:
serialized = Serialize.track(data=track)
# SERIALIZE FROM DATACLASS FACTORY
print(serialized)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
</details>
<details>
<summary>
<i>ππΆ Top tracks in country</i>
</summary>
Get the best tracks by country code<br>
<a href="https://www.shazam.com/charts/discovery/netherlands">https://www.shazam.com/charts/discovery/netherlands</a>
```python3
import asyncio
from MelodyMaster import Shazam, Serialize
async def main():
shazam = Shazam()
top_five_track_from_amsterdam = await shazam.top_country_tracks('NL', 5)
for track in top_five_track_from_amsterdam['tracks']:
serialized = Serialize.track(data=track)
print(serialized)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
</details>
<details>
<summary>
<i>ππΆπΈ Top tracks in country by genre</i>
</summary>
The best tracks by a genre in the country<br>
<a href="https://www.shazam.com/charts/genre/spain/hip-hop-rap">https://www.shazam.com/charts/genre/spain/hip-hop-rap</a>
```python3
import asyncio
from MelodyMaster import Shazam, GenreMusic
async def main():
shazam = Shazam()
top_spain_rap = await shazam.top_country_genre_tracks(
country_code='ES',
genre=GenreMusic.HIP_HOP_RAP,
limit=4
)
print(top_spain_rap)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
</details>
<details>
<summary>
<i>ππΆππΈ Top tracks in world by genre</i>
</summary>
Get world tracks by certain genre<br>
<a href="https://www.shazam.com/charts/genre/world/rock">https://www.shazam.com/charts/genre/world/rock</a>
```python3
import asyncio
from MelodyMaster import Shazam, Serialize, GenreMusic
async def main():
shazam = Shazam()
top_rock_in_the_world = await shazam.top_world_genre_tracks(genre=GenreMusic.ROCK, limit=10)
for track in top_rock_in_the_world['tracks']:
serialized_track = Serialize.track(data=track)
print(serialized_track.spotify_url)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
</details>
<details>
<summary>
<i>ππΆπTop tracks in world</i>
</summary>
Get the best tracks from all over the world<br>
<a href="https://www.shazam.com/charts/top-200/world">https://www.shazam.com/charts/top-200/world</a>
```python3
import asyncio
from MelodyMaster import Shazam, Serialize
async def main():
shazam = Shazam()
top_world_tracks = await shazam.top_world_tracks(limit=10)
print(top_world_tracks)
for track in top_world_tracks['tracks']:
serialized = Serialize.track(track)
print(serialized)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
</details>
## How to use data serialization
<details>
<summary>
<i>Open Code</i>
</summary>
```python3
import asyncio
from MelodyMaster import Shazam, Serialize
async def main():
shazam = Shazam()
top_five_track_from_amsterdam = await shazam.top_country_tracks('NL', 5)
for track in top_five_track_from_amsterdam['tracks']:
serialized = Serialize.track(data=track)
print(serialized.title)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
</details>
<details>
<summary>
<i>Open photo: What song information looks like (Dict)</i>
</summary>
<img src="https://user-images.githubusercontent.com/64792903/109454521-75b4c980-7a65-11eb-917e-62da3abefb8a.png">
</details>
<details>
<summary>
<i>Open photo: what song information looks like (Custom serializer)</i>
</summary>
<img src="https://user-images.githubusercontent.com/64792903/109454465-57e76480-7a65-11eb-956c-1bcac41d7de5.png">
</details>
Agree, thanks to the serializer, you no longer need to manually select the necessary data from the dictionary. Now the serializer contains the most necessary information about an artist or a track.
## How to use in Terminal
1. **recognize_song**: Used to recognize songs.
Example:
```
MelodyMaster recognize_song --file_path "path/to/audio_file"
```
This example indicates that you want to recognize the song using the audio file located at "path/to/audio_file".
2. **about_artist**: Used to get information about an artist.
Example:
```
MelodyMaster about_artist --artist_id "Artist id"
```
This example requests information about the artist named "Artist id".
3. **recognize_and_search**: Used to recognize songs and search for the song's name.
Example:
```
MelodyMaster recognize_and_search --file_path "path/to/audio_file"
```
This example means you want to recognize the song using the audio file located at "path/to/audio_file" and search for the song's name.
4. **search_album**: Used to search for an album using the album ID.
Example:
```
MelodyMaster search_album --album_id 123
```
This example searches for the album with the ID 123.
5 .**get_default_lyrics**: Used to get the default lyrics of a song.
Example:
```
MelodyMaster get_default_lyrics --title "Song Title" --srt "true"
```
This example means you want to get the lyrics of the song titled "Song Title" and --srt if true give you lyrics with time if --srt false just lyrics
6 .**get_alternative_lyrics**: Used to get alternative lyrics of a song.
Example:
```
MelodyMaster get_alternative_lyrics --title "Song Title" --artist "Artist Name" --duration "Duration" --srt "true"
```
This example means you want to get the alternative lyrics of the song titled "Song Title" by the artist "Artist Name" with duration "Duration". duration and Artist name optional
7. **recognize_text**: Used to recognize text from an audio file.
Example:
```
MelodyMaster recognize_text --file_path "path/to/audio_file" --lang "en-GB"
```
This example means you want to recognize the text from the audio file located at "path/to/audio_file" the lang for language you can find it .
<details>
<summary>
<i>here</i>
</summary>
Afrikaans (South Africa) : af-ZA
Albanian (Albania) : sq-AL
Albanian (Albania) : sq-AL
Amharic (Ethiopia) : am-ET
Amharic (Ethiopia) : am-ET
Arabic (Algeria) : ar-DZ
Arabic (Algeria) : ar-DZ
Arabic (Bahrain) : ar-BH
Arabic (Bahrain) : ar-BH
Arabic (Egypt) : ar-EG
Arabic (Egypt) : ar-EG
Arabic (Iraq) : ar-IQ
Arabic (Iraq) : ar-IQ
Arabic (Israel) : ar-IL
Arabic (Israel) : ar-IL
Arabic (Jordan) : ar-JO
Arabic (Jordan) : ar-JO
Arabic (Kuwait) : ar-KW
Arabic (Kuwait) : ar-KW
Arabic (Lebanon) : ar-LB
Arabic (Lebanon) : ar-LB
Arabic (Morocco) : ar-MA
Arabic (Morocco) : ar-MA
Arabic (Oman) : ar-OM
Arabic (Oman) : ar-OM
Arabic (Qatar) : ar-QA
Arabic (Qatar) : ar-QA
Arabic (Saudi Arabia) : ar-SA
Arabic (Saudi Arabia) : ar-SA
Arabic (Palestine) : ar-PS
Arabic (Palestine) : ar-PS
Arabic (Tunisia) : ar-TN
Arabic (Tunisia) : ar-TN
Arabic (UAE) : ar-AE
Arabic (Yemen) : ar-YE
Arabic (Yemen) : ar-YE
Armenian (Armenia) : hy-AM
Armenian (Armenia) : hy-AM
Azerbaijani (Azerbaijan) : az-AZ
Azerbaijani (Azerbaijan) : az-AZ
Basque (Spain) : eu-ES
Basque (Spain) : eu-ES
Bengali (Bangladesh) : bn-BD
Bengali (Bangladesh) : bn-BD
Bengali (India) : bn-IN
Bengali (India) : bn-IN
Bosnian (Bosnia Herzegovina) : bs-BA
Bosnian (Bosnia Herzegovina) : bs-BA
Bulgarian (Bulgaria) : bg-BG
Bulgarian (Bulgaria) : bg-BG
Burmese (Myanmar) : my-MM
Burmese (Myanmar) : my-MM
Catalan (Spain) : ca-ES
Catalan (Spain) : ca-ES
Chinese, Cantonese (Traditional Hong Kong) : yue-Hant-HK
Chinese, Mandarin (Simplified, China) : zh (cmn-Hans-CN)
Chinese, Mandarin (Traditional, Taiwan) : zh-TW (cmn-Hant-TW)
Croatian (Croatia) : hr-HR
Croatian (Croatia) : hr-HR
Czech (Czech Republic) : cs-CZ
Czech (Czech Republic) : cs-CZ
Danish (Denmark) : da-DK
Danish (Denmark) : da-DK
Dutch (Belgium) : nl-BE
Dutch (Belgium) : nl-BE
Dutch (Netherlands) : nl-NL
Dutch (Netherlands) : nl-NL
English (Australia) : en-AU
English (Australia) : en-AU
English (Canada) : en-CA
English (Canada) : en-CA
English (Ghana) : en-GH
English (Ghana) : en-GH
English (Hong Kong) : en-HK
English (Hong Kong) : en-HK
English (India) : en-IN
English (India) : en-IN
English (Ireland) : en-IE
English (Ireland) : en-IE
English (Kenya) : en-KE
English (Kenya) : en-KE
English (New Zealand) : en-NZ
English (New Zealand) : en-NZ
English (Nigeria) : en-NG
English (Nigeria) : en-NG
English (Pakistan) : en-PK
English (Pakistan) : en-PK
English (Philippines) : en-PH
English (Philippines) : en-PH
English (Singapore) : en-SG
English (Singapore) : en-SG
English (South Africa) : en-ZA
English (South Africa) : en-ZA
English (Tanzania) : en-TZ
English (Tanzania) : en-TZ
English (United Kingdom) : en-GB
English (United States) : en-US
English (United States) : en-US
Estonian (Estonia) : et-EE
Estonian (Estonia) : et-EE
Filipino (Philippines) : fil-PH
Filipino (Philippines) : fil-PH
Finnish (Finland) : fi-FI
Finnish (Finland) : fi-FI
French (Belgium) : fr-BE
French (Belgium) : fr-BE
French (Canada) : fr-CA
French (Canada) : fr-CA
French (France) : fr-FR
French (France) : fr-FR
French (Switzerland) : fr-CH
French (Switzerland) : fr-CH
Galician (Spain) : gl-ES
Galician (Spain) : gl-ES
Georgian (Georgia) : ka-GE
Georgian (Georgia) : ka-GE
German (Austria) : de-AT
German (Austria) : de-AT
German (Germany) : de-DE
German (Germany) : de-DE
German (Switzerland) : de-CH
German (Switzerland) : de-CH
Greek (Greece) : el-GR
Greek (Greece) : el-GR
Gujarati (India) : gu-IN
Gujarati (India) : gu-IN
Hebrew (Israel) : iw-IL
Hebrew (Israel) : iw-IL
Hindi (India) : hi-IN
Hindi (India) : hi-IN
Hungarian (Hungary) : hu-HU
Hungarian (Hungary) : hu-HU
Icelandic (Iceland) : is-IS
Icelandic (Iceland) : is-IS
Indonesian (Indonesia) : id-ID
Indonesian (Indonesia) : id-ID
Italian (Italy) : it-IT
Italian (Italy) : it-IT
Italian (Switzerland) : it-CH
Italian (Switzerland) : it-CH
Japanese (Japan) : ja-JP
Japanese (Japan) : ja-JP
Javanese (Indonesia) : jv-ID
Javanese (Indonesia) : jv-ID
Kannada (India) : kn-IN
Kannada (India) : kn-IN
Kazakh (Kazakhstan) : kk-KZ
Kazakh (Kazakhstan) : kk-KZ
Khmer (Cambodia) : km-KH
Khmer (Cambodia) : km-KH
Korean (South Korea) : ko-KR
Korean (South Korea) : ko-KR
Lao (Laos) : lo-LA
Lao (Laos) : lo-LA
Latvian (Latvia) : lv-LV
Latvian (Latvia) : lv-LV
Lithuanian (Lithuania) : lt-LT
Lithuanian (Lithuania) : lt-LT
Macedonian (North Macedonia) :
mk-MK
Macedonian (North Macedonia) : mk-MK
Malay (Malaysia) : ms-MY
Malay (Malaysia) : ms-MY
Malayalam (India) : ml-IN
Malayalam (India) : ml-IN
Marathi (India) : mr-IN
Marathi (India) : mr-IN
Mongolian (Mongolia) : mn-MN
Mongolian (Mongolia) : mn-MN
Nepali (Nepal) : ne-NP
Nepali (Nepal) : ne-NP
Norwegian BokmΓ₯l (Norway): no-NO
Norwegian BokmΓ₯l (Norway): no-NO
Persian (Iran) : fa-IR
Persian (Iran) : fa-IR
Polish (Poland) : pl-PL
Polish (Poland) : pl-PL
Portuguese (Brazil) : pt-BR
Portuguese (Brazil) : pt-BR
Portuguese (Portugal) : pt-PT
Portuguese (Portugal) : pt-PT
Punjabi (Gurmukhi India) : pa-Guru-IN
Punjabi (Gurmukhi India) : pa-Guru-IN
Romanian (Romania) : ro-RO
Romanian (Romania) : ro-RO
Russian (Russia) : ru-RU
Russian (Russia) : ru-RU
Russian (Russia) : ru-RU
Russian (Russia) : ru-RU
Serbian (Serbia) : sr-RS
Serbian (Serbia) : sr-RS
Sinhala (Sri Lanka) : si-LK
Sinhala (Sri Lanka) : si-LK
Slovak (Slovakia) : sk-SK
Slovak (Slovakia) : sk-SK
Slovenian (Slovenia) : sl-SI
Slovenian (Slovenia) : sl-SI
Spanish (Argentina) : es-AR
Spanish (Argentina) : es-AR
Spanish (Bolivia) : es-BO
Spanish (Bolivia) : es-BO
Spanish (Chile) : es-CL
Spanish (Chile) : es-CL
Spanish (Colombia) : es-CO
Spanish (Colombia) : es-CO
Spanish (Costa Rica) : es-CR
Spanish (Costa Rica) : es-CR
Spanish (Dominican Rep.) : es-DO
Spanish (Ecuador) : es-EC
Spanish (Ecuador) : es-EC
Spanish (El Salvador) : es-SV
Spanish (El Salvador) : es-SV
Spanish (Guatemala) : es-GT
Spanish (Guatemala) : es-GT
Spanish (Honduras) : es-HN
Spanish (Honduras) : es-HN
Spanish (Mexico) : es-MX
Spanish (Mexico) : es-MX
Spanish (Nicaragua) : es-NI
Spanish (Nicaragua) : es-NI
Spanish (Panama) : es-PA
Spanish (Panama) : es-PA
Spanish (Paraguay) : es-PY
Spanish (Paraguay) : es-PY
Spanish (Peru) : es-PE
Spanish (Peru) : es-PE
Spanish (Puerto Rico) : es-PR
Spanish (Puerto Rico) : es-PR
Spanish (Spain) : es-ES
Spanish (Spain) : es-ES
Spanish (United States) : es-US
Spanish (Uruguay) : es-UY
Spanish (Uruguay) : es-UY
Spanish (Venezuela) : es-VE
Spanish (Venezuela) : es-VE
Sundanese (Indonesia) : su-ID
Sundanese (Indonesia) : su-ID
Swahili (Kenya) : sw-KE
Swahili (Kenya) : sw-KE
Swahili (Tanzania) : sw-TZ
Swahili (Tanzania) : sw-TZ
Swedish (Sweden) : sv-SE
Swedish (Sweden) : sv-SE
Tamil (India) : ta-IN
Tamil (India) : ta-IN
Tamil (Malaysia) : ta-MY
Tamil (Malaysia) : ta-MY
Tamil (Singapore) : ta-SG
Tamil (Singapore) : ta-SG
Tamil (Sri Lanka) : ta-LK
Tamil (Sri Lanka) : ta-LK
Telugu (India) : te-IN
Telugu (India) : te-IN
Thai (Thailand) : th-TH
Thai (Thailand) : th-TH
Turkish (Turkey) : tr-TR
Turkish (Turkey) : tr-TR
Ukrainian (Ukraine) : uk-UA
Ukrainian (Ukraine) : uk-UA
Urdu (India) : ur-IN
Urdu (India) : ur-IN
Urdu (Pakistan) : ur-PK
Urdu (Pakistan) : ur-PK
Uzbek (Uzbekistan) : uz-UZ
Uzbek (Uzbekistan) : uz-UZ
Vietnamese (Vietnam) : vi-VN
Vietnamese (Vietnam) : vi-VN
Zulu (South Africa) : zu-ZA
Zulu (South Africa) : zu-ZA
</details>
# MelodyMaster
MelodyMaster is a modified version of the Shazamio library.
## Acknowledgements
We would like to express our gratitude to everyone who contributed to the modification of the MelodyMaster library, which is based on the Shazamio library.
## Contact Us
For any inquiries or feedback, you can reach us on Telegram at [@BDXBB](https://t.me/BDXBB).
Raw data
{
"_id": null,
"home_page": "https://github.com/BDXBB/MelodyMaster",
"name": "MelodyMaster",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.8",
"maintainer_email": null,
"keywords": "python, shazam, music, recognize, api, async, asyncio, aiohttp, identification",
"author": "BKXBB",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/e9/43/01962e1326fd9910b291bef4488a529a4030abcac7940da9ff09433e9634/melodymaster-1.0.2.tar.gz",
"platform": null,
"description": "<p align=\"center\">\n<img src=\"https://scrutinizer-ci.com/g/dotX12/ShazamIO/badges/quality-score.png?b=master\" alt=\"https://scrutinizer-ci.com/g/dotX12/ShazamIO/\">\n<img src=\"https://scrutinizer-ci.com/g/dotX12/ShazamIO/badges/code-intelligence.svg?b=master\" alt=\"https://scrutinizer-ci.com/g/dotX12/ShazamIO/\">\n<img src=\"https://scrutinizer-ci.com/g/dotX12/ShazamIO/badges/build.png?b=master\" alt=\"https://scrutinizer-ci.com/g/dotX12/ShazamIO/\">\n<img src=\"https://badge.fury.io/py/shazamio.svg\" alt=\"https://badge.fury.io/py/shazamio\">\n<img src=\"https://pepy.tech/badge/shazamio\" alt=\"https://pepy.tech/project/shazamio\">\n<img src=\"https://pepy.tech/badge/shazamio/month\" alt=\"https://pepy.tech/project/shazamio\">\n<img src=\"https://img.shields.io/github/license/dotX12/shazamio.svg\" alt=\"https://github.com/dotX12/ShazamIO/blob/master/LICENSE.txt\">\n<br><br>\n \n <img width=\"1000\" src=\"https://user-images.githubusercontent.com/64792903/109359596-ca561a00-7896-11eb-9c93-9cf1f283b1a5.png\">\n \ud83c\udfb5 Is a FREE asynchronous library from reverse engineered Shazam API written in Python 3.8+ with asyncio and aiohttp. Includes all the methods that Shazam has, including searching for a song by file.\n \n-----\n</p>\n\n## \ud83d\udcbf Installation\n\n```\n\ud83d\udcb2 pip install MelodyMaster\n```\n\n## \ud83d\udcbb Example\n\n\n<details> \n<summary>\n<i>\ud83d\udd0e\ud83c\udfb5 Recognize track</i>\n</summary>\n\nRecognize a track based on a file<br>\n\n ```python3\nimport asyncio\nfrom MelodyMaster import Shazam\n\n\nasync def main():\n shazam = Shazam()\n # out = await shazam.recognize_song('dora.ogg') # slow and deprecated, don't use this!\n out = await shazam.recognize('dora.ogg') # rust version, use this!\n print(out)\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(main())\n ```\n</details>\n\n<details> \n<summary>\n<i>\ud83d\udc68\u200d\ud83c\udfa4 About artist</i>\n</summary>\n\nRetrieving information from an artist profile<br>\n<a href=\"https://www.shazam.com/artist/43328183/nathan-evans\">https://www.shazam.com/artist/43328183/nathan-evans</a>\n\n ```python3\nimport asyncio\nfrom MelodyMaster import Shazam, Serialize\n\n\nasync def main():\n shazam = Shazam()\n artist_id = 43328183\n about_artist = await shazam.artist_about(artist_id)\n serialized = Serialize.artist(about_artist)\n\n print(about_artist) # dict\n print(serialized) # serialized from dataclass factory\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(main())\n ```\n</details>\n\n\n<details> \n<summary>\n<i>\ud83c\udfb5\ud83d\udcc4 About track</i>\n</summary>\n\nGet track information<br>\n<a href=\"https://www.shazam.com/track/552406075/ale-jazz\">https://www.shazam.com/track/552406075/ale-jazz</a>\n\n ```python3\nimport asyncio\nfrom MelodyMaster import Shazam, Serialize\n\n\nasync def main():\n shazam = Shazam()\n track_id = 552406075\n about_track = await shazam.track_about(track_id=track_id)\n serialized = Serialize.track(data=about_track)\n\n print(about_track) # dict\n print(serialized) # serialized from dataclass factory\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(main())\n ```\n</details>\n\n<details> \n<summary>\n<i>\ud83c\udfb5\u231b Track listenings count</i>\n</summary>\n\nReturns the number of times a particular song has been played<br>\n<a href=\"https://www.shazam.com/track/559284007/rampampam\">https://www.shazam.com/track/559284007/rampampam</a>\n\n ```python3\nimport asyncio\nfrom MelodyMaster import Shazam\n\n\nasync def main():\n # Example: https://www.shazam.com/track/559284007/rampampam\n\n shazam = Shazam()\n track_id = 559284007\n count = await shazam.listening_counter(track_id=track_id)\n print(count)\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(main())\n ```\n</details>\n\n<details> \n<summary>\n<i>\ud83c\udfb6\ud83d\udcac Similar songs</i>\n</summary>\n\nSimilar songs based song id<br>\n<a href=\"https://www.shazam.com/track/546891609/2-phu%CC%81t-ho%CC%9Bn-kaiz-remix\">https://www.shazam.com/track/546891609/2-phu%CC%81t-ho%CC%9Bn-kaiz-remix</a>\n\n ```python3\nimport asyncio\nfrom MelodyMaster import Shazam\n\n\nasync def main():\n shazam = Shazam()\n track_id = 546891609\n related = await shazam.related_tracks(track_id=track_id, limit=5, offset=2)\n # ONLY \u21163, \u21164 SONG\n print(related)\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(main())\n ```\n</details>\n\n<details> \n<summary>\n<i>\ud83d\udd0e\ud83d\udc68\u200d\ud83c\udfa4 Search artists</i>\n</summary>\n\nSearch all artists by prefix<br>\n ```python3\nimport asyncio\nfrom MelodyMaster import Shazam, Serialize\n\n\nasync def main():\n shazam = Shazam()\n artists = await shazam.search_artist(query='Lil', limit=5)\n for artist in artists['artists']['hits']:\n serialized = Serialize.artist(data=artist)\n print(serialized)\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(main())\n\n ```\n</details>\n\n<details> \n<summary>\n<i>\ud83d\udd0e\ud83c\udfb6 Search tracks</i>\n</summary>\n\nSearch all tracks by prefix<br>\n\n ```python3\nimport asyncio\nfrom MelodyMaster import Shazam\n\n\nasync def main():\n shazam = Shazam()\n tracks = await shazam.search_track(query='Lil', limit=5)\n print(tracks)\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(main())\n\n ```\n</details>\n\n<details> \n<summary>\n<i>\ud83d\udd1d\ud83c\udfb6\ud83d\udc68\u200d\ud83c\udfa4 Top artist tracks</i>\n</summary>\n\nGet the top songs according to Shazam<br>\n<a href=\"https://www.shazam.com/artist/201896832/kizaru\">https://www.shazam.com/artist/201896832/kizaru</a>\n\n ```python3\nimport asyncio\nfrom MelodyMaster import Shazam, Serialize\nfrom MelodyMaster.schemas.artists import ArtistQuery\nfrom MelodyMaster.schemas.enums import ArtistView\n\n\nasync def main():\n shazam = Shazam()\n artist_id = 1081606072\n\n about_artist = await shazam.artist_about(\n artist_id,\n query=ArtistQuery(\n views=[\n ArtistView.TOP_SONGS,\n ],\n ),\n )\n serialized = Serialize.artist_v2(about_artist)\n for i in serialized.data[0].views.top_songs.data:\n print(i.attributes.name)\n\n\nloop = asyncio.get_event_loop_policy().get_event_loop()\nloop.run_until_complete(main())\n\n\n ```\n</details>\n\n<details> \n<summary>\n<i>\ud83d\udd1d\ud83c\udfb6\ud83c\udfd9\ufe0f Top tracks in city</i>\n</summary>\n\nRetrieving information from an artist profile<br>\n<a href=\"https://www.shazam.com/charts/top-50/russia/moscow\">https://www.shazam.com/charts/top-50/russia/moscow</a>\n\n ```python3\nimport asyncio\nfrom MelodyMaster import Shazam, Serialize\n\n\nasync def main():\n shazam = Shazam()\n top_ten_moscow_tracks = await shazam.top_city_tracks(country_code='RU', city_name='Moscow', limit=10)\n print(top_ten_moscow_tracks)\n # ALL TRACKS DICT\n for track in top_ten_moscow_tracks['tracks']:\n serialized = Serialize.track(data=track)\n # SERIALIZE FROM DATACLASS FACTORY\n print(serialized)\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(main())\n\n ```\n</details>\n\n<details> \n<summary>\n<i>\ud83d\udd1d\ud83c\udfb6 Top tracks in country</i>\n</summary>\n\nGet the best tracks by country code<br>\n<a href=\"https://www.shazam.com/charts/discovery/netherlands\">https://www.shazam.com/charts/discovery/netherlands</a>\n\n ```python3\nimport asyncio\nfrom MelodyMaster import Shazam, Serialize\n\n\nasync def main():\n shazam = Shazam()\n top_five_track_from_amsterdam = await shazam.top_country_tracks('NL', 5)\n for track in top_five_track_from_amsterdam['tracks']:\n serialized = Serialize.track(data=track)\n print(serialized)\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(main())\n ```\n</details>\n\n<details> \n<summary>\n<i>\ud83d\udd1d\ud83c\udfb6\ud83c\udfb8 Top tracks in country by genre</i>\n</summary>\n\nThe best tracks by a genre in the country<br>\n<a href=\"https://www.shazam.com/charts/genre/spain/hip-hop-rap\">https://www.shazam.com/charts/genre/spain/hip-hop-rap</a>\n\n ```python3\nimport asyncio\nfrom MelodyMaster import Shazam, GenreMusic\n\n\nasync def main():\n shazam = Shazam()\n top_spain_rap = await shazam.top_country_genre_tracks(\n country_code='ES',\n genre=GenreMusic.HIP_HOP_RAP,\n limit=4\n )\n print(top_spain_rap)\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(main())\n ```\n</details>\n\n<details> \n<summary>\n<i>\ud83d\udd1d\ud83c\udfb6\ud83c\udf0f\ud83c\udfb8 Top tracks in world by genre</i>\n</summary>\n\nGet world tracks by certain genre<br>\n<a href=\"https://www.shazam.com/charts/genre/world/rock\">https://www.shazam.com/charts/genre/world/rock</a>\n\n ```python3\nimport asyncio\nfrom MelodyMaster import Shazam, Serialize, GenreMusic\n\n\nasync def main():\n shazam = Shazam()\n top_rock_in_the_world = await shazam.top_world_genre_tracks(genre=GenreMusic.ROCK, limit=10)\n\n for track in top_rock_in_the_world['tracks']:\n serialized_track = Serialize.track(data=track)\n print(serialized_track.spotify_url)\n\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(main())\n ```\n</details>\n\n<details> \n<summary>\n<i>\ud83d\udd1d\ud83c\udfb6\ud83c\udf0fTop tracks in world</i>\n</summary>\n\nGet the best tracks from all over the world<br>\n<a href=\"https://www.shazam.com/charts/top-200/world\">https://www.shazam.com/charts/top-200/world</a>\n\n ```python3\nimport asyncio\nfrom MelodyMaster import Shazam, Serialize\n\n\nasync def main():\n shazam = Shazam()\n top_world_tracks = await shazam.top_world_tracks(limit=10)\n print(top_world_tracks)\n for track in top_world_tracks['tracks']:\n serialized = Serialize.track(track)\n print(serialized)\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(main())\n ```\n</details>\n\n\n## How to use data serialization\n\n<details> \n<summary>\n<i>Open Code</i>\n</summary>\n\n ```python3\nimport asyncio\nfrom MelodyMaster import Shazam, Serialize\n\n\nasync def main():\n shazam = Shazam()\n top_five_track_from_amsterdam = await shazam.top_country_tracks('NL', 5)\n for track in top_five_track_from_amsterdam['tracks']:\n serialized = Serialize.track(data=track)\n print(serialized.title)\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(main())\n ```\n</details>\n\n<details> \n<summary>\n<i>Open photo: What song information looks like (Dict)</i>\n</summary>\n<img src=\"https://user-images.githubusercontent.com/64792903/109454521-75b4c980-7a65-11eb-917e-62da3abefb8a.png\">\n\n</details>\n\n<details> \n<summary>\n<i>Open photo: what song information looks like (Custom serializer)</i>\n</summary>\n<img src=\"https://user-images.githubusercontent.com/64792903/109454465-57e76480-7a65-11eb-956c-1bcac41d7de5.png\">\n\n</details>\n\nAgree, thanks to the serializer, you no longer need to manually select the necessary data from the dictionary. Now the serializer contains the most necessary information about an artist or a track.\n\n\n## How to use in Terminal\n\n1. **recognize_song**: Used to recognize songs.\n\n Example:\n ```\n MelodyMaster recognize_song --file_path \"path/to/audio_file\"\n ```\n This example indicates that you want to recognize the song using the audio file located at \"path/to/audio_file\".\n\n2. **about_artist**: Used to get information about an artist.\n\n Example:\n ```\n MelodyMaster about_artist --artist_id \"Artist id\"\n ```\n This example requests information about the artist named \"Artist id\".\n\n3. **recognize_and_search**: Used to recognize songs and search for the song's name.\n\n Example:\n ```\n MelodyMaster recognize_and_search --file_path \"path/to/audio_file\"\n ```\n This example means you want to recognize the song using the audio file located at \"path/to/audio_file\" and search for the song's name.\n\n4. **search_album**: Used to search for an album using the album ID.\n\n Example:\n ```\n MelodyMaster search_album --album_id 123\n ```\n This example searches for the album with the ID 123.\n\n5 .**get_default_lyrics**: Used to get the default lyrics of a song.\n\n Example:\n ```\n MelodyMaster get_default_lyrics --title \"Song Title\" --srt \"true\"\n ```\n This example means you want to get the lyrics of the song titled \"Song Title\" and --srt if true give you lyrics with time if --srt false just lyrics\n \n6 .**get_alternative_lyrics**: Used to get alternative lyrics of a song.\n\n Example:\n ```\n MelodyMaster get_alternative_lyrics --title \"Song Title\" --artist \"Artist Name\" --duration \"Duration\" --srt \"true\"\n ```\n This example means you want to get the alternative lyrics of the song titled \"Song Title\" by the artist \"Artist Name\" with duration \"Duration\". duration and Artist name optional\n\n 7. **recognize_text**: Used to recognize text from an audio file.\n\n Example:\n ```\n MelodyMaster recognize_text --file_path \"path/to/audio_file\" --lang \"en-GB\"\n ```\n This example means you want to recognize the text from the audio file located at \"path/to/audio_file\" the lang for language you can find it .\n <details> \n<summary>\n<i>here</i>\n</summary>\n \n Afrikaans (South Africa) : af-ZA \n Albanian (Albania) : sq-AL \n Albanian (Albania) : sq-AL \n Amharic (Ethiopia) : am-ET \n Amharic (Ethiopia) : am-ET \n Arabic (Algeria) : ar-DZ \n Arabic (Algeria) : ar-DZ \n Arabic (Bahrain) : ar-BH \n Arabic (Bahrain) : ar-BH \n Arabic (Egypt) : ar-EG \n Arabic (Egypt) : ar-EG \n Arabic (Iraq) : ar-IQ \n Arabic (Iraq) : ar-IQ \n Arabic (Israel) : ar-IL \n Arabic (Israel) : ar-IL \n Arabic (Jordan) : ar-JO \n Arabic (Jordan) : ar-JO \n Arabic (Kuwait) : ar-KW \n Arabic (Kuwait) : ar-KW \n Arabic (Lebanon) : ar-LB \n Arabic (Lebanon) : ar-LB \n Arabic (Morocco) : ar-MA \n Arabic (Morocco) : ar-MA \n Arabic (Oman) : ar-OM \n Arabic (Oman) : ar-OM \n Arabic (Qatar) : ar-QA \n Arabic (Qatar) : ar-QA \n Arabic (Saudi Arabia) : ar-SA \n Arabic (Saudi Arabia) : ar-SA \n Arabic (Palestine) : ar-PS \n Arabic (Palestine) : ar-PS \n Arabic (Tunisia) : ar-TN \n Arabic (Tunisia) : ar-TN \n Arabic (UAE) : ar-AE\n Arabic (Yemen) : ar-YE \n Arabic (Yemen) : ar-YE \n Armenian (Armenia) : hy-AM \n Armenian (Armenia) : hy-AM \n Azerbaijani (Azerbaijan) : az-AZ \n Azerbaijani (Azerbaijan) : az-AZ \n Basque (Spain) : eu-ES \n Basque (Spain) : eu-ES \n Bengali (Bangladesh) : bn-BD \n Bengali (Bangladesh) : bn-BD \n Bengali (India) : bn-IN \n Bengali (India) : bn-IN \n Bosnian (Bosnia Herzegovina) : bs-BA \n Bosnian (Bosnia Herzegovina) : bs-BA \n Bulgarian (Bulgaria) : bg-BG \n Bulgarian (Bulgaria) : bg-BG \n Burmese (Myanmar) : my-MM \n Burmese (Myanmar) : my-MM \n Catalan (Spain) : ca-ES \n Catalan (Spain) : ca-ES \n Chinese, Cantonese (Traditional Hong Kong) : yue-Hant-HK \n Chinese, Mandarin (Simplified, China) : zh (cmn-Hans-CN)\n Chinese, Mandarin (Traditional, Taiwan) : zh-TW (cmn-Hant-TW)\n Croatian (Croatia) : hr-HR \n Croatian (Croatia) : hr-HR \n Czech (Czech Republic) : cs-CZ\n Czech (Czech Republic) : cs-CZ\n Danish (Denmark) : da-DK\n Danish (Denmark) : da-DK\n Dutch (Belgium) : nl-BE \n Dutch (Belgium) : nl-BE \n Dutch (Netherlands) : nl-NL\n Dutch (Netherlands) : nl-NL\n English (Australia) : en-AU\n English (Australia) : en-AU\n English (Canada) : en-CA\n English (Canada) : en-CA \n English (Ghana) : en-GH\n English (Ghana) : en-GH\n English (Hong Kong) : en-HK\n English (Hong Kong) : en-HK\n English (India) : en-IN\n English (India) : en-IN\n English (Ireland) : en-IE\n English (Ireland) : en-IE\n English (Kenya) : en-KE\n English (Kenya) : en-KE\n English (New Zealand) : en-NZ\n English (New Zealand) : en-NZ\n English (Nigeria) : en-NG\n English (Nigeria) : en-NG\n English (Pakistan) : en-PK\n English (Pakistan) : en-PK\n English (Philippines) : en-PH\n English (Philippines) : en-PH \n English (Singapore) : en-SG\n English (Singapore) : en-SG\n English (South Africa) : en-ZA\n English (South Africa) : en-ZA\n English (Tanzania) : en-TZ\n English (Tanzania) : en-TZ \n English (United Kingdom) : en-GB \n English (United States) : en-US \n English (United States) : en-US \n Estonian (Estonia) : et-EE \n Estonian (Estonia) : et-EE \n Filipino (Philippines) : fil-PH \n Filipino (Philippines) : fil-PH \n Finnish (Finland) : fi-FI\n Finnish (Finland) : fi-FI\n French (Belgium) : fr-BE\n French (Belgium) : fr-BE\n French (Canada) : fr-CA\n French (Canada) : fr-CA\n French (France) : fr-FR \n French (France) : fr-FR \n French (Switzerland) : fr-CH\n French (Switzerland) : fr-CH\n Galician (Spain) : gl-ES \n Galician (Spain) : gl-ES \n Georgian (Georgia) : ka-GE \n Georgian (Georgia) : ka-GE \n German (Austria) : de-AT \n German (Austria) : de-AT \n German (Germany) : de-DE\n German (Germany) : de-DE\n German (Switzerland) : de-CH \n German (Switzerland) : de-CH \n Greek (Greece) : el-GR \n Greek (Greece) : el-GR \n Gujarati (India) : gu-IN \n Gujarati (India) : gu-IN \n Hebrew (Israel) : iw-IL\n Hebrew (Israel) : iw-IL\n Hindi (India) : hi-IN\n Hindi (India) : hi-IN\n Hungarian (Hungary) : hu-HU \n Hungarian (Hungary) : hu-HU \n Icelandic (Iceland) : is-IS \n Icelandic (Iceland) : is-IS \n Indonesian (Indonesia) : id-ID\n Indonesian (Indonesia) : id-ID\n Italian (Italy) : it-IT\n Italian (Italy) : it-IT\n Italian (Switzerland) : it-CH \n Italian (Switzerland) : it-CH \n Japanese (Japan) : ja-JP \n Japanese (Japan) : ja-JP \n Javanese (Indonesia) : jv-ID \n Javanese (Indonesia) : jv-ID \n Kannada (India) : kn-IN \n Kannada (India) : kn-IN \n Kazakh (Kazakhstan) : kk-KZ \n Kazakh (Kazakhstan) : kk-KZ \n Khmer (Cambodia) : km-KH \n Khmer (Cambodia) : km-KH \n Korean (South Korea) : ko-KR\n Korean (South Korea) : ko-KR\n Lao (Laos) : lo-LA \n Lao (Laos) : lo-LA \n Latvian (Latvia) : lv-LV \n Latvian (Latvia) : lv-LV \n Lithuanian (Lithuania) : lt-LT \n Lithuanian (Lithuania) : lt-LT \n Macedonian (North Macedonia) :\nmk-MK \n Macedonian (North Macedonia) : mk-MK \n Malay (Malaysia) : ms-MY \n Malay (Malaysia) : ms-MY \n Malayalam (India) : ml-IN\n Malayalam (India) : ml-IN\n Marathi (India) : mr-IN \n Marathi (India) : mr-IN \n Mongolian (Mongolia) : mn-MN \n Mongolian (Mongolia) : mn-MN \n Nepali (Nepal) : ne-NP \n Nepali (Nepal) : ne-NP \n Norwegian Bokm\u00e5l (Norway): no-NO\n Norwegian Bokm\u00e5l (Norway): no-NO\n Persian (Iran) : fa-IR \n Persian (Iran) : fa-IR \n Polish (Poland) : pl-PL\n Polish (Poland) : pl-PL\n Portuguese (Brazil) : pt-BR\n Portuguese (Brazil) : pt-BR\n Portuguese (Portugal) : pt-PT\n Portuguese (Portugal) : pt-PT\n Punjabi (Gurmukhi India) : pa-Guru-IN \n Punjabi (Gurmukhi India) : pa-Guru-IN \n Romanian (Romania) : ro-RO \n Romanian (Romania) : ro-RO \n Russian (Russia) : ru-RU\n Russian (Russia) : ru-RU\n Russian (Russia) : ru-RU \n Russian (Russia) : ru-RU \n Serbian (Serbia) : sr-RS \n Serbian (Serbia) : sr-RS \n Sinhala (Sri Lanka) : si-LK \n Sinhala (Sri Lanka) : si-LK \n Slovak (Slovakia) : sk-SK \n Slovak (Slovakia) : sk-SK \n Slovenian (Slovenia) : sl-SI \n Slovenian (Slovenia) : sl-SI \n Spanish (Argentina) : es-AR \n Spanish (Argentina) : es-AR \n Spanish (Bolivia) : es-BO \n Spanish (Bolivia) : es-BO \n Spanish (Chile) : es-CL \n Spanish (Chile) : es-CL \n Spanish (Colombia) : es-CO \n Spanish (Colombia) : es-CO \n Spanish (Costa Rica) : es-CR \n Spanish (Costa Rica) : es-CR \n Spanish (Dominican Rep.) : es-DO\n Spanish (Ecuador) : es-EC \n Spanish (Ecuador) : es-EC \n Spanish (El Salvador) : es-SV \n Spanish (El Salvador) : es-SV \n Spanish (Guatemala) : es-GT \n Spanish (Guatemala) : es-GT \n Spanish (Honduras) : es-HN \n Spanish (Honduras) : es-HN \n Spanish (Mexico) : es-MX \n Spanish (Mexico) : es-MX \n Spanish (Nicaragua) : es-NI \n Spanish (Nicaragua) : es-NI \n Spanish (Panama) : es-PA \n Spanish (Panama) : es-PA \n Spanish (Paraguay) : es-PY \n Spanish (Paraguay) : es-PY \n Spanish (Peru) : es-PE \n Spanish (Peru) : es-PE \n Spanish (Puerto Rico) : es-PR \n Spanish (Puerto Rico) : es-PR \n Spanish (Spain) : es-ES\n Spanish (Spain) : es-ES \n Spanish (United States) : es-US \n Spanish (Uruguay) : es-UY \n Spanish (Uruguay) : es-UY \n Spanish (Venezuela) : es-VE \n Spanish (Venezuela) : es-VE \n Sundanese (Indonesia) : su-ID \n Sundanese (Indonesia) : su-ID \n Swahili (Kenya) : sw-KE \n Swahili (Kenya) : sw-KE \n Swahili (Tanzania) : sw-TZ \n Swahili (Tanzania) : sw-TZ \n Swedish (Sweden) : sv-SE\n Swedish (Sweden) : sv-SE\n Tamil (India) : ta-IN \n Tamil (India) : ta-IN \n Tamil (Malaysia) : ta-MY \n Tamil (Malaysia) : ta-MY \n Tamil (Singapore) : ta-SG \n Tamil (Singapore) : ta-SG \n Tamil (Sri Lanka) : ta-LK \n Tamil (Sri Lanka) : ta-LK \n Telugu (India) : te-IN \n Telugu (India) : te-IN \n Thai (Thailand) : th-TH \n Thai (Thailand) : th-TH \n Turkish (Turkey) : tr-TR\n Turkish (Turkey) : tr-TR\n Ukrainian (Ukraine) : uk-UA \n Ukrainian (Ukraine) : uk-UA \n Urdu (India) : ur-IN \n Urdu (India) : ur-IN \n Urdu (Pakistan) : ur-PK \n Urdu (Pakistan) : ur-PK \n Uzbek (Uzbekistan) : uz-UZ \n Uzbek (Uzbekistan) : uz-UZ \n Vietnamese (Vietnam) : vi-VN \n Vietnamese (Vietnam) : vi-VN \n Zulu (South Africa) : zu-ZA \n Zulu (South Africa) : zu-ZA \n</details>\n\n# MelodyMaster\n\nMelodyMaster is a modified version of the Shazamio library.\n\n## Acknowledgements\n\nWe would like to express our gratitude to everyone who contributed to the modification of the MelodyMaster library, which is based on the Shazamio library.\n\n\n## Contact Us\n\nFor any inquiries or feedback, you can reach us on Telegram at [@BDXBB](https://t.me/BDXBB).\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Is a asynchronous framework from reverse engineered Shazam API written in Python 3.8+ with asyncio and aiohttp.",
"version": "1.0.2",
"project_urls": {
"Homepage": "https://github.com/BDXBB/MelodyMaster",
"Repository": "https://github.com/BDXBB/MelodyMaster"
},
"split_keywords": [
"python",
" shazam",
" music",
" recognize",
" api",
" async",
" asyncio",
" aiohttp",
" identification"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "dbcdcadffa24fc3a654739ed3c48ae8b3d34705852fd7b369a601d3af2c379fb",
"md5": "e87ab633deaab860e7f097a5ba61d7f7",
"sha256": "fbd238eaa4b0090d08e12014fd6c68f9d7b5ab3a83f8d792920486fdf8663a0b"
},
"downloads": -1,
"filename": "melodymaster-1.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e87ab633deaab860e7f097a5ba61d7f7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.8",
"size": 52609,
"upload_time": "2024-05-14T19:52:24",
"upload_time_iso_8601": "2024-05-14T19:52:24.918486Z",
"url": "https://files.pythonhosted.org/packages/db/cd/cadffa24fc3a654739ed3c48ae8b3d34705852fd7b369a601d3af2c379fb/melodymaster-1.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e94301962e1326fd9910b291bef4488a529a4030abcac7940da9ff09433e9634",
"md5": "7bc93a46b2ff74d7baf6bfdad8848e9a",
"sha256": "a7ce9062974d9b3192d6038e24ac264cc595bda8a4470ed11f3a2772fddadaf5"
},
"downloads": -1,
"filename": "melodymaster-1.0.2.tar.gz",
"has_sig": false,
"md5_digest": "7bc93a46b2ff74d7baf6bfdad8848e9a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.8",
"size": 34861,
"upload_time": "2024-05-14T19:52:26",
"upload_time_iso_8601": "2024-05-14T19:52:26.409067Z",
"url": "https://files.pythonhosted.org/packages/e9/43/01962e1326fd9910b291bef4488a529a4030abcac7940da9ff09433e9634/melodymaster-1.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-14 19:52:26",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "BDXBB",
"github_project": "MelodyMaster",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "melodymaster"
}