لا تملك متحكمها موارد كافية لتوفير وظيفة "نص إلى الكلام" عالية الجودة. ومع ذلك ، غالبًا ما يكون من الجيد توفير حل يعتمد على بعض الصوت المسجل مسبقًا.
كنت أتساءل عن قيود هذا النهج وقررت تنفيذ مكتبة Arduino النموذجية الصغيرة التي تستند إلى أدوات Arduino Audio لإخراج الصوت.
للحفاظ على الأشياء البسيطة ، بدأت بتنفيذ بسيط يمكنه معالجة الأرقام وفوق ذلك واحد آخر يقرأ الوقت. وبالتالي فإن نقطة البداية هي بعض الفئات التي تترجم الأرقام إلى رسالة نصية. ثم يتم استخدام النص لتحديد ملفات الصوت المسجلة مسبقًا.
يمكن استخدام هذه الوظيفة على سبيل المثال لبناء بعض
يقوم NumberTotext بترجمة إدخال الرقم إلى Audio_tools :: متجه الكلمات. في الأمثلة التالية ، نطبعها للتو:
NumberToText ntt;
auto result = ntt.say( 700123.431 );
for ( auto str : result){
Serial. print (str);
Serial. print ( " " );
}
والنتيجة هي: سبعمائة ألف واحد ومائة وثلاث وعشرون نقطة
لمعالجة الوقت الذي تحتاجه إلى توفير الساعات والاستثمار كمدخلات.
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 منفصل لأنه يمكننا تخزين الصوت في ذاكرة البرنامج. تحتوي القياس exampleaudiodictionaryvalues على ملفات 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 على 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 ...
فيما يلي رابط وثائق الفئة التي تم إنشاؤها. يمكن العثور على مزيد من المعلومات في الويكي وفي مدوناتي