मैं पॉकेटफिनएक्स_कॉन्टिनस और एक $ 4 साउंड कार्ड के साथ गया ।
इस तथ्य का प्रबंधन करने के लिए कि इसे सुनने के लिए बंद करने की आवश्यकता है जब भाषण सिंथ का उपयोग करके मैंने माइक को इनपुट मात्रा को संभालने के लिए एमिक्सर का उपयोग किया (यह सीएमयू द्वारा सर्वोत्तम अभ्यास की सिफारिश की गई थी क्योंकि स्टॉप-स्टार्टिंग इंजन खराब मान्यता प्राप्त करेगा)
echo "SETTING MIC IN TO 15 (94%)" >> ./audio.log
amixer -c 1 set Mic 15 unmute 2>&1 >/dev/null
जब भाषण सिंथेसिल बजाता है तो सुनने की म्यूटिंग करने के लिए एक मेल कमांड के साथ
FILE: mute.sh
#!/bin/sh
sleep $1;
amixer -c 1 set Mic 0 unmute >/dev/null 2>&1 ;
echo "** MIC OFF **" >> /home/pi/PIXIE/audio.log
म्यूट करने के लिए सही समय की गणना करने के लिए मैं बस लुआ के माध्यम से सूजी चलाता हूं और फिर स्टार्टअप से "x" सेकंड चलाने के लिए अनम्यूट (mute.sh के विपरीत) सेट करता हूं। इससे निपटने के कई तरीके हैं, इसमें कोई शक नहीं है। मैं इस पद्धति के परिणामों से खुश हूं।
LUA SNIPPET:
-- Begin parallel timing
-- MUTE UNTIL THE SOUNDCARD FREES UP
-- "filename" is a fully qualified path to a wav file
-- outputted by voice synth in previous operation
-- GET THE LENGTH
local sample_length = io.popen('soxi -D '..filename);
local total_length = sample_length:read("*a");
clean_length = string.gsub(total_length, "\n", "") +1;
sample_length:close();
-- EXAMPLE LOGGING OUTPUT...
--os.execute( 'echo LENGTH WAS "'.. clean_length .. '" Seconds >> ./audio.log');
-- we are about to play something...
-- MUTE, then schedule UNMUTE.sh in x seconds, then play synth output
-- (have unrolled mute.sh here for clarity)
os.execute( 'amixer -c 1 set Mic '..mic_level..' unmute 2>&1 >/dev/null ');
os.execute( 'echo "** MIC OFF **" >> ./audio.log ');
-- EXAMPLE LOGGING OUTPUT...
-- os.execute( 'echo PLAYING: "'.. filename..'" circa ' .. clean_length .. ' Seconds >> ./audio.log ');
os.execute( './unmute.sh "'.. clean_length ..'" &');
-- THEN PLAY THE THING WHILE THE OTHER PROCESS IS SLEEPING
os.execute( './sounds-uncached.sh '..filename..' 21000')
वास्तव में मैं उपयोग पी पर आवाज को पकड़ो:
pocketsphinx_continuous -bestpath 0 -adcdev plughw:1 -samprate 20000 \
-nfft 512 -ds2 -topn2 -maxwpf 5 -kdtreefn 3000 -kdmaxdepth 7 -kdmaxbbi 15 \
-pl_window 10 -lm ./LANGUAGE/0892-min.lm -dict ./LANGUAGE/0892-min.dic 2>&1 \
| tee -i 2>/dev/null >( sed -u -n -e 's/^.\{9\}: //p' ) \
>( sed -u -n -e 's/^READY//p' \
-e 's/^Listening//p' -e 's/^FATAL_ERROR: \"continuous\.c\"\, //p') \
> /dev/null
फिर से, अन्य तरीके हैं, लेकिन मुझे अपना आउटपुट इस तरह से पसंद है।
जिस सिंथेस के लिए मैंने सेफस्ट्राल्स का इस्तेमाल किया था, वे पीली घोल का इस्तेमाल कर रहे हैं, लेकिन यह ऑनलाइन उपलब्ध नहीं है, इसे खरीदने के लिए आपको सीधे उनसे संपर्क करना होगा और इसे खरीदने के लिए लगभग $ 30 का खर्च होगा। परिणाम स्वीकार्य हैं लेकिन भाषण कुछ बुरा क्लिक और पॉप बनाता है, कंपनी ने कहा है कि उनके पास अब रास्पपी नहीं है और उत्पाद में सुधार करने के लिए तैयार नहीं हैं। YMMV
आवाज पहचान लगभग 12% सीपीयू पर बैठती है जब "निष्क्रिय", और मान्यता की एक रद्दी करते समय संक्षेप में स्पाइक्स।
रेंडर करते समय आवाज निर्माण लगभग 50-80% तक फैल जाता है।
नाटक / sox का वजन बहुत अधिक है, लेकिन मैं गाया जाने वाली आवाज़ों पर वास्तविक समय के प्रभाव को लागू करता हूं क्योंकि मैं उन्हें खेलता हूं);
प्रत्येक गाइड का उपयोग करके पीआई को भारी रूप से छीन लिया गया है जो मुझे गैर-आवश्यक सेवाओं को बंद करने और संपूर्ण सीएलआई मोड में चलाने के लिए मिल सकता है। 800mhz ओवर-क्लॉक (सबसे छोटा)।
scaling_governor सेट करने के लिए: प्रदर्शन
जब पूरी तरह से चल रहा है: यह सीधे धूप में 50 andC और छाया में 38 inC पर चलता है। मेरे पास हीट सिंक फिटेड है।
अंतिम बिंदु: मैं वास्तव में एक अच्छा अतिरिक्त के रूप में "इंटरनेट संचालित" एआई के लिए इस सभी गियर को चलाता हूं।
पाई यह सब मूल रूप से संभालती है, और वास्तविक समय में किसी भी नेटवर्क वाले ऑडियो को चलाती है, और किसी अन्य यूनिक्स बॉक्स में पूरी तरह से ऑडियो को लूप कर देती है। आदि।
बड़े भाषण सीपीयू ओवरहेड बोझ को संभालने के लिए मैंने एक md5sum आधारित कैशिंग प्रणाली को लागू किया है ताकि एक ही उच्चारण दो बार प्रस्तुत न हो। (लगभग 1000 फाइलें @ 220 mb कुल में 70% उच्चारण शामिल हैं जो मैं आमतौर पर AI से वापस प्राप्त करता हूं) यह वास्तव में कुल सीपीयू लोड को नीचे लाने में मदद करता है।
Précis में यह सब पूरी तरह से उल्लेखनीय है। हालाँकि, आवाज की पहचान केवल आपकी mics, आपके भाषा मॉडल की गुणवत्ता जितनी ही अच्छी होगी, विशेष रूप से आपके विषय आवाज़ें मूल इच्छित ऑडियंस के लिए बंद होती हैं (मैं en_UK बच्चों पर एक en_US मॉडल का उपयोग करता हूं, संपूर्ण नहीं) और विस्तार के अन्य minutia प्रयास के साथ आप एक सभ्य परिणाम के लिए नीचे कर सकते हैं।
और रिकॉर्ड के लिए, मैंने पहले ही एक बार एक किंडल पर यह सब किया था (और वह भी cmu स्फिंक्स और फ्लेइट के साथ काम किया था)। उम्मीद है की यह मदद करेगा।