import os import asyncio import logging from argparse import Namespace from bark.mode_load import set_bark_model_load_logger from speakers.common.log import get_logger, set_log_level from speakers import set_main_logger, Speaker, WebSpeaker from speakers.processors.bark_to_voice import set_bark_to_voice_logger from speakers.processors.rvc_speakers_processor import set_rvc_speakers_logger from speakers.processors.vits_to_voice import set_vits_to_voice_logger from speakers.server.servlet.runner import set_server_runner_logger from speakers.server.model.flow_data import PayLoad from speakers.server import dispatch as dispatch_web import argparse logger = logging.getLogger('start_logger') def set_start_logger(l): global logger logger = l async def dispatch(args: Namespace): args_dict = vars(args) logger.info(f'Running in {args.mode} mode') if args.mode in 'demo': speaker = Speaker(speakers_config_file=args.speakers_config_file, verbose=args.verbose) await speaker.preparation_runner(task_id="0", payload=PayLoad()) elif args.mode in 'web': await dispatch_web(speakers_config_file=args.speakers_config_file) elif args.mode in 'web_runner': translator = WebSpeaker(speakers_config_file=args.speakers_config_file, verbose=args.verbose, nonce=args.nonce) await translator.listen() def main(): parser = argparse.ArgumentParser(prog='speakers', description='S') parser.add_argument('-m', '--mode', default='demo', type=str, choices=['demo', 'web', 'web_runner'], help='Run ') parser.add_argument('-v', '--verbose', action='store_true', help='Print debug info in result folder') parser.add_argument("--speakers-config-file", type=str, default="speakers.yaml") parser.add_argument('--nonce', default='', type=str, help='Used by web module to decide which secret for securing ' 'internal web server communication') args = None try: args = parser.parse_args() set_log_level(level=logging.DEBUG if args.verbose else logging.INFO) set_start_logger(get_logger(args.mode)) set_main_logger(logger) set_bark_model_load_logger(logger) set_rvc_speakers_logger(logger) set_vits_to_voice_logger(logger) set_bark_to_voice_logger(logger) set_server_runner_logger(logger) loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) loop.run_until_complete(dispatch(args)) except KeyboardInterrupt: if not args or args.mode != 'web': print() except Exception as e: logger.error(f'{e.__class__.__name__}: {e}', exc_info=e if args and args.verbose else None) if __name__ == '__main__': main()