Mikrokontroler tidak memiliki sumber daya yang cukup untuk menyediakan fungsi 'teks untuk pembicaraan' berkualitas tinggi. Namun, seringkali mungkin cukup baik untuk memberikan solusi yang didasarkan pada beberapa audio yang sudah direkam sebelumnya.
Saya bertanya -tanya tentang keterbatasan pendekatan ini dan memutuskan untuk mengimplementasikan pustaka Arduino prototipe kecil yang didasarkan pada alat audio Arduino untuk output audio.
Agar hal -hal sederhana, saya mulai dengan implementasi sederhana yang dapat memproses angka dan di atas yang lain yang membacakan waktu. Jadi titik awalnya adalah beberapa kelas yang menerjemahkan angka ke teks. Teks kemudian digunakan untuk mengidentifikasi file audio yang direkam sebelumnya.
Fungsi ini dapat digunakan misalnya untuk membangun beberapa
NumberToText menerjemahkan input angka ke dalam audio_tools :: vektor kata. Dalam contoh -contoh berikut kami baru saja mencetaknya:
NumberToText ntt;
auto result = ntt.say( 700123.431 );
for ( auto str : result){
Serial. print (str);
Serial. print ( " " );
}
Hasilnya adalah: tujuh ratus ribu seratus dua puluh tiga titik empat tiga nol nol nol
Untuk memproses waktu yang Anda butuhkan untuk memberikan jam dan hal -hal kecil sebagai input.
TimeToText ttt;
auto result = ttt.say( 12 , 00 );
for ( auto str : result){
Serial. print (str);
Serial. print ( " " );
}
Hasilnya adalah: siang
Anda juga dapat memproses nomor dengan unit yang sesuai
NumberUnitToText utt;
auto result = utt.say( 1.01 , " usd " );
for ( auto str : result){
Serial. print (str);
Serial. print ( " " );
}
Hasilnya adalah: satu dolar AS dan satu sen
Jika kita merekam kata -kata dalam MP3, kita bahkan mungkin bisa lolos dengan kebutuhan akan drive SD yang terpisah karena kita dapat menyimpan audio dalam memori program. ExampleAudiodictionaryValues berisi file MP3 yang direkam sebelumnya yang disimpan dalam 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 () {
}
Kata "miliar" diucapkan melalui i2s.
Anda juga dapat menggunakan kelas pembuatan teks yang dijelaskan di atas:
# 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 () {
}
Ini akan menghasilkan hasil audio melalui I2S.
Berikut ini info untuk sketsa yang menyediakan waktu bicara dan dukungan nomor dan menyimpan semua file audio sebagai mp3 di progmem di 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
Saya pikir ini meninggalkan banyak ruang kepala dan Anda masih memiliki opsi untuk menyimpan audio di drive SD ...
Berikut adalah tautan ke dokumentasi kelas yang dihasilkan. Informasi lebih lanjut dapat ditemukan di wiki dan di blog saya