mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-11-06 15:12:24 +00:00
Add speechPlayer Klatt implementation as Klatt 6.
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
This file is a part of the NV Speech Player project.
|
||||
URL: https://bitbucket.org/nvaccess/speechplayer
|
||||
Copyright 2014 NV Access Limited.
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License version 2.0, as published by
|
||||
the Free Software Foundation.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
This license can be found at:
|
||||
http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*/
|
||||
|
||||
#ifndef SPEECHPLAYER_H
|
||||
#define SPEECHPLAYER_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef double speechPlayer_frameParam_t;
|
||||
|
||||
typedef struct {
|
||||
// voicing and cascaide
|
||||
speechPlayer_frameParam_t voicePitch; // fundermental frequency of voice (phonation) in hz
|
||||
speechPlayer_frameParam_t vibratoPitchOffset; // pitch is offset up or down in fraction of a semitone
|
||||
speechPlayer_frameParam_t vibratoSpeed; // Speed of vibrato in hz
|
||||
speechPlayer_frameParam_t voiceTurbulenceAmplitude; // amplitude of voice breathiness from 0 to 1
|
||||
speechPlayer_frameParam_t glottalOpenQuotient; // fraction between 0 and 1 of a voice cycle that the glottis is open (allows voice turbulance, alters f1...)
|
||||
speechPlayer_frameParam_t voiceAmplitude; // amplitude of voice (phonation) source between 0 and 1.
|
||||
speechPlayer_frameParam_t aspirationAmplitude; // amplitude of aspiration (voiceless h, whisper) source between 0 and 1.
|
||||
speechPlayer_frameParam_t cf1, cf2, cf3, cf4, cf5, cf6, cfN0, cfNP; // frequencies of standard cascaide formants, nasal (anti) 0 and nasal pole in hz
|
||||
speechPlayer_frameParam_t cb1, cb2, cb3, cb4, cb5, cb6, cbN0, cbNP; // bandwidths of standard cascaide formants, nasal (anti) 0 and nasal pole in hz
|
||||
speechPlayer_frameParam_t caNP; // amplitude from 0 to 1 of cascade nasal pole formant
|
||||
// fricatives and parallel
|
||||
speechPlayer_frameParam_t fricationAmplitude; // amplitude of frication noise from 0 to 1.
|
||||
speechPlayer_frameParam_t pf1, pf2, pf3, pf4, pf5, pf6; // parallel formants in hz
|
||||
speechPlayer_frameParam_t pb1, pb2, pb3, pb4, pb5, pb6; // parallel formant bandwidths in hz
|
||||
speechPlayer_frameParam_t pa1, pa2, pa3, pa4, pa5, pa6; // amplitude of parallel formants between 0 and 1
|
||||
speechPlayer_frameParam_t parallelBypass; // amount of signal which should bypass parallel resonators from 0 to 1
|
||||
speechPlayer_frameParam_t preFormantGain; // amplitude from 0 to 1 of all vocal tract sound (voicing, frication) before entering formant resonators. Useful for stopping/starting speech
|
||||
speechPlayer_frameParam_t outputGain; // amplitude from 0 to 1 of final output (master volume)
|
||||
speechPlayer_frameParam_t endVoicePitch; // pitch of voice at the end of the frame length
|
||||
} speechPlayer_frame_t;
|
||||
|
||||
typedef short sampleVal;
|
||||
|
||||
typedef struct {
|
||||
sampleVal value;
|
||||
} sample;
|
||||
|
||||
typedef void* speechPlayer_handle_t;
|
||||
|
||||
speechPlayer_handle_t speechPlayer_initialize(int sampleRate);
|
||||
void speechPlayer_queueFrame(speechPlayer_handle_t playerHandle, speechPlayer_frame_t* framePtr, unsigned int minFrameDuration, unsigned int fadeDuration, int userIndex, bool purgeQueue);
|
||||
int speechPlayer_synthesize(speechPlayer_handle_t playerHandle, unsigned int sampleCount, sample* sampleBuf);
|
||||
int speechPlayer_getLastIndex(speechPlayer_handle_t playerHandle);
|
||||
void speechPlayer_terminate(speechPlayer_handle_t playerHandle);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user