Spaces:
Runtime error
Runtime error
| """ | |
| Copyright 2023 Balacoon | |
| Voice Conversion service interactive demo | |
| """ | |
| import glob | |
| import logging | |
| import os | |
| import gradio as gr | |
| from vc_service_request import vc_service_request | |
| script_dir = os.path.dirname(os.path.abspath(__file__)) | |
| def main(): | |
| logging.basicConfig(level=logging.INFO) | |
| badges = """ | |
| <div style="display: flex"> | |
| <span style="margin-right: 5px"> | |
| [<img src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png" width="200" height="77">](https://play.google.com/store/apps/details?id=com.app.vc) | |
| </span> | |
| </div> | |
| """ | |
| with gr.Blocks() as demo: | |
| gr.Markdown( | |
| """ | |
| <h1 align="center">Balacoon🦝 Voice Conversion</h1> | |
| Welcome to the live demo of Balacoon's Voice Conversion service. | |
| Check out our [website](https://balacoon.com/demo/#voice-conversion) | |
| to learn more. | |
| Voice Conversion allows you to transform your own voice | |
| into the voice of another person using just a single sample. | |
| For optimal results, we recommend using clean audio files in English. | |
| Here's how it works: | |
| 1. Begin by recording your voice. | |
| 2. Select an audio sample that represents the target voice you want to convert to. | |
| 3. Click the "Convert" button and listen to the result! | |
| If providing your own audio files, please use WAVE PCM. | |
| Service works with 16kHz, 16 bit, mono audio. | |
| If you are interested to plug in Voice Conversion | |
| service into your own application, don't hesitate to get in touch with us at | |
| [contact@balacoon.com](mailto:contact@balacoon.com) | |
| """ | |
| ) | |
| gr.Markdown(badges) | |
| with gr.Row(): | |
| with gr.Column(variant="panel"): | |
| src_audio_mic = gr.Audio(source="microphone", label="Record your voice") | |
| src_audio_file = gr.Audio( | |
| source="upload", label="Or upload audio to convert" | |
| ) | |
| with gr.Column(variant="panel"): | |
| tgt_audio_file = gr.Audio( | |
| source="upload", label="Select audio with target voice" | |
| ) | |
| tgt_examples_paths = glob.glob( | |
| os.path.join(script_dir, "references", "*.wav") | |
| ) | |
| gr.Examples( | |
| tgt_examples_paths, | |
| inputs=[tgt_audio_file], | |
| ) | |
| with gr.Row(): | |
| convert_btn = gr.Button("Convert") | |
| with gr.Row(): | |
| result_audio = gr.Audio() | |
| def voice_conversion(src_from_mic_, src_from_file_, tgt_from_file_): | |
| """ | |
| helper function which checks where source come from | |
| """ | |
| src_ = None | |
| if src_from_mic_: | |
| src_ = src_from_mic_ | |
| elif src_from_file_: | |
| src_ = src_from_file_ | |
| tgt_ = tgt_from_file_ | |
| if not src_ or not tgt_: | |
| logging.warning("source or target are not provided") | |
| return | |
| return vc_service_request(src_, tgt_) | |
| convert_btn.click( | |
| voice_conversion, | |
| inputs=[src_audio_mic, src_audio_file, tgt_audio_file], | |
| outputs=result_audio, | |
| ) | |
| demo.queue(concurrency_count=1).launch() | |
| if __name__ == "__main__": | |
| main() | |