Esempio n. 1
0
 voice_info::voice_info(const std::string& data_path,language_list& languages):
   gender("gender",RHVoice_voice_gender_unknown),
   enabled("enabled",true),
   preferred("preferred",false),
   country("country")
 {
   gender.define("male",RHVoice_voice_gender_male);
   gender.define("female",RHVoice_voice_gender_female);
   set_data_path(data_path);
   string_property name("name");
   enum_string_property language_name("language");
   for(language_list::const_iterator it(languages.begin());it!=languages.end();++it)
     {
       language_name.define(it->get_name());
     }
   config cfg;
   cfg.register_setting(name);
   cfg.register_setting(language_name);
   cfg.register_setting(country);
   cfg.register_setting(sample_rate);
   cfg.register_setting(gender);
   cfg.load(path::join(data_path,"voice.info"));
   if(!name.is_set())
     throw file_format_error("Voice name is not set");
   set_name(name);
   if(!language_name.is_set())
     throw file_format_error("Voice language is not set");
   language_list::iterator lang=languages.find(language_name);
   voice_language=lang;
   settings.default_to(voice_language->voice_settings);
 }
Esempio n. 2
0
 dtree::internal_node::internal_node(std::istream& in,unsigned int qtype):
   feature_name(read_string(in))
 {
   unsigned int vtype=read_number(in);
   switch(qtype)
     {
     case condition_equal:
       switch(vtype)
         {
         case value_string:
           question.reset(new str_equal(read_string(in)));
           break;
         case value_number:
           question.reset(new num_equal(read_number(in)));
           break;
         default:
           throw file_format_error(err_msg);
         }
       break;
     case condition_less:
       if(vtype!=value_number)
         throw file_format_error(err_msg);
       question.reset(new less(read_number(in)));
       break;
     case condition_grater:
       if(vtype!=value_number)
         throw file_format_error(err_msg);
       question.reset(new grater(read_number(in)));
       break;
     case condition_in:
       if(vtype!=value_list)
         throw file_format_error(err_msg);
       question.reset(new in_list(in));
       break;
     default:
       throw file_format_error(err_msg);
     }
   unsigned int next_type=read_number(in);
   if(next_type==0)
     yes_node.reset(new leaf_node(in));
   else
     yes_node.reset(new internal_node(in,next_type));
   next_type=read_number(in);
   if(next_type==0)
     no_node.reset(new leaf_node(in));
   else
     no_node.reset(new internal_node(in,next_type));
 }
Esempio n. 3
0
 dtree::in_list::in_list(std::istream& in)
 {
   unsigned int size=read_number(in);
   if(size==0)
     throw file_format_error(err_msg);
   tests.reserve(size);
   for(unsigned int i=0;i<size;++i)
     {
       switch(read_number(in))
         {
         case value_string:
           tests.push_back(smart_ptr<condition>(new str_equal(read_string(in))));
           break;
         case value_number:
           tests.push_back(smart_ptr<condition>(new num_equal(read_number(in))));
           break;
         default:
           throw file_format_error(err_msg);
         }
     }
 }
Esempio n. 4
0
 lts::state::state(std::istream& in):
   letter_index(0),
   letter('\0'),
   yes_transition(0),
   no_transition(0)
 {
   if(!io::read_integer(in,letter_index))
     throw file_format_error(err_msg);
   if(letter_index==0)
     {
       for(uint8_t i=0;i<4;++i)
         {
           if(!io::read_integer(in,phone_ids[i]))
             throw file_format_error(err_msg);
         }
     }
   else
     {
       if(!(io::read_integer(in,letter)&&
            io::read_integer(in,yes_transition)&&
            io::read_integer(in,no_transition)))
         throw file_format_error(err_msg);
     }
 }
Esempio n. 5
0
 dtree::leaf_node::leaf_node(std::istream& in)
 {
   unsigned int type=read_number(in);
   switch(type)
     {
     case value_string:
       answer=read_string(in);
       break;
     case value_number:
       answer=read_number(in);
       break;
     default:
       throw file_format_error(err_msg);
     }
 }
Esempio n. 6
0
 lts::lts(const std::string& file_path):
   context_window_size(0)
 {
   std::ifstream f_in;
   io::open_ifstream(f_in,file_path,true);
   if(!io::read_integer(f_in,context_window_size))
     throw file_format_error(err_msg);
   uint8_t num_phones;
   if(!io::read_integer(f_in,num_phones))
     throw file_format_error(err_msg);
   phones.reserve(num_phones);
   std::string phone;
   for(uint8_t i=0;i<num_phones;++i)
     {
       if(!io::read_string(f_in,phone))
         throw file_format_error(err_msg);
       phones.push_back(phone);
     }
   uint8_t num_models;
   if(!io::read_integer(f_in,num_models))
     throw file_format_error(err_msg);
   for(uint8_t i=0;i<num_models;++i)
     {
       uint32_t letter='\0';
       if(!io::read_integer(f_in,letter))
         throw file_format_error(err_msg);
       uint16_t num_states=0;
       if(!io::read_integer(f_in,num_states))
         throw file_format_error(err_msg);
       model& m=rules[letter];
       if(!m.empty())
         throw file_format_error(err_msg);
       m.reserve(num_states);
       for(uint16_t j=0;j<num_states;++j)
         {
           m.push_back(state(f_in));
         }
     }
 }