我想从Android文本到语音生成8kHz 16位PCM。
Android的TTS synthesizeToFile生成具有24kHz或22.05kHz采样的单声道16位PCM文件。我想将它们转换为8kHz PCM文件,以输入到自定义声码器。可以使用Android的MediaCodec进行这种下采样吗?如果是这样,怎么办?以下是用于创建音频文件的代码。使用UtteranceProgressListener查找TTS的完成时间(因为Utterance ID可以很好地传递临时文件名)
File outputDir = mContext.getCacheDir(); // context being the Activity pointer
File tf = File.createTempFile("sabre", "wav", outputDir);
HashMap<String,String> params = new HashMap<>();
mUtteranceId = tf.getPath();
params.put(KEY_PARAM_UTTERANCE_ID, mUtteranceId);
mTts.synthesizeToFile(text, params, mUtteranceId);
答案 0 :(得分:0)
如果您有24kHz文件,则需要将低通滤波器降低到4kHz,然后每隔3个采样进行一次采样即可获得8kHz数据。 FIR滤波器就足够了。 http://t-filter.engineerjs.com/将帮助您开始为合适的FIR滤波器生成系数,并提供一些简单的c ++代码。您可以使用Java短裤作为示例,将其累积为java int。
要读取wav文件样本,请使用Android MediaExtractor或在http://www.labbookpages.co.uk/audio/javaWavFiles.html处使用java wav文件类。您可以使用它来写出重新采样的wav文件。
如果您的转换比较困难,例如从22.05kHz开始,然后在https://github.com/hutm/JSSRC处尝试Java SSRC(尽管即使在“快速”模式下也相当慢)。