You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.6 KiB
60 lines
2.6 KiB
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
import argparse
|
|
import asyncio
|
|
|
|
from paddlespeech.server.utils.audio_handler import TTSWsHandler
|
|
from paddlespeech.server.utils.util import compute_delay
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(
|
|
"--text",
|
|
type=str,
|
|
help="A sentence to be synthesized",
|
|
default="您好,欢迎使用语音合成服务。")
|
|
parser.add_argument(
|
|
"--server", type=str, help="server ip", default="127.0.0.1")
|
|
parser.add_argument("--port", type=int, help="server port", default=8092)
|
|
parser.add_argument(
|
|
"--output", type=str, help="save audio path", default=None)
|
|
parser.add_argument(
|
|
"--play", type=bool, help="whether to play audio", default=False)
|
|
args = parser.parse_args()
|
|
|
|
print("tts websocket client start")
|
|
handler = TTSWsHandler(args.server, args.port, args.play)
|
|
loop = asyncio.get_event_loop()
|
|
first_response, final_response, duration, save_audio_success, receive_time_list, chunk_duration_list = loop.run_until_complete(
|
|
handler.run(args.text, args.output))
|
|
delay_time_list = compute_delay(receive_time_list, chunk_duration_list)
|
|
|
|
print(f"sentence: {args.text}")
|
|
print(f"duration: {duration} s")
|
|
print(f"first response: {first_response} s")
|
|
print(f"final response: {final_response} s")
|
|
print(f"RTF: {final_response/duration}")
|
|
if args.output is not None:
|
|
if save_audio_success:
|
|
print(f"Audio successfully saved in {args.output}")
|
|
else:
|
|
print("Audio save failed.")
|
|
|
|
if delay_time_list != []:
|
|
print(
|
|
f"Delay situation: total number of packages: {len(receive_time_list)}, the number of delayed packets: {len(delay_time_list)}, minimum delay time: {min(delay_time_list)} s, maximum delay time: {max(delay_time_list)} s, average delay time: {sum(delay_time_list)/len(delay_time_list)} s, delay rate:{len(delay_time_list)/len(receive_time_list)}"
|
|
)
|
|
else:
|
|
print("The sentence has no delay in streaming synthesis.")
|