diff --git a/QA.md b/QA.md new file mode 100644 index 0000000..08473f5 --- /dev/null +++ b/QA.md @@ -0,0 +1,30 @@ +# Common Questions and Answers + +## General Comments + +**OpenVoice is a Technology, not a Product** + +Although it works on a majority of voices if used correctly, please do not expect it to work perfectly on every case, as it takes a lot of engineering effort to translate a technology to a stable product. The targeted users of this technology are developers and researchers, not end users. End users expects a perfect product. However, we are confident to say that OpenVoice is the state-of-the-art among the source-available voice cloning technologies. + +The contribution of OpenVoice is a versatile instant voice cloning technical approach, not a ready-to-use perfect voice cloning product. However, we firmly believe that by releasing OpenVoice, we can accelerate the open research community's progress on instant voice cloning, and someday in the future the free voice cloning methods will be as good as commercial ones. + +## Issues with Voice Quality + +**Accent and Emotion of the Generated Voice is not Similar to the Reference Voice** + +First of all, OpenVoice only clones the tone color of the reference speaker. It does NOT clone the accent or emotion. The accent and emotion is controlled by the base speaker TTS model, not cloned by the tone color converter (please refer to our [paper](https://arxiv.org/pdf/2312.01479.pdf) for technical details). If the user wants to change the accent or emotion of the output, they need to have a base speaker model with that accent. OpenVoice provides sufficient flexibility for users to integrate their own base speaker model into the framework by simply replacing the current base speaker we provided. + +**Bad Audio Quality of the Generated Speech** + +Please check the followings: +- Is your reference audio is clean enough without any background noise? +- Is your audio too short? +- Does your audio contain speech from more than one person? +- Does the reference audio contain long blank sections? +- Did you name the reference audio the same name you used before but forgot to delete the `processed` folder? + +## Issues with Languages + +**Support of Other Languages** + +For multi-lingual and cross-lingual usage, please refer to [`demo_part2.ipynb`](https://github.com/myshell-ai/OpenVoice/blob/main/demo_part2.ipynb). OpenVoice supports any language as long as you have a base speaker in that language. The OpenVoice team already did the most difficult part (tone color converter training) for you. Base speaker TTS model is relatively easy to train, and multiple existing open-source repositories support it. If you don't want to train by yourself, simply use the OpenAI TTS model as the base speaker. diff --git a/README.md b/README.md index df618b7..6e7c3d3 100644 --- a/README.md +++ b/README.md @@ -43,14 +43,16 @@ OpenVoice has been powering the instant voice cloning capability of [myshell.ai] ## Live Demo
-## Disclaimer +## Common Issues -This is a implementation that approximates the performance of the internal voice clone technology of [myshell.ai](https://app.myshell.ai/explore). The online version in myshell.ai has better 1) audio quality, 2) voice cloning similarity, 3) speech naturalness and 4) computational efficiency. +Please see [QnA](QA.md) for common questions and answers. We will regularly update the question and answer list. ## Installation Clone this repo, and run @@ -70,13 +72,12 @@ Please see [`demo_part1.ipynb`](demo_part1.ipynb) for an example usage of how Op **2. Cross-Lingual Voice Cloning.** Please see [`demo_part2.ipynb`](demo_part2.ipynb) for an example for languages seen or unseen in the MSML training set. -**3. Gradio Demo.** -Launch a local gradio demo with [`python -m openvoice_app --share`](openvoice_app.py). +**3. Gradio Demo.**. We provide a minimalist local gradio demo here. We strongly suggest the users to look into `demo_part1.ipynb`, `demo_part2.ipynb` and the [QnA](QA.md) if they run into issues with the gradio demo. Launch a local gradio demo with `python -m openvoice_app --share`. -**4. Advanced Usage.** +**3. Advanced Usage.** The base speaker model can be replaced with any model (in any language and style) that the user prefer. Please use the `se_extractor.get_se` function as demonstrated in the demo to extract the tone color embedding for the new base speaker. -**5. Tips to Generate Natural Speech.** +**4. Tips to Generate Natural Speech.** There are many single or multi-speaker TTS methods that can generate natural speech, and are readily available. By simply replacing the base speaker model with the model you prefer, you can push the speech naturalness to a level you desire. ## Roadmap @@ -100,7 +101,7 @@ There are many single or multi-speaker TTS methods that can generate natural spe ``` ## License -This repository is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License, which prohibits commercial usage. **MyShell reserves the ability to detect whether an audio is generated by OpenVoice**, no matter whether the watermark is added or not. +This repository is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License, which prohibits commercial usage. **This will be changed to a license that allows Free Commercial usage in the near future.** Stay tuned. For social responsibility and anti-misuse considerations, **MyShell reserves the ability to detect whether an audio is generated by OpenVoice**, no matter whether the watermark is added or not. ## Acknowledgements diff --git a/demo_part1.ipynb b/demo_part1.ipynb index 065c540..225b7d3 100644 --- a/demo_part1.ipynb +++ b/demo_part1.ipynb @@ -148,7 +148,7 @@ "save_path = f'{output_dir}/output_whispering.wav'\n", "\n", "# Run the base speaker tts\n", - "text = \"This audio is generated by OpenVoice with a half-performance model.\"\n", + "text = \"This audio is generated by OpenVoice.\"\n", "src_path = f'{output_dir}/tmp.wav'\n", "base_speaker_tts.tts(text, src_path, speaker='whispering', language='English', speed=0.9)\n", "\n", diff --git a/openvoice_app.py b/openvoice_app.py index 3922341..65d6854 100644 --- a/openvoice_app.py +++ b/openvoice_app.py @@ -34,7 +34,7 @@ zh_source_se = torch.load(f'{zh_ckpt_base}/zh_default_se.pth').to(device) # This online demo mainly supports English and Chinese supported_languages = ['zh', 'en'] -def predict(prompt, style, audio_file_pth, mic_file_path, use_mic, agree): +def predict(prompt, style, audio_file_pth, agree): # initialize a empty info text_hint = '' # agree with the terms @@ -92,22 +92,7 @@ def predict(prompt, style, audio_file_pth, mic_file_path, use_mic, agree): None, ) - if use_mic == True: - if mic_file_path is not None: - speaker_wav = mic_file_path - else: - text_hint += f"[ERROR] Please record your voice with Microphone, or uncheck Use Microphone to use reference audios\n" - gr.Warning( - "Please record your voice with Microphone, or uncheck Use Microphone to use reference audios" - ) - return ( - text_hint, - None, - None, - ) - - else: - speaker_wav = audio_file_pth + speaker_wav = audio_file_pth if len(prompt) < 2: text_hint += f"[ERROR] Please give a longer prompt text \n" @@ -197,7 +182,7 @@ markdown_table_v2 = """ """ content = """