Browse Source

[1.28.07] Changed the format of envelope files (phsource/envelope). These are not text files which contains coordinates which define the envelope.

The compile_phoneme_data operation now produces an image file phsource/envelopes.png which shows the shape of the envelopes.

git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@78 d46cf337-b52f-0410-862d-fd96e6ae7743
master
jonsd 18 years ago
parent
commit
cbff131b89

BIN
phsource/envelope/p_211 View File


BIN
phsource/envelope/p_214 View File


BIN
phsource/envelope/p_fall View File


BIN
phsource/envelope/p_fallrise View File


BIN
phsource/envelope/p_level View File


BIN
phsource/envelope/p_rise View File


BIN
phsource/envelope/vi_2 View File


BIN
phsource/envelope/vi_5 View File


BIN
phsource/envelope/vi_5amp View File


BIN
phsource/envelope/vi_6 View File


BIN
phsource/envelope/vi_6amp View File


+ 1
- 1
platforms/windows/windows_cmd/espeak.dsp View File

# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib winmm.lib user32.lib gdi32.lib winspool.lib comdlg32.lib PAStaticWMME.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ENDIF !ENDIF

+ 86
- 2
src/compiledata.cpp View File

extern void Write4Bytes(FILE *f, int value); extern void Write4Bytes(FILE *f, int value);
extern void MakeVowelLists(void); extern void MakeVowelLists(void);
extern void FindPhonemesUsed(void); extern void FindPhonemesUsed(void);
extern void DrawEnvelopes();
extern int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, char *fname); extern int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, char *fname);
extern char voice_name[]; extern char voice_name[];


} REF_HASH_TAB; } REF_HASH_TAB;




#define N_ENVELOPES 30
#define ENV_LEN 128
int n_envelopes = 0;
char envelope_paths[N_ENVELOPES][80];
unsigned char envelope_dat[N_ENVELOPES][ENV_LEN];



class Compile class Compile
{//========== {//==========
public: public:
int LoadSpect(const char *path, int control); int LoadSpect(const char *path, int control);
int LoadWavefile(FILE *f, const char *fname); int LoadWavefile(FILE *f, const char *fname);
int LoadEnvelope(FILE *f, const char *fname); int LoadEnvelope(FILE *f, const char *fname);
int LoadEnvelope2(FILE *f, const char *fname);
int LoadDataFile(const char *path, int control); int LoadDataFile(const char *path, int control);
int AddSpect(int phcode, int *list, int control); int AddSpect(int phcode, int *list, int control);
void AddSpectList(int *list, int control); void AddSpectList(int *list, int control);
fread(buf,1,128,f); fread(buf,1,128,f);
fwrite(buf,1,128,f_phdata); fwrite(buf,1,128,f_phdata);


if(n_envelopes < N_ENVELOPES)
{
strncpy0(envelope_paths[n_envelopes],fname,sizeof(envelope_paths[0]));
memcpy(envelope_dat[n_envelopes],buf,sizeof(envelope_dat[0]));
n_envelopes++;
}

return(displ); return(displ);
} }


type_code = 'E'; type_code = 'E';
} }
else else
if(id == 0x45564E45)
{
ix = LoadEnvelope2(f,path);
type_code = 'E';
}
else
{ {
Error("File not SPEC or RIFF",path); Error("File not SPEC or RIFF",path);
ix = -1; ix = -1;


if(ix > 0) if(ix > 0)
{ {
// fprintf(f_phcontents,"%c %-15s %4d 0x%.5x %s\n",type_code,current_fname,linenum,ix & 0x7fffff,path);
fprintf(f_phcontents,"%c 0x%.5x %s\n",type_code,ix & 0x7fffff,path); fprintf(f_phcontents,"%c 0x%.5x %s\n",type_code,ix & 0x7fffff,path);
} }


} }
#endif #endif


int Compile::LoadEnvelope2(FILE *f, const char *fname)
{//===================================================
int ix;
int n;
int x, y;
int displ;
int n_points;
char line_buf[128];
float env_x[20];
float env_y[20];
int env_lin[20];
unsigned char env[ENV_LEN];

n_points = 0;
fgets(line_buf,sizeof(line_buf),f); // skip first line
while(!feof(f))
{
if(fgets(line_buf,sizeof(line_buf),f) == NULL)
break;

env_lin[n_points] = 0;
n = sscanf(line_buf,"%f %f %d",&env_x[n_points],&env_y[n_points],&env_lin[n_points]);
if(n >= 2)
{
env_x[n_points] *= 1.28; // convert range 0-100 to 0-128
n_points++;
}
}
env_x[n_points] = env_x[n_points-1];
env_y[n_points] = env_y[n_points-1];

ix = -1;
for(x=0; x<ENV_LEN; x++)
{
if(x > env_x[ix+4])
ix++;

if(n_points > 3)
y = (int)(polint(&env_x[ix],&env_y[ix],4,x) * 2.55); // convert to range 0-255
else
y = (int)(polint(&env_x[ix],&env_y[ix],3,x) * 2.55);
if(y < 0) y = 0;
if(y > 255) y = 255;
env[x] = y;
}


if(n_envelopes < N_ENVELOPES)
{
strncpy0(envelope_paths[n_envelopes],fname,sizeof(envelope_paths[0]));
memcpy(envelope_dat[n_envelopes],env,ENV_LEN);
n_envelopes++;
}

displ = ftell(f_phdata);
fwrite(env,1,128,f_phdata);

return(displ);
}


