From 2772022432e25500965ce5923dcf159d82719123 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E9=80=B8=E8=B1=AA?= Date: Wed, 8 Mar 2023 04:50:02 +0000 Subject: [PATCH] demos/TTSArmLinux: add WAV duration and RTF display --- demos/TTSArmLinux/src/Predictor.hpp | 20 +++++++++++++++++++- demos/TTSArmLinux/src/main.cc | 4 +++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/demos/TTSArmLinux/src/Predictor.hpp b/demos/TTSArmLinux/src/Predictor.hpp index 221d51fc1..87e883f5e 100644 --- a/demos/TTSArmLinux/src/Predictor.hpp +++ b/demos/TTSArmLinux/src/Predictor.hpp @@ -9,6 +9,13 @@ using namespace paddle::lite_api; +// WAV采样率 +// 如果播放速度和音调异常,请修改采样率 +// 常见采样率:16000, 24000, 32000, 44100, 48000, 96000 +#define WAV_SAMPLE_RATE 24000 + +// WAV数据类型 +// 定义在此处以便在 int16_t 和 float 之间切换 typedef int16_t WavDataType; class Predictor { @@ -174,6 +181,16 @@ public: return wav_.size() * sizeof(WavDataType); } + // 获取WAV持续时间(单位:毫秒) + float GetWavDuration() { + return static_cast(GetWavSize()) / sizeof(WavDataType) / static_cast(WAV_SAMPLE_RATE) * 1000; + } + + // 获取RTF(合成时间 / 音频时长) + float GetRTF() { + return GetInferenceTime() / GetWavDuration(); + } + void ReleaseWav() { wav_.clear(); } @@ -190,9 +207,10 @@ public: uint16_t audio_format = 1; // 1为整数编码,3为浮点编码 uint16_t num_channels = 1; + // WAV采样率 // 如果播放速度和音调异常,请修改采样率 // 常见采样率:16000, 24000, 32000, 44100, 48000, 96000 - uint32_t sample_rate = 24000; + uint32_t sample_rate = WAV_SAMPLE_RATE; uint32_t byte_rate = 64000; uint16_t block_align = 2; diff --git a/demos/TTSArmLinux/src/main.cc b/demos/TTSArmLinux/src/main.cc index 0bf78a7de..6a430e4cc 100644 --- a/demos/TTSArmLinux/src/main.cc +++ b/demos/TTSArmLinux/src/main.cc @@ -61,7 +61,9 @@ int main(int argc, char *argv[]) { } std::cout << "Inference time: " << predictor.GetInferenceTime() << " ms, " - << "WAV size (without header): " << predictor.GetWavSize() << " bytes" << std::endl; + << "WAV size (without header): " << predictor.GetWavSize() << " bytes, " + << "WAV duration: " << predictor.GetWavDuration() << " ms, " + << "RTF: " << predictor.GetRTF() << std::endl; if (!predictor.WriteWavToFile(outputWavPath)) { std::cerr << "write wav file failed" << std::endl;