Spaces:
Sleeping
Sleeping
| from simbals_apis_public_clients.clients.services import SimbalsAPIClient | |
| import time | |
| import json | |
| import os | |
| import gradio as gr | |
| import yt_dlp | |
| YT_embed_html1 = '<iframe width="560" height="315" src="https://www.youtube.com/embed/' | |
| YT_embed_html2 = '" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>' | |
| SIMBALS_GLOBAL_DB = 1 | |
| SIMBALS_MAIN_DATABASE = 2 | |
| embed_html1 = '<iframe src="https://open.spotify.com/embed/track/' | |
| embed_html2 = '" width="300" height="380" frameborder="0" allowtransparency="true" allow="encrypted-media"></iframe>' | |
| def download_audio_(link): | |
| with yt_dlp.YoutubeDL({'extract_audio': True, 'format': 'bestaudio', 'outtmpl': '%(title)s.mp3'}) as video: | |
| info_dict = video.extract_info(link, download = True) | |
| video_title = info_dict['title'] | |
| video.download(link) | |
| return video_title | |
| def download_audio(id_video): | |
| id = id_video.split("?v=")[-1][:11] | |
| audio_file = download_audio_(id_video) | |
| audio_file = audio_file+'.mp3' | |
| embed_html_all = YT_embed_html1 + id + YT_embed_html2 | |
| return audio_file, audio_file, embed_html_all | |
| def process_url(input_path): | |
| audio_file, audio_file, embed_html_all = download_audio(input_path) | |
| return process(audio_file, embed_html_all) | |
| def process_file(input_path): | |
| return process(input_path, '') | |
| def process(input_path, embed_html_all): | |
| # setup the client | |
| client = SimbalsAPIClient(os.environ['TOKEN'], debug=True) | |
| # init the base parameters with your audio id and an audio url (or a local audio file) | |
| parameters = client.prepare_request("31415", audio_file=input_path) | |
| # add scanmatch service with full_matches option activated, against a chosen and available database | |
| #parameters = client.add_scanmatch_full_matches(parameters, SIMBALS_GLOBAL_DB) | |
| # add scanmatch service with partial_matches option activated, against a chosen and available database | |
| #parameters = client.add_scanmatch_partial_matches(parameters, SIMBALS_GLOBAL_DB) | |
| parameters = client.add_scanmatch_partial_fast_matches(parameters, SIMBALS_GLOBAL_DB) | |
| # launch the request and test for ok/code values | |
| ok, code, job_id = client.launch_request(parameters) | |
| # try to get the results with obtained job_id. If code is 4, job is not finished. In all other cases, job is finished | |
| for i in range(1000): | |
| results=client.get_results(job_id) | |
| if results[0] != 4: | |
| print(json.dumps(results[1], indent=1)) | |
| #return json.dumps(results[1], indent=1) | |
| output = json.dumps(results[1], indent=1) | |
| try : | |
| trackname = results[1]["response"]["scanmatch"]['1']['partial_fast_matches'][0]['track']['title'] | |
| artistname = results[1]["response"]["scanmatch"]['1']['partial_fast_matches'][0]['artists'][0]['name'] | |
| isrc = results[1]["response"]["scanmatch"]['1']['partial_fast_matches'][0]['track']['isrc'] | |
| id_spotify = -1 | |
| for x in results[1]["response"]["scanmatch"]['1']['partial_fast_matches'][0]['track']['other_ids'] : | |
| if x['id_type_name'] == "spotify": | |
| id_spotify = x['id'] | |
| if id_spotify == -1: | |
| id_spotify = "No Spotify ID found." | |
| output_text = trackname+" by "+artistname + " - ISRC : " + isrc #+ " - spotify ID : " + id_spotify | |
| output_html = embed_html1 + id_spotify + embed_html2 | |
| return output_text, output_html, embed_html_all | |
| except (IndexError, TypeError): | |
| return "Not found. Please try again.","","" | |
| time.sleep(1) | |
| ''' | |
| demo = gr.Interface(fn=process, | |
| inputs=gr.Audio(type="filepath"), | |
| outputs=[gr.outputs.Textbox(label="Identification"),"html"] | |
| #examples=example_list, | |
| #cache_examples=False | |
| ) | |
| ''' | |
| with gr.Blocks() as demo: | |
| with gr.Row(): | |
| with gr.Column(): | |
| with gr.Row(): | |
| #gr.HTML(embed_html) | |
| html = gr.HTML() | |
| with gr.Row(): | |
| with gr.Column(): | |
| audio_url_input = gr.Textbox(placeholder='YouTube video URL', label='YouTube video URL') | |
| analyze_url_btn = gr.Button('Search from URL') | |
| with gr.Row(): | |
| with gr.Column(): | |
| audio_input_file = gr.Audio(type="filepath", label='Audio Input') | |
| analyze_file_btn = gr.Button('Search from file') | |
| with gr.Row(): | |
| with gr.Column(): | |
| id = gr.outputs.Textbox(label="Identification") | |
| id_html = gr.HTML() | |
| analyze_url_btn.click(process_url, inputs=[audio_url_input], | |
| outputs=[id, id_html, html]) | |
| analyze_file_btn.click(process_file, inputs=[audio_input_file], | |
| outputs=[id, id_html]) | |
| demo.queue(concurrency_count=2) | |
| demo.launch(debug=True) | |