static int ref_sorter(char **a, char **b) static int ref_sorter(char **a, char **b)
{//====================================== {//======================================
make_envs(); make_envs();
#endif #endif


n_envelopes = 0;
error_count = 0; error_count = 0;
memset(markers_used,0,sizeof(markers_used)); memset(markers_used,0,sizeof(markers_used));


LoadPhData(); LoadPhData();
LoadVoice(voice_name,0); LoadVoice(voice_name,0);
Report(); Report();
DrawEnvelopes();


report_dict = CompileAllDictionaries(); report_dict = CompileAllDictionaries();



+ 1
- 1
src/synthdata.cpp View File

#include "translate.h" #include "translate.h"
#include "wave.h" #include "wave.h"


const char *version_string = "1.28.05 17.Aug.07";
const char *version_string = "1.28.07 21.Aug.07";
const int version_phdata = 0x012801; const int version_phdata = 0x012801;


int option_device_number = -1; int option_device_number = -1;

+ 52
- 0
src/vowelchart.cpp View File

LoadVoice(voice_name,0); // reset the original phoneme table LoadVoice(voice_name,0); // reset the original phoneme table
delete progress; delete progress;
} }


extern int n_envelopes;
extern char envelope_paths[][80];
extern unsigned char envelope_dat[][128];

#define HT_ENV 140
#define WD_ENV 128*2

void DrawEnvelopes()
{//================
int ix_env;
int y_base;
int x;
unsigned char *env;
char name[80];

wxBitmap bitmap(WD_ENV,HT_ENV*n_envelopes);

// Create a memory DC
wxMemoryDC dc;
dc.SelectObject(bitmap);
dc.SetBrush(*wxWHITE_BRUSH);
dc.SetFont(*wxSWISS_FONT);
dc.Clear();


for(ix_env=0; ix_env<n_envelopes; ix_env++)
{
y_base = HT_ENV * ix_env;
dc.SetPen(*wxLIGHT_GREY_PEN);
dc.DrawLine(0,y_base+0,256,y_base+0);
dc.DrawLine(0,y_base+64,256,y_base+64);
dc.DrawLine(0,y_base+128,256,y_base+128);
dc.DrawLine(128,y_base+0,128,y_base+128);

dc.SetPen(*wxBLACK_PEN);
strncpy0(name,envelope_paths[ix_env],sizeof(name));
dc.DrawText(wxString(name,wxConvLocal),1,y_base);

env = envelope_dat[ix_env];
y_base = y_base+128;
for(x=0; x<127; x++)
{
dc.DrawLine(x*2, y_base-env[x]/2, (x+1)*2, y_base-env[x+1]/2);
}
}

bitmap.SaveFile(path_phsource+_T("/envelopes.png"),wxBITMAP_TYPE_PNG);

}


+ 9
- 2
src/wave.cpp View File

#else #else
// notdef USE_PORTAUDIO // notdef USE_PORTAUDIO


void wave_flush(void* theHandler) {}
void wave_init() {} void wave_init() {}
void* wave_open(char* the_api) {return (void *)1;} void* wave_open(char* the_api) {return (void *)1;}
size_t wave_write(void* theHandler, char* theMono16BitsWaveBuffer, size_t theSize) {return theSize;} size_t wave_write(void* theHandler, char* theMono16BitsWaveBuffer, size_t theSize) {return theSize;}
void wave_terminate() {} void wave_terminate() {}
uint32_t wave_get_read_position(void* theHandler) {return 0;} uint32_t wave_get_read_position(void* theHandler) {return 0;}
uint32_t wave_get_write_position(void* theHandler) {return 0;} uint32_t wave_get_write_position(void* theHandler) {return 0;}
int wave_get_remaining_time(uint32_t sample, uint32_t* time) {return 0;}
void wave_flush(void* theHandler) {} void wave_flush(void* theHandler) {}
typedef int (t_wave_callback)(void); typedef int (t_wave_callback)(void);
void wave_set_callback_is_output_enabled(t_wave_callback* cb) {} void wave_set_callback_is_output_enabled(t_wave_callback* cb) {}
extern void* wave_test_get_write_buffer() {return 0;}
extern void* wave_test_get_write_buffer() {return NULL;}

int wave_get_remaining_time(uint32_t sample, uint32_t* time)
{
if (!time) return(-1);
*time = (uint32_t)0;
return 0;
}


#endif // of USE_PORTAUDIO #endif // of USE_PORTAUDIO



Loading…
Cancel
Save