forked from davidAlgis/mp3ShazamAutoTag
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main4.py
83 lines (69 loc) · 3.18 KB
/
main4.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import subprocess
import asyncio
import uuid
from shazamio import Shazam
import tqdm
# Função para gerar um nome de arquivo aleatório
def generate_random_filename(extension=".mp3"):
return f"{uuid.uuid4()}{extension}"
# Função para baixar um trecho do áudio do stream e salvar como MP3
def download_audio_segment(stream_url, duration=20, output_file="output.mp3"):
try:
# Comando para baixar e converter o áudio
command = [
'ffmpeg',
'-i', stream_url,
'-t', str(duration),
'-f', 'mp3',
output_file
]
subprocess.run(command, check=True)
except subprocess.CalledProcessError as e:
print(f"Erro ao baixar o áudio: {e}")
# Função para identificar a música
async def identify_song(file_path):
shazam = Shazam()
out = await shazam.recognize(file_path)
return out
async def get_related_tracks(track_id):
shazam = Shazam()
related = await shazam.related_tracks(track_id=track_id, limit=5)
return related
async def main():
# URL do stream
stream_url = "https://stream.zeno.fm/yn65fsaurfhvv"
# Gerar um nome de arquivo aleatório para o MP3
output_file = generate_random_filename()
# Baixar um trecho de 10 segundos do stream
download_audio_segment(stream_url, duration=20, output_file=output_file)
try:
result = await identify_song(output_file)
if 'track' in result:
track = result['track']
print(f"Id: {track['key']}")
print(f"Title: {track['title']}")
print(f"Artist: {track['subtitle']}")
print(f"Album: {track.get('sections', [{}])[0].get('metadata', [{}])[0].get('text', 'N/A')}")
print(f"Label: {track.get('sections', [{}])[0].get('metadata', [{}])[1].get('text', 'N/A')}")
print(f"Released: {track.get('sections', [{}])[0].get('metadata', [{}])[2].get('text', 'N/A')}")
print(f"Genre: {track.get('genres', {}).get('primary', 'N/A')}")
print(f"Track URL: {track['url']}")
print(f"Cover Art: {track['images']['coverart']}")
# Obter e exibir músicas relacionadas
related_tracks_data = await get_related_tracks(track['key'])
if related_tracks_data and 'tracks' in related_tracks_data: # Verifica se há músicas relacionadas
related_tracks = related_tracks_data['tracks'] # Acesse a lista de faixas
if related_tracks: # Verifica se a lista não está vazia
print("\nMúsicas Relacionadas:")
for related_track in related_tracks:
print(f"- {related_track['title']} por {related_track['subtitle']}")
else:
print("Nenhuma música relacionada encontrada.")
else:
print("A resposta da API não contém músicas relacionadas.")
else:
print("Música não identificada. Tente um trecho mais longo ou outro momento do stream.")
except Exception as e:
print(f"Ocorreu um erro: {e}")
if __name__ == "__main__":
asyncio.run(main())