ไมโครคอนโทรลเลอร์มีทรัพยากรไม่เพียงพอที่จะให้ฟังก์ชั่น 'ข้อความถึงคำพูดที่มีคุณภาพสูง' อย่างไรก็ตามบ่อยครั้งที่มันอาจจะดีพอที่จะให้วิธีการแก้ปัญหาที่ขึ้นอยู่กับเสียงที่บันทึกไว้ล่วงหน้า
ฉันสงสัยเกี่ยวกับข้อ จำกัด ของวิธีการนี้และตัดสินใจที่จะใช้ห้องสมุด Arduino ต้นแบบขนาดเล็กที่ขึ้นอยู่กับเครื่องมือเสียง Arduino สำหรับเอาต์พุตเสียง
เพื่อให้สิ่งต่าง ๆ ง่ายขึ้นฉันเริ่มต้นด้วยการใช้งานอย่างง่ายที่สามารถประมวลผลหมายเลขและเหนือสิ่งอื่นใดที่อ่านเวลา ดังนั้นจุดเริ่มต้นคือบางคลาสที่แปลตัวเลขเป็นข้อความ ข้อความจะถูกใช้เพื่อระบุไฟล์เสียงที่บันทึกไว้ล่วงหน้า
ฟังก์ชั่นนี้สามารถใช้เช่นเพื่อสร้างบางอย่าง
NumberTotext แปลหมายเลขอินพุตลงใน AUDIO_TOOLS :: VECTOR OF WORSE ในตัวอย่างต่อไปนี้เราเพิ่งพิมพ์ออกมา:
NumberToText ntt;
auto result = ntt.say( 700123.431 );
for ( auto str : result){
Serial. print (str);
Serial. print ( " " );
}
ผลที่ได้คือ: เจ็ดแสนพันหนึ่งร้อยยี่สิบสามจุดสี่สามศูนย์ศูนย์ศูนย์ศูนย์
ในการประมวลผลเวลาที่คุณต้องให้เวลาและ minuts เป็นอินพุต
TimeToText ttt;
auto result = ttt.say( 12 , 00 );
for ( auto str : result){
Serial. print (str);
Serial. print ( " " );
}
ผลที่ได้คือ: เที่ยง
นอกจากนี้คุณยังสามารถประมวลผลหมายเลขด้วยหน่วยที่เกี่ยวข้อง
NumberUnitToText utt;
auto result = utt.say( 1.01 , " usd " );
for ( auto str : result){
Serial. print (str);
Serial. print ( " " );
}
ผลที่ได้คือ: หนึ่งดอลลาร์สหรัฐและหนึ่งเซ็นต์
หากเราบันทึกคำใน MP3 เราอาจหนีไปด้วยความต้องการไดรฟ์ SD แยกต่างหากเพราะเราสามารถเก็บเสียงในหน่วยความจำโปรแกรม ExampleAudiDiOdIctionaryValues มีไฟล์ MP3 ที่บันทึกไว้ล่วงหน้าซึ่งถูกเก็บไว้ใน progmem
# include " SimpleTTS.h "
# include " AudioTools/AudioCodecs/CodecMP3Helix.h "
I2SStream i2s; // audio output via I2S
MP3DecoderHelix mp3; // mp3 decoder
AudioDictionary dictionary (ExampleAudioDictionaryValues);
TextToSpeech tts (i2s, mp3, dictionary);
void setup (){
Serial. begin ( 115200 );
// setup i2s
auto cfg = i2s. defaultConfig ();
cfg. sample_rate = 24000 ;
cfg. channels = 1 ;
i2s. begin (cfg);
tts. say ( " BILLION " );
}
void loop () {
}
คำว่า "พันล้าน" ถูกพูดออกมาผ่าน I2S
คุณยังสามารถใช้คลาสการสร้างข้อความที่อธิบายไว้ข้างต้น:
# include " SimpleTTS.h "
# include " AudioTools/AudioCodecs/CodecMP3Helix.h "
TimeToText ttt; // Text source
I2SStream i2s; // audio output via I2S
MP3DecoderHelix mp3; // mp3 decoder
AudioDictionary dictionary (ExampleAudioDictionaryValues);
TextToSpeech tts (ttt, i2s, mp3, dictionary);
void setup (){
Serial. begin ( 115200 );
// setup i2s
auto cfg = i2s. defaultConfig ();
cfg. sample_rate = 24000 ;
cfg. channels = 1 ;
i2s. begin (cfg);
ttt. say ( 14 , 40 );
}
void loop () {
}
สิ่งนี้จะส่งออกผลลัพธ์เสียงผ่าน I2S
นี่คือข้อมูลสำหรับร่างที่ให้การสนับสนุนเวลาและการสนับสนุนหมายเลขและจัดเก็บไฟล์เสียงทั้งหมดเป็น mp3 ใน progmem on เป็น esp32:
Sketch uses 740438 bytes (23%) of program storage space. Maximum is 3145728 bytes.
Global variables use 23632 bytes (7%) of dynamic memory, leaving 304048 bytes for
ฉันคิดว่าสิ่งนี้จะทำให้เกิดความยาวมากมายและคุณยังมีตัวเลือกในการจัดเก็บ เสียงบนไดรฟ์ SD ...
นี่คือลิงค์ไปยังเอกสารคลาสที่สร้างขึ้น ข้อมูลเพิ่มเติมสามารถพบได้ในวิกิและในบล็อกของฉัน