espeak_ng_STATUS LoadPhData(int *srate, espeak_ng_ERROR_CONTEXT *context) { int ix; int n_phonemes; int version; int length; int rate; unsigned char *p; int *pw; espeak_ng_STATUS status; if ((status = ReadPhFile((void **)&phoneme_tab_data, "phontab", NULL, context)) != ENS_OK) return status; if ((status = ReadPhFile((void **)&phoneme_index, "phonindex", NULL, context)) != ENS_OK) return status; if ((status = ReadPhFile((void **)&phondata_ptr, "phondata", NULL, context)) != ENS_OK) return status; if ((status = ReadPhFile((void **)&tunes, "intonations", &length, context)) != ENS_OK) return status; wavefile_data = (unsigned char *)phondata_ptr; n_tunes = length / sizeof(TUNE); // read the version number and sample rate from the first 8 bytes of phondata version = 0; // bytes 0-3, version number rate = 0; // bytes 4-7, sample rate for (ix = 0; ix < 4; ix++) { version += (wavefile_data[ix] << (ix*8)); rate += (wavefile_data[ix+4] << (ix*8)); } if (version != version_phdata) return create_version_mismatch_error_context(context, path_home, version, version_phdata); // set up phoneme tables p = phoneme_tab_data; n_phoneme_tables = p[0]; p += 4; for (ix = 0; ix < n_phoneme_tables; ix++) { n_phonemes = p[0]; phoneme_tab_list[ix].n_phonemes = p[0]; phoneme_tab_list[ix].includes = p[1]; pw = (int *)p; phoneme_tab_list[ix].equivalence_tables = Reverse4Bytes(pw[1]); p += 8; memcpy(phoneme_tab_list[ix].name, p, N_PHONEME_TAB_NAME); p += N_PHONEME_TAB_NAME; phoneme_tab_list[ix].phoneme_tab_ptr = (PHONEME_TAB *)p; p += (n_phonemes * sizeof(PHONEME_TAB)); } if (phoneme_tab_number >= n_phoneme_tables) phoneme_tab_number = 0; if (srate != NULL) *srate = rate; return ENS_OK; }
int LoadPhData() {//============= int ix; int n_phonemes; int version; int result = 1; int length; unsigned char *p; int *pw; if((phoneme_tab_data = (unsigned char *)ReadPhFile((void *)(phoneme_tab_data),"phontab",NULL)) == NULL) return(-1); if((phoneme_index = (USHORT *)ReadPhFile((void *)(phoneme_index),"phonindex",NULL)) == NULL) return(-1); if((phondata_ptr = ReadPhFile((void *)(phondata_ptr),"phondata",NULL)) == NULL) return(-1); if((tunes = (TUNE *)ReadPhFile((void *)(tunes),"intonations",&length)) == NULL) return(-1); wavefile_data = (unsigned char *)phondata_ptr; n_tunes = length / sizeof(TUNE); // read the version number from the first 4 bytes of phondata version = 0; for(ix=0; ix<4; ix++) { version += (wavefile_data[ix] << (ix*8)); } if(version != version_phdata) { result = version; } // set up phoneme tables p = phoneme_tab_data; n_phoneme_tables = p[0]; p+=4; for(ix=0; ix<n_phoneme_tables; ix++) { n_phonemes = p[0]; phoneme_tab_list[ix].n_phonemes = p[0]; phoneme_tab_list[ix].includes = p[1]; pw = (int *)p; phoneme_tab_list[ix].equivalence_tables = Reverse4Bytes(pw[1]); p += 8; memcpy(phoneme_tab_list[ix].name,p,N_PHONEME_TAB_NAME); p += N_PHONEME_TAB_NAME; phoneme_tab_list[ix].phoneme_tab_ptr = (PHONEME_TAB *)p; p += (n_phonemes * sizeof(PHONEME_TAB)); } if(phoneme_tab_number >= n_phoneme_tables) phoneme_tab_number = 0; return(result); } // end of LoadPhData
int LoadPhData(int *srate) {//======================== int ix; int n_phonemes; int version; int result = 1; int length; int rate; unsigned char *p; int *pw; #ifdef DATA_FROM_SOURCECODE_FILES long llength; phoneme_tab_data = (unsigned char *) FileInMemorySet_getData (espeakdata_phons.get(), U"phontab", &llength); phoneme_index = (USHORT *) FileInMemorySet_getData (espeakdata_phons.get(), U"phonindex", &llength); phondata_ptr = (char *) FileInMemorySet_getData (espeakdata_phons.get(), U"phondata", &llength); tunes = (TUNE *) FileInMemorySet_getData (espeakdata_phons.get(), U"intonations", &llength); length = llength; #else if((phoneme_tab_data = (unsigned char *)ReadPhFile((void *)(phoneme_tab_data),"phontab",NULL)) == NULL) return(-1); if((phoneme_index = (USHORT *)ReadPhFile((void *)(phoneme_index),"phonindex",NULL)) == NULL) return(-1); if((phondata_ptr = ReadPhFile((void *)(phondata_ptr),"phondata",NULL)) == NULL) return(-1); if((tunes = (TUNE *)ReadPhFile((void *)(tunes),"intonations",&length)) == NULL) return(-1); #endif wavefile_data = (unsigned char *)phondata_ptr; n_tunes = length / sizeof(TUNE); // read the version number and sample rate from the first 8 bytes of phondata version = 0; // bytes 0-3, version number rate = 0; // bytes 4-7, sample rate for(ix=0; ix<4; ix++) { version += (wavefile_data[ix] << (ix*8)); rate += (wavefile_data[ix+4] << (ix*8)); } if(version != version_phdata) { result = version; } // set up phoneme tables p = phoneme_tab_data; n_phoneme_tables = p[0]; p+=4; for(ix=0; ix<n_phoneme_tables; ix++) { n_phonemes = p[0]; phoneme_tab_list[ix].n_phonemes = p[0]; phoneme_tab_list[ix].includes = p[1]; pw = (int *)p; phoneme_tab_list[ix].equivalence_tables = Reverse4Bytes(pw[1]); p += 8; memcpy(phoneme_tab_list[ix].name,p,N_PHONEME_TAB_NAME); p += N_PHONEME_TAB_NAME; phoneme_tab_list[ix].phoneme_tab_ptr = (PHONEME_TAB *)p; p += (n_phonemes * sizeof(PHONEME_TAB)); } if(phoneme_tab_number >= n_phoneme_tables) phoneme_tab_number = 0; if(srate != NULL) *srate = rate; return(result); } // end of LoadPhData