; extensions_voxforge.conf - An IVR to automatically recording transcribed audio for Voxforge.org ; Copyright (C) 2007 Jesse D. Guardiani ; ; This program is free software; you can redistribute it and/or ; modify it under the terms of the GNU General Public License ; as published by the Free Software Foundation; either version 2 ; of the License, or (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ; --------------------------------------------------------------------------------- ; ; note: I misspell 'record' as 'reecord' on purpose because flite mispronounces it. ; I also use periods (.) instead of commas (,) because flite doesn't pause long enough on commas. [custom-voxforge] exten => s,1,Set(ran-init=0) exten => s,2,Set(ran-instructions=0) exten => s,3,Set(prompts-dir=/voxforge-code/prompts) exten => s,4,Set(menu-dir=${prompts-dir}/audio/menu) ;exten => s,5,Flite("Welcome to the Vox Forge automated reecording system!") exten => s,5,Answer() exten => s,6,Wait(2) exten => s,7,Playback(${menu-dir}/welcome) exten => s,8,Gosub(sub-voxforge-channel-limit|s|1) exten => s,9,Goto(custom-voxforge-license|s|1) exten => i,1,Goto(s|2) exten => h,1,Gosub(sub-voxforge-decrement-num-active-channels|s|1) [custom-voxforge-license] ;exten => s,1,Flite("To use this system. You must agree to have your voice reecorded.") ;exten => s,2,Flite("And licensed under the G N U ... G P L.") ;exten => s,3,Flite("With copyright assigned to the Free Software Foundation.") ;exten => s,4,Flite('Press 1 if you agree. Press 2. Or hang up now. If you do not agree. Or do not understand. Press 3 for more information about the G N U ... G P L license.'|123) exten => s,1,Playback(${menu-dir}/license-agree-info) exten => s,2,Background(${menu-dir}/license-agree-prompt) exten => s,3,WaitExten(10) exten => 1,1,Goto(custom-voxforge-gender|s|1) exten => 2,1,Playback(vm-goodbye) exten => 2,2,Gosub(sub-voxforge-decrement-num-active-channels|s|1) exten => 2,3,Hangup() ;exten => 3,1,Flite("The G N U ... G P L. or G N U... General Public License. refers to a type of Open Source license. Copyright protects a creator's right to control copies and changes to A work. By pressing 1... you agree... to give away the Copyright of your speech submission to the Free Software Foundation. And license your submission under the G P L. The G P L protects everyone's right to copy and make changes to your submission. For more information about the G P L. please go to www dot g n u dot o r g"|123) exten => 3,1,Background(${menu-dir}/license-about) exten => 3,2,Goto(s|2) ;exten => i,1,Flite('Sorry. that is not a valid choice.'|1234567890) exten => i,1,Background(${menu-dir}/not-a-valid-choice) exten => i,2,Goto(s|1) exten => h,1,Gosub(sub-voxforge-decrement-num-active-channels|s|1) [custom-voxforge-gender] ;exten => s,1,Flite("Please press 1 if you are a male. Press 2 if you are a female."|12) exten => s,1,Background(${menu-dir}/gender) exten => s,2,WaitExten(10) exten => 1,1,Setvar(gender=male) exten => 1,2,Goto(custom-voxforge-gender-confirm|s|1) exten => 2,1,Setvar(gender=female) exten => 2,2,Goto(custom-voxforge-gender-confirm|s|1) ;exten => i,1,Flite('Sorry. that is not a valid choice.'|1234567890) exten => i,1,Background(${menu-dir}/not-a-valid-choice) exten => i,2,Goto(s|1) exten => h,1,Gosub(sub-voxforge-decrement-num-active-channels|s|1) [custom-voxforge-gender-confirm] ;exten => s,1,Flite('OK, you chose ${gender}. Press 1 if this is correct. Press 2 to try again.'|12) exten => s,1,GotoIf($[${gender} = 'male']?2:4) exten => s,2,Background(${menu-dir}/chose-male) exten => s,3,Goto(s|5) exten => s,4,Background(${menu-dir}/chose-female) exten => s,5,Background(${menu-dir}/1-correct-2-try-again) exten => s,6,WaitExten(10) exten => 1,1,Goto(custom-voxforge-agerange|s|1) exten => 2,1,Goto(custom-voxforge-gender|s|1) ;exten => i,1,Flite('Sorry. that is not a valid choice.'|1234567890) exten => i,1,Background(${menu-dir}/not-a-valid-choice) exten => i,2,Goto(s|1) exten => h,1,Gosub(sub-voxforge-decrement-num-active-channels|s|1) [custom-voxforge-agerange] ;exten => s,1,Flite('Please press 1 if you are a youth. Press 2 if you are an adult. Or press 3 if you are a senior.'|123) exten => s,1,Background(${menu-dir}/agerange) exten => s,2,WaitExten(10) exten => 1,1,Setvar(agerange=youth) exten => 1,2,Goto(custom-voxforge-agerange-confirm|s|1) exten => 2,1,Setvar(agerange=adult) exten => 2,2,Goto(custom-voxforge-agerange-confirm|s|1) exten => 3,1,Setvar(agerange=senior) exten => 3,2,Goto(custom-voxforge-agerange-confirm|s|1) ;exten => i,1,Flite('Sorry. that is not a valid choice.'|1234567890) exten => i,1,Background(${menu-dir}/not-a-valid-choice) exten => i,2,Goto(s|1) exten => h,1,Gosub(sub-voxforge-decrement-num-active-channels|s|1) [custom-voxforge-agerange-confirm] ;exten => s,1,Flite('OK, you chose ${agerange}. Press 1 if this is correct. Press 2 to try again.'|12) exten => s,1,GotoIf($[${agerange} = 'youth']?2:4) exten => s,2,Background(${menu-dir}/chose-youth) exten => s,3,Goto(s|8) exten => s,4,GotoIf($[${agerange} = 'adult']?5:7) exten => s,5,Background(${menu-dir}/chose-adult) exten => s,6,Goto(s|8) exten => s,7,Background(${menu-dir}/chose-senior) exten => s,8,Background(${menu-dir}/1-correct-2-try-again) exten => s,9,WaitExten(10) exten => 1,1,Set(num-complete=0) exten => 1,2,Set(num-complete-this-round=0) exten => 1,3,Goto(custom-voxforge-selectscript|s|1) exten => 2,1,Goto(custom-voxforge-agerange|s|1) ;exten => i,1,Flite('Sorry. that is not a valid choice.'|1234567890) exten => i,1,Background(${menu-dir}/not-a-valid-choice) exten => i,2,Goto(s|1) exten => h,1,Gosub(sub-voxforge-decrement-num-active-channels|s|1) [custom-voxforge-selectscript] exten => s,1,Set(max-script-num=48) exten => s,2,Gosub(sub-voxforge-get-script-num|s|1) exten => s,3,Gosub(sub-voxforge-increment-script-num|s|1) exten => s,4,Goto(${script-num}|1) exten => 1,1,Goto(custom-voxforge-vf3-1|s|1) exten => 2,1,Goto(custom-voxforge-vf3-2|s|1) exten => 3,1,Goto(custom-voxforge-vf3-3|s|1) exten => 4,1,Goto(custom-voxforge-vf3-4|s|1) exten => 5,1,Goto(custom-voxforge-vf3-5|s|1) exten => 6,1,Goto(custom-voxforge-vf3-6|s|1) exten => 7,1,Goto(custom-voxforge-vf3-7|s|1) exten => 8,1,Goto(custom-voxforge-vf3-8|s|1) exten => 9,1,Goto(custom-voxforge-vf4-1|s|1) exten => 10,1,Goto(custom-voxforge-vf4-2|s|1) exten => 11,1,Goto(custom-voxforge-vf4-3|s|1) exten => 12,1,Goto(custom-voxforge-vf4-4|s|1) exten => 13,1,Goto(custom-voxforge-vf4-5|s|1) exten => 14,1,Goto(custom-voxforge-vf4-6|s|1) exten => 15,1,Goto(custom-voxforge-vf4-7|s|1) exten => 16,1,Goto(custom-voxforge-vf4-8|s|1) exten => 17,1,Goto(custom-voxforge-vf5-1|s|1) exten => 18,1,Goto(custom-voxforge-vf5-2|s|1) exten => 19,1,Goto(custom-voxforge-vf5-3|s|1) exten => 20,1,Goto(custom-voxforge-vf5-4|s|1) exten => 21,1,Goto(custom-voxforge-vf5-5|s|1) exten => 22,1,Goto(custom-voxforge-vf5-6|s|1) exten => 23,1,Goto(custom-voxforge-vf5-7|s|1) exten => 24,1,Goto(custom-voxforge-vf5-8|s|1) exten => 25,1,Goto(custom-voxforge-vf6-1|s|1) exten => 26,1,Goto(custom-voxforge-vf6-2|s|1) exten => 27,1,Goto(custom-voxforge-vf6-3|s|1) exten => 28,1,Goto(custom-voxforge-vf6-4|s|1) exten => 29,1,Goto(custom-voxforge-vf6-5|s|1) exten => 30,1,Goto(custom-voxforge-vf6-6|s|1) exten => 31,1,Goto(custom-voxforge-vf6-7|s|1) exten => 32,1,Goto(custom-voxforge-vf6-8|s|1) exten => 33,1,Goto(custom-voxforge-vf7-1|s|1) exten => 34,1,Goto(custom-voxforge-vf7-2|s|1) exten => 35,1,Goto(custom-voxforge-vf7-3|s|1) exten => 36,1,Goto(custom-voxforge-vf7-4|s|1) exten => 37,1,Goto(custom-voxforge-vf7-5|s|1) exten => 38,1,Goto(custom-voxforge-vf7-6|s|1) exten => 39,1,Goto(custom-voxforge-vf7-7|s|1) exten => 40,1,Goto(custom-voxforge-vf7-8|s|1) exten => 41,1,Goto(custom-voxforge-vf8-1|s|1) exten => 42,1,Goto(custom-voxforge-vf8-2|s|1) exten => 43,1,Goto(custom-voxforge-vf8-3|s|1) exten => 44,1,Goto(custom-voxforge-vf8-4|s|1) exten => 45,1,Goto(custom-voxforge-vf8-5|s|1) exten => 46,1,Goto(custom-voxforge-vf8-6|s|1) exten => 47,1,Goto(custom-voxforge-vf8-7|s|1) exten => 48,1,Goto(custom-voxforge-vf8-8|s|1) exten => i,1,Goto(s|1) [custom-voxforge-vf3-1] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf3-01') exten => 50,2,Macro(voxforge-hrecord,'vf3-02') exten => 50,3,Macro(voxforge-hrecord,'vf3-03') exten => 50,4,Macro(voxforge-hrecord,'vf3-04') exten => 50,5,Macro(voxforge-hrecord,'vf3-05') [custom-voxforge-vf3-2] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf3-06') exten => 50,2,Macro(voxforge-hrecord,'vf3-07') exten => 50,3,Macro(voxforge-hrecord,'vf3-08') exten => 50,4,Macro(voxforge-hrecord,'vf3-09') exten => 50,5,Macro(voxforge-hrecord,'vf3-10') [custom-voxforge-vf3-3] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf3-11') exten => 50,2,Macro(voxforge-hrecord,'vf3-12') exten => 50,3,Macro(voxforge-hrecord,'vf3-13') exten => 50,4,Macro(voxforge-hrecord,'vf3-14') exten => 50,5,Macro(voxforge-hrecord,'vf3-15') [custom-voxforge-vf3-4] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf3-16') exten => 50,2,Macro(voxforge-hrecord,'vf3-17') exten => 50,3,Macro(voxforge-hrecord,'vf3-18') exten => 50,4,Macro(voxforge-hrecord,'vf3-19') exten => 50,5,Macro(voxforge-hrecord,'vf3-20') [custom-voxforge-vf3-5] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf3-21') exten => 50,2,Macro(voxforge-hrecord,'vf3-22') exten => 50,3,Macro(voxforge-hrecord,'vf3-23') exten => 50,4,Macro(voxforge-hrecord,'vf3-24') exten => 50,5,Macro(voxforge-hrecord,'vf3-25') [custom-voxforge-vf3-6] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf3-26') exten => 50,2,Macro(voxforge-hrecord,'vf3-27') exten => 50,3,Macro(voxforge-hrecord,'vf3-28') exten => 50,4,Macro(voxforge-hrecord,'vf3-29') exten => 50,5,Macro(voxforge-hrecord,'vf3-30') [custom-voxforge-vf3-7] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf3-31') exten => 50,2,Macro(voxforge-hrecord,'vf3-32') exten => 50,3,Macro(voxforge-hrecord,'vf3-33') exten => 50,4,Macro(voxforge-hrecord,'vf3-34') exten => 50,5,Macro(voxforge-hrecord,'vf3-35') [custom-voxforge-vf3-8] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf3-36') exten => 50,2,Macro(voxforge-hrecord,'vf3-37') exten => 50,3,Macro(voxforge-hrecord,'vf3-38') exten => 50,4,Macro(voxforge-hrecord,'vf3-39') exten => 50,5,Macro(voxforge-hrecord,'vf3-40') [custom-voxforge-vf4-1] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf4-01') exten => 50,2,Macro(voxforge-hrecord,'vf4-02') exten => 50,3,Macro(voxforge-hrecord,'vf4-03') exten => 50,4,Macro(voxforge-hrecord,'vf4-04') exten => 50,5,Macro(voxforge-hrecord,'vf4-05') [custom-voxforge-vf4-2] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf4-06') exten => 50,2,Macro(voxforge-hrecord,'vf4-07') exten => 50,3,Macro(voxforge-hrecord,'vf4-08') exten => 50,4,Macro(voxforge-hrecord,'vf4-09') exten => 50,5,Macro(voxforge-hrecord,'vf4-10') [custom-voxforge-vf4-3] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf4-11') exten => 50,2,Macro(voxforge-hrecord,'vf4-12') exten => 50,3,Macro(voxforge-hrecord,'vf4-13') exten => 50,4,Macro(voxforge-hrecord,'vf4-14') exten => 50,5,Macro(voxforge-hrecord,'vf4-15') [custom-voxforge-vf4-4] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf4-16') exten => 50,2,Macro(voxforge-hrecord,'vf4-17') exten => 50,3,Macro(voxforge-hrecord,'vf4-18') exten => 50,4,Macro(voxforge-hrecord,'vf4-19') exten => 50,5,Macro(voxforge-hrecord,'vf4-20') [custom-voxforge-vf4-5] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf4-21') exten => 50,2,Macro(voxforge-hrecord,'vf4-22') exten => 50,3,Macro(voxforge-hrecord,'vf4-23') exten => 50,4,Macro(voxforge-hrecord,'vf4-24') exten => 50,5,Macro(voxforge-hrecord,'vf4-25') [custom-voxforge-vf4-6] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf4-26') exten => 50,2,Macro(voxforge-hrecord,'vf4-27') exten => 50,3,Macro(voxforge-hrecord,'vf4-28') exten => 50,4,Macro(voxforge-hrecord,'vf4-29') exten => 50,5,Macro(voxforge-hrecord,'vf4-30') [custom-voxforge-vf4-7] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf4-31') exten => 50,2,Macro(voxforge-hrecord,'vf4-32') exten => 50,3,Macro(voxforge-hrecord,'vf4-33') exten => 50,4,Macro(voxforge-hrecord,'vf4-34') exten => 50,5,Macro(voxforge-hrecord,'vf4-35') [custom-voxforge-vf4-8] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf4-36') exten => 50,2,Macro(voxforge-hrecord,'vf4-37') exten => 50,3,Macro(voxforge-hrecord,'vf4-38') exten => 50,4,Macro(voxforge-hrecord,'vf4-39') exten => 50,5,Macro(voxforge-hrecord,'vf4-40') [custom-voxforge-vf5-1] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf5-01') exten => 50,2,Macro(voxforge-hrecord,'vf5-02') exten => 50,3,Macro(voxforge-hrecord,'vf5-03') exten => 50,4,Macro(voxforge-hrecord,'vf5-04') exten => 50,5,Macro(voxforge-hrecord,'vf5-05') [custom-voxforge-vf5-2] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf5-06') exten => 50,2,Macro(voxforge-hrecord,'vf5-07') exten => 50,3,Macro(voxforge-hrecord,'vf5-08') exten => 50,4,Macro(voxforge-hrecord,'vf5-09') exten => 50,5,Macro(voxforge-hrecord,'vf5-10') [custom-voxforge-vf5-3] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf5-11') exten => 50,2,Macro(voxforge-hrecord,'vf5-12') exten => 50,3,Macro(voxforge-hrecord,'vf5-13') exten => 50,4,Macro(voxforge-hrecord,'vf5-14') exten => 50,5,Macro(voxforge-hrecord,'vf5-15') [custom-voxforge-vf5-4] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf5-16') exten => 50,2,Macro(voxforge-hrecord,'vf5-17') exten => 50,3,Macro(voxforge-hrecord,'vf5-18') exten => 50,4,Macro(voxforge-hrecord,'vf5-19') exten => 50,5,Macro(voxforge-hrecord,'vf5-20') [custom-voxforge-vf5-5] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf5-21') exten => 50,2,Macro(voxforge-hrecord,'vf5-22') exten => 50,3,Macro(voxforge-hrecord,'vf5-23') exten => 50,4,Macro(voxforge-hrecord,'vf5-24') exten => 50,5,Macro(voxforge-hrecord,'vf5-25') [custom-voxforge-vf5-6] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf5-26') exten => 50,2,Macro(voxforge-hrecord,'vf5-27') exten => 50,3,Macro(voxforge-hrecord,'vf5-28') exten => 50,4,Macro(voxforge-hrecord,'vf5-29') exten => 50,5,Macro(voxforge-hrecord,'vf5-30') [custom-voxforge-vf5-7] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf5-31') exten => 50,2,Macro(voxforge-hrecord,'vf5-32') exten => 50,3,Macro(voxforge-hrecord,'vf5-33') exten => 50,4,Macro(voxforge-hrecord,'vf5-34') exten => 50,5,Macro(voxforge-hrecord,'vf5-35') [custom-voxforge-vf5-8] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf5-36') exten => 50,2,Macro(voxforge-hrecord,'vf5-37') exten => 50,3,Macro(voxforge-hrecord,'vf5-38') exten => 50,4,Macro(voxforge-hrecord,'vf5-39') exten => 50,5,Macro(voxforge-hrecord,'vf5-40') [custom-voxforge-vf6-1] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf6-01') exten => 50,2,Macro(voxforge-hrecord,'vf6-02') exten => 50,3,Macro(voxforge-hrecord,'vf6-03') exten => 50,4,Macro(voxforge-hrecord,'vf6-04') exten => 50,5,Macro(voxforge-hrecord,'vf6-05') [custom-voxforge-vf6-2] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf6-06') exten => 50,2,Macro(voxforge-hrecord,'vf6-07') exten => 50,3,Macro(voxforge-hrecord,'vf6-08') exten => 50,4,Macro(voxforge-hrecord,'vf6-09') exten => 50,5,Macro(voxforge-hrecord,'vf6-10') [custom-voxforge-vf6-3] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf6-11') exten => 50,2,Macro(voxforge-hrecord,'vf6-12') exten => 50,3,Macro(voxforge-hrecord,'vf6-13') exten => 50,4,Macro(voxforge-hrecord,'vf6-14') exten => 50,5,Macro(voxforge-hrecord,'vf6-15') [custom-voxforge-vf6-4] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf6-16') exten => 50,2,Macro(voxforge-hrecord,'vf6-17') exten => 50,3,Macro(voxforge-hrecord,'vf6-18') exten => 50,4,Macro(voxforge-hrecord,'vf6-19') exten => 50,5,Macro(voxforge-hrecord,'vf6-20') [custom-voxforge-vf6-5] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf6-21') exten => 50,2,Macro(voxforge-hrecord,'vf6-22') exten => 50,3,Macro(voxforge-hrecord,'vf6-23') exten => 50,4,Macro(voxforge-hrecord,'vf6-24') exten => 50,5,Macro(voxforge-hrecord,'vf6-25') [custom-voxforge-vf6-6] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf6-26') exten => 50,2,Macro(voxforge-hrecord,'vf6-27') exten => 50,3,Macro(voxforge-hrecord,'vf6-28') exten => 50,4,Macro(voxforge-hrecord,'vf6-29') exten => 50,5,Macro(voxforge-hrecord,'vf6-30') [custom-voxforge-vf6-7] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf6-31') exten => 50,2,Macro(voxforge-hrecord,'vf6-32') exten => 50,3,Macro(voxforge-hrecord,'vf6-33') exten => 50,4,Macro(voxforge-hrecord,'vf6-34') exten => 50,5,Macro(voxforge-hrecord,'vf6-35') [custom-voxforge-vf6-8] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf6-36') exten => 50,2,Macro(voxforge-hrecord,'vf6-37') exten => 50,3,Macro(voxforge-hrecord,'vf6-38') exten => 50,4,Macro(voxforge-hrecord,'vf6-39') exten => 50,5,Macro(voxforge-hrecord,'vf6-40') [custom-voxforge-vf7-1] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf7-01') exten => 50,2,Macro(voxforge-hrecord,'vf7-02') exten => 50,3,Macro(voxforge-hrecord,'vf7-03') exten => 50,4,Macro(voxforge-hrecord,'vf7-04') exten => 50,5,Macro(voxforge-hrecord,'vf7-05') [custom-voxforge-vf7-2] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf7-06') exten => 50,2,Macro(voxforge-hrecord,'vf7-07') exten => 50,3,Macro(voxforge-hrecord,'vf7-08') exten => 50,4,Macro(voxforge-hrecord,'vf7-09') exten => 50,5,Macro(voxforge-hrecord,'vf7-10') [custom-voxforge-vf7-3] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf7-11') exten => 50,2,Macro(voxforge-hrecord,'vf7-12') exten => 50,3,Macro(voxforge-hrecord,'vf7-13') exten => 50,4,Macro(voxforge-hrecord,'vf7-14') exten => 50,5,Macro(voxforge-hrecord,'vf7-15') [custom-voxforge-vf7-4] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf7-16') exten => 50,2,Macro(voxforge-hrecord,'vf7-17') exten => 50,3,Macro(voxforge-hrecord,'vf7-18') exten => 50,4,Macro(voxforge-hrecord,'vf7-19') exten => 50,5,Macro(voxforge-hrecord,'vf7-20') [custom-voxforge-vf7-5] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf7-21') exten => 50,2,Macro(voxforge-hrecord,'vf7-22') exten => 50,3,Macro(voxforge-hrecord,'vf7-23') exten => 50,4,Macro(voxforge-hrecord,'vf7-24') exten => 50,5,Macro(voxforge-hrecord,'vf7-25') [custom-voxforge-vf7-6] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf7-26') exten => 50,2,Macro(voxforge-hrecord,'vf7-27') exten => 50,3,Macro(voxforge-hrecord,'vf7-28') exten => 50,4,Macro(voxforge-hrecord,'vf7-29') exten => 50,5,Macro(voxforge-hrecord,'vf7-30') [custom-voxforge-vf7-7] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf7-31') exten => 50,2,Macro(voxforge-hrecord,'vf7-32') exten => 50,3,Macro(voxforge-hrecord,'vf7-33') exten => 50,4,Macro(voxforge-hrecord,'vf7-34') exten => 50,5,Macro(voxforge-hrecord,'vf7-35') [custom-voxforge-vf7-8] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf7-36') exten => 50,2,Macro(voxforge-hrecord,'vf7-37') exten => 50,3,Macro(voxforge-hrecord,'vf7-38') exten => 50,4,Macro(voxforge-hrecord,'vf7-39') exten => 50,5,Macro(voxforge-hrecord,'vf7-40') [custom-voxforge-vf8-1] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf8-01') exten => 50,2,Macro(voxforge-hrecord,'vf8-02') exten => 50,3,Macro(voxforge-hrecord,'vf8-03') exten => 50,4,Macro(voxforge-hrecord,'vf8-04') exten => 50,5,Macro(voxforge-hrecord,'vf8-05') [custom-voxforge-vf8-2] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf8-06') exten => 50,2,Macro(voxforge-hrecord,'vf8-07') exten => 50,3,Macro(voxforge-hrecord,'vf8-08') exten => 50,4,Macro(voxforge-hrecord,'vf8-09') exten => 50,5,Macro(voxforge-hrecord,'vf8-10') [custom-voxforge-vf8-3] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf8-11') exten => 50,2,Macro(voxforge-hrecord,'vf8-12') exten => 50,3,Macro(voxforge-hrecord,'vf8-13') exten => 50,4,Macro(voxforge-hrecord,'vf8-14') exten => 50,5,Macro(voxforge-hrecord,'vf8-15') [custom-voxforge-vf8-4] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf8-16') exten => 50,2,Macro(voxforge-hrecord,'vf8-17') exten => 50,3,Macro(voxforge-hrecord,'vf8-18') exten => 50,4,Macro(voxforge-hrecord,'vf8-19') exten => 50,5,Macro(voxforge-hrecord,'vf8-20') [custom-voxforge-vf8-5] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf8-21') exten => 50,2,Macro(voxforge-hrecord,'vf8-22') exten => 50,3,Macro(voxforge-hrecord,'vf8-23') exten => 50,4,Macro(voxforge-hrecord,'vf8-24') exten => 50,5,Macro(voxforge-hrecord,'vf8-25') [custom-voxforge-vf8-6] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf8-26') exten => 50,2,Macro(voxforge-hrecord,'vf8-27') exten => 50,3,Macro(voxforge-hrecord,'vf8-28') exten => 50,4,Macro(voxforge-hrecord,'vf8-29') exten => 50,5,Macro(voxforge-hrecord,'vf8-30') [custom-voxforge-vf8-7] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf8-31') exten => 50,2,Macro(voxforge-hrecord,'vf8-32') exten => 50,3,Macro(voxforge-hrecord,'vf8-33') exten => 50,4,Macro(voxforge-hrecord,'vf8-34') exten => 50,5,Macro(voxforge-hrecord,'vf8-35') [custom-voxforge-vf8-8] include => custom-voxforge-phoneme-explain exten => 50,1,Macro(voxforge-hrecord,'vf8-36') exten => 50,2,Macro(voxforge-hrecord,'vf8-37') exten => 50,3,Macro(voxforge-hrecord,'vf8-38') exten => 50,4,Macro(voxforge-hrecord,'vf8-39') exten => 50,5,Macro(voxforge-hrecord,'vf8-40') [custom-voxforge-phoneme-explain] ; note: I misspelled 'read' as 'reed' on purpose because flite was mispronouncing it. exten => s,1,Setvar(last-prompt-priority=nan) exten => s,2,GotoIf($[${num-complete} > 0]?1,1) exten => s,3,Gosub(sub-voxforge-init|s|1) exten => s,4,Gosub(sub-voxforge-instructions|s|1) ;exten => s,5,Flite('Now, press 1 if you are ready to hear a phrase. Or press 2 to hear these instructions again.'|12) exten => s,5,Background(${menu-dir}/1-hear-phrase-2-instructions-again) exten => s,6,WaitExten(10) exten => 1,1,GotoIf($["${last-prompt-priority}" = "nan"]?20) exten => 1,2,System(rm ${RECORDED_FILE}.wav) exten => 1,3,Goto(50|${last-prompt-priority}) exten => 1,20,Set(ran-instructions=1) exten => 1,21,Goto(50|1) exten => 2,1,GotoIf($["${last-prompt-priority}" = "nan"]?20) exten => 2,2,Gosub(sub-voxforge-get-next|s|1) exten => 2,20,Goto(s|1) exten => 3,1,GotoIf($["${last-prompt-priority}" = "nan"]?20) exten => 3,2,Gosub(sub-voxforge-hrecord-compare|s|1) exten => 3,20,Goto(2|1) ;exten => 4,1,Flite('OK, skipping this prompt and try ing the next one...') exten => 4,1,Background(${menu-dir}/skip) exten => 4,2,System(rm ${RECORDED_FILE}.wav) exten => 4,3,Gosub(sub-voxforge-do-next|s|1) ;exten => 10,1,Flite('Do they sound the same? Is your reecording free of laugh ing.... Cough ing.... Stutter ing.... Mispronunciations.... And background noise? Press 1 to try again. Press 2 to continue. Press 3 to hear your reecording again. Press 4 if the prompt is unclear and you would like to try a different reecording.'|1234) exten => 10,1,Background(${menu-dir}/post-record) exten => 10,2,WaitExten(10) ;exten => i,1,Flite('Sorry. that is not a valid choice.'|1234567890) exten => i,1,Background(${menu-dir}/not-a-valid-choice) exten => i,2,GotoIf($["${last-prompt-priority}" = "nan"]?20) exten => i,3,Goto(10|1) exten => i,20,Goto(s|1) exten => h,1,Gosub(sub-voxforge-unexpected-hangup-cleanup|s|1) [macro-voxforge-hrecord] exten => s,1,Setvar(last-prompt-context=${MACRO_CONTEXT}) exten => s,2,Setvar(last-prompt-priority=${MACRO_PRIORITY}) exten => s,3,Setvar(last-prompt-name=${ARG1}) ;exten => s,4,Flite('Here is sentence number $[${num-complete-this-round} + 1] out of 5:") exten => s,4,Playback(${menu-dir}/sentence-number) exten => s,5,SayNumber($[${num-complete-this-round} + 1],m) exten => s,6,Playback(${menu-dir}/out-of) exten => s,7,SayNumber(5,m) exten => s,8,Playback(${prompts-dir}/audio/${last-prompt-name}) exten => s,9,Record(/tmp/voxforge-%d:wav|0|20|) ;exten => s,7,Flite('OK, I will play the original phrase. Then the phrase you just recorded:'|1) exten => s,10,Playback(${menu-dir}/compare) exten => s,11,Gosub(sub-voxforge-hrecord-compare|s|1) exten => h,1,Gosub(sub-voxforge-unexpected-hangup-cleanup|s|1) [sub-voxforge-hrecord-compare] exten => s,1,Playback(${prompts-dir}/audio/${last-prompt-name}) exten => s,2,Playback(${RECORDED_FILE}) exten => s,3,Goto(${last-prompt-context},10,1) exten => h,1,Gosub(sub-voxforge-unexpected-hangup-cleanup|s|1) [sub-voxforge-channel-limit] exten => s,1,GotoIf(${DB_EXISTS(voxforge/channel-limit)}?3) exten => s,2,Return() exten => s,3,GotoIf(${DB_EXISTS(voxforge/num-active-channels)}?5) exten => s,4,Set(DB(voxforge/num-active-channels)=0) exten => s,5,GotoIf($[${DB(voxforge/num-active-channels)} + 1 > ${DB(voxforge/channel-limit)}]?8) exten => s,6,Set(DB(voxforge/num-active-channels)=$[${DB(voxforge/num-active-channels)} + 1]) exten => s,7,Return() ;exten => s,8,Flite("All lines are currently busy... Please try again later...") exten => s,8,Playback(${menu-dir}/all-lines-currently-busy) exten => s,9,Playback(vm-goodbye) exten => s,10,Hangup() [sub-voxforge-decrement-num-active-channels] exten => s,1,GotoIf($[${DB(voxforge/num-active-channels)} - 1 < 0]?4) exten => s,2,Set(DB(voxforge/num-active-channels)=$[${DB(voxforge/num-active-channels)} - 1]) exten => s,3,Return() exten => s,4,Noop(----- Had to zero voxforge/num-active-channels! Must be a bug! -----) exten => s,5,Set(DB(voxforge/num-active-channels)=0) exten => s,6,Return() [sub-voxforge-get-script-num] exten => s,1,GotoIf(${DB_EXISTS(voxforge/script-num)}?4) exten => s,2,Set(script-num=9) exten => s,3,Return() exten => s,4,Set(script-num=${DB(voxforge/script-num)}) exten => s,5,Return() [sub-voxforge-increment-script-num] exten => s,1,GotoIf($[${script-num} + 1 > ${max-script-num}]?4) exten => s,2,Set(DB(voxforge/script-num)=$[${script-num} + 1]) exten => s,3,Return() exten => s,4,Set(DB(voxforge/script-num)=1) exten => s,5,Return() [sub-voxforge-phoneme-finished] exten => s,1,Set(num-complete-this-round=0) ;exten => s,2,Flite('Congratulations! You have completed ${num-complete} phrases.') exten => s,2,Playback(${menu-dir}/congratulations-have-completed) exten => s,3,SayNumber(${num-complete},m) exten => s,4,Playback(${menu-dir}/phrases) ;exten => s,3,Flite('We appreciate your contribution. Please. Take a moment to complete 5 more.') ;exten => s,4,Flite('Press 1 to complete 5 more. Or Press 9 to hang up.'|12) exten => s,5,Background(${menu-dir}/continue-hangup) exten => s,6,WaitExten(10) exten => 1,1,Gosub(sub-voxforge-do-next|s|1) ;exten => 9,1,Flite('Thank You for your contribution. Please call again soon.') exten => 9,1,Playback(${menu-dir}/thank-you-call-again) exten => 9,2,Playback(vm-goodbye) exten => 9,3,Hangup() exten => 9,4,Gosub(sub-voxforge-autosubmit|s|1) ;exten => i,1,Flite('Sorry. that is not a valid choice.'|1234567890) exten => i,1,Background(${menu-dir}/not-a-valid-choice) exten => i,2,Goto(s|1) exten => h,1,Gosub(sub-voxforge-autosubmit|s|1) [sub-voxforge-get-next] exten => s,1,System(mv ${RECORDED_FILE}.wav ${session-dir}/${last-prompt-name}.wav) exten => s,2,System(grep -R --no-filename ${last-prompt-name} ${prompts-dir}/vf* >> ${session-dir}/prompts) exten => s,3,Set(num-complete=$[${num-complete} + 1]) exten => s,4,Set(num-complete-this-round=$[${num-complete-this-round} + 1]) exten => s,5,GotoIf($[${num-complete-this-round} < 5]?20) exten => s,6,Gosub(sub-voxforge-phoneme-finished|s|1) exten => s,20,Gosub(sub-voxforge-do-next|s|1) [sub-voxforge-do-next] exten => s,1,GotoIf($[${last-prompt-priority} < 5]?2:3) exten => s,2,Goto(${last-prompt-context}|50|$[${last-prompt-priority} + 1]) exten => s,3,Goto(custom-voxforge-selectscript|s|1) [sub-voxforge-init] exten => s, 1,GotoIf($[${ran-init} = 1]?2:3) exten => s, 2,Return() exten => s, 3,Set(session-ident=${STRFTIME(${EPOCH},GMT,%Y%m%d-%H%M%S)}-${UNIQUEID}) exten => s, 4,Set(session-dir=/voxforge-audio/work/${session-ident}) exten => s, 5,System(mkdir ${session-dir}) exten => s, 6,Set(year=${STRFTIME(${EPOCH},GMT,%Y)}) exten => s, 7,System(echo \'Copyright \(C\) ${year} Free Software Foundation\' > ${session-dir}/LICENSE) exten => s, 8,System(cat /voxforge-code/LICENSE.append >> ${session-dir}/LICENSE) exten => s, 9,System(cat /voxforge-code/README.prepend > ${session-dir}/README) exten => s,10,System(echo \'Gender: ${gender}\;\' >> ${session-dir}/README) exten => s,11,System(echo \'Age range: ${agerange}\;\' >> ${session-dir}/README) exten => s,12,System(cat /voxforge-code/README.append >> ${session-dir}/README) exten => s,13,Set(ran-init=1) exten => s,14,Return() [sub-voxforge-instructions] exten => s, 1,GotoIf($[${ran-instructions} = 1]?2:3) exten => s, 2,Return() ;exten => s, 3,Flite('OK, this is how it works: I will reed a phrase to you. Then you will hear a beep.') ;exten => s, 4,Flite('After the beep, please wait for 1 second.') ;exten => s, 5,Flite('Then you say out loud the phrase you just herd.') ;exten => s, 6,Flite('Wait another second and then press the pound key.') ;exten => s, 7,Flite('Some phrases sound silly. Or strange.') ;exten => s, 8,Flite('Please avoid Laugh ing... Cough ing... Stutter ing.... Mispronunciations.... And background noise.') ;exten => s, 9,Flite('If any of these things happen. Please go back and reecord the phrase again.') exten => s, 3,Playback(${menu-dir}/instructions) exten => s, 4,Return() exten => h,1,Gosub(sub-voxforge-decrement-num-active-channels|s|1) [sub-voxforge-unexpected-hangup-cleanup] exten => s,1,System(rm ${RECORDED_FILE}.wav) exten => s,2,GotoIf($[${num-complete} < 5]?5) exten => s,3,Gosub(sub-voxforge-autosubmit|s|1) exten => s,4,Return() exten => s,5,Noop(----- Only completed ${num-complete} so will not submit -----) exten => s,6,System(mv ${session-dir} /voxforge-audio/partial/) exten => s,7,Gosub(sub-voxforge-decrement-num-active-channels|s|1) [sub-voxforge-autosubmit] exten => s,1,System(echo \'${num-complete}\' > ${session-dir}/num-complete) exten => s,2,System(mv ${session-dir} /voxforge-audio/complete/) exten => s,3,System(echo \'-------------------- START ${session-ident} --------------------\' >> /voxforge-audio/submit.log) exten => s,4,System(/voxforge-code/submit_audio.sh /voxforge-audio/complete/${session-ident}) exten => s,5,System(echo \'-------------------- STOP ${session-ident} --------------------\' >> /voxforge-audio/submit.log) exten => s,6,Noop(----- Auto Submit of ${num-complete} phrases - Status:${SYSTEMSTATUS} APPERROR:${APPERROR} FAILURE:${FAILURE} SUCCESS:${SUCCESS} -----) exten => s,7,Gosub(sub-voxforge-decrement-num-active-channels|s|1) ; vim: set ts=8 sw=2 filetype=asterisk: