# 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
from paddlespeech . server . utils . audio_handler import TTSHttpHandler
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 ( ' --spk_id ' , type = int , default = 0 , help = ' Speaker id ' )
parser . add_argument ( ' --speed ' , type = float , default = 1.0 , help = ' Audio speed ' )
parser . add_argument (
' --volume ' , type = float , default = 1.0 , help = ' Audio volume ' )
parser . add_argument (
' --sample_rate ' ,
type = int ,
default = 0 ,
choices = [ 0 , 8000 , 16000 ] ,
help = ' Sampling rate, the default is the same as the model ' )
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 http client start " )
handler = TTSHttpHandler ( args . server , args . port , args . play )
first_response , final_response , duration , save_audio_success , receive_time_list , chunk_duration_list = handler . run (
args . text , args . spk_id , args . speed , args . volume , args . sample_rate ,
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. " )