Date: Sat, 3 Apr 2010 21:26:16 -0500 (CDT) From: Eric F Crist <ecrist@secure-computing.net> To: FreeBSD-gnats-submit@FreeBSD.org Cc: Richard Neese <r.neese@gmail.com> Subject: ports/145370: Additional port for Freeswitch port changes. Message-ID: <201004040226.o342QGg8072954@cartman.secure-computing.net> Resent-Message-ID: <201004040230.o342U7FD067871@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 145370 >Category: ports >Synopsis: Additional port for Freeswitch port changes. >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Sun Apr 04 02:30:07 UTC 2010 >Closed-Date: >Last-Modified: >Originator: Eric F Crist >Release: FreeBSD 8.0-RELEASE amd64 >Organization: Secure Computing Networks FusionPBX >Environment: System: FreeBSD cartman.secure-computing.net 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Sat Nov 21 15:02:08 UTC 2009 root@mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64 >Description: Additional port for new freeswitch structure. >How-To-Repeat: >Fix: Apply shar to ports tree. --- fspizza.shar begins here --- # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # freeswitch-pizzademo/ # freeswitch-pizzademo/files # freeswitch-pizzademo/files/javascript # freeswitch-pizzademo/files/javascript/js_modules # freeswitch-pizzademo/files/javascript/js_modules/SpeechTools.jm # freeswitch-pizzademo/files/javascript/ps_pizza.js # freeswitch-pizzademo/distinfo # freeswitch-pizzademo/pkg-descr # freeswitch-pizzademo/pkg-plist # freeswitch-pizzademo/Makefile # echo c - freeswitch-pizzademo/ mkdir -p freeswitch-pizzademo/ > /dev/null 2>&1 echo c - freeswitch-pizzademo/files mkdir -p freeswitch-pizzademo/files > /dev/null 2>&1 echo c - freeswitch-pizzademo/files/javascript mkdir -p freeswitch-pizzademo/files/javascript > /dev/null 2>&1 echo c - freeswitch-pizzademo/files/javascript/js_modules mkdir -p freeswitch-pizzademo/files/javascript/js_modules > /dev/null 2>&1 echo x - freeswitch-pizzademo/files/javascript/js_modules/SpeechTools.jm sed 's/^X//' >freeswitch-pizzademo/files/javascript/js_modules/SpeechTools.jm << 'bb67ff2bd323c8319e07da00f1a837ed' X/* X * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application X * Copyright (C) 2005/2006, Anthony Minessale II <anthmct@yahoo.com> X * X * Version: MPL 1.1 X * X * The contents of this file are subject to the Mozilla Public License Version X * 1.1 (the "License"); you may not use this file except in compliance with X * the License. You may obtain a copy of the License at X * http://www.mozilla.org/MPL/ X * X * Software distributed under the License is distributed on an "AS IS" basis, X * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License X * for the specific language governing rights and limitations under the X * License. X * X * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application X * X * The Initial Developer of the Original Code is X * Anthony Minessale II <anthmct@yahoo.com> X * Portions created by the Initial Developer are Copyright (C) X * the Initial Developer. All Rights Reserved. X * X * Contributor(s): X * X * Anthony Minessale II <anthmct@yahoo.com> X * X * X * SpeechTools.jm Speech Detection Interface X * X */ X X/* Constructor for Grammar Class (Class to identify a grammar entity) */ Xfunction Grammar(grammar_name, path, obj_path, min_score, confirm_score, halt) { X this.grammar_name = grammar_name; X this.path = path; X this.min_score = min_score; X this.confirm_score = confirm_score; X this.halt = halt; X this.obj_path = obj_path; X X if (!this.min_score) { X this.min_score = 1; X } X X if (!this.confirm_score) { X this.confirm_score = 400; X } X} X X/* Constructor for SpeechDetect Class (Class to Detect Speech) */ Xfunction SpeechDetect(session, mod, ip) { X this.ip = ip; X this.session = session; X this.mod = mod; X this.grammar_name = undefined; X this.grammar_hash = new Array(); X this.grammar_name = false; X this.audio_base = ""; X this.audio_ext = ".wav"; X this.tts_eng = false; X this.tts_voice = false; X this.AutoUnload = false; X this.debug = false; X X /* Set the TTS info */ X this.setTTS = function (tts_eng, tts_voice) { X this.tts_eng = tts_eng; X this.tts_voice = tts_voice; X } X X /* Set the audio base */ X this.setAudioBase = function (audio_base) { X this.audio_base = audio_base; X } X X /* Set the audio extension */ X this.setAudioExt= function (audio_ext) { X this.audio_ext = audio_ext; X } X X /* Add a grammar to be used */ X this.addGrammar = function(grammar_object) { X this.grammar_hash[grammar_object.grammar_name] = grammar_object; X } X X /* Play an audio file */ X this.streamFile = function(str) { X var rv; X if (!str) { X console_log("error", "No file specified!\n"); X return; X } X files = str.split(","); X for( x = 0; x < files.length; x++) { X if (!files[x] || files[x] == "noop") { X continue; X } X this.session.streamFile(this.audio_base + files[x] + this.audio_ext); X } X } X X /* Speak with TTS */ X this.speak = function(str) { X return this.session.speak(this.tts_eng, this.tts_voice, str); X } X X /* Set the current grammar */ X this.setGrammar = function (grammar_name) { X var grammar_object = this.grammar_hash[grammar_name]; X X if (!grammar_object) { X console_log("error", "Missing Grammar!\n"); X return false; X } X X if (this.grammar_name) { X if (this.AutoUnload) { X console_log("debug", "Unloading grammar " + this.grammar_name + "\n"); X this.session.execute("detect_speech", "nogrammar " + this.grammar_name); X } X if (grammar_object.path) { X this.session.execute("detect_speech", "grammar " + grammar_name + " " + grammar_object.path); X } else { X this.session.execute("detect_speech", "grammar " + grammar_name); X } X } else { X this.session.execute("detect_speech", this.mod + " " + grammar_name + " " + grammar_object.path + " " + this.ip); X } X X this.grammar_name = grammar_name; X } X X /* Pause speech detection */ X this.pause = function() { X this.session.execute("detect_speech", "pause"); X } X X /* Resume speech detection */ X this.resume = function() { X this.session.execute("detect_speech", "resume"); X } X X /* Stop speech detection */ X this.stop = function() { X this.session.execute("detect_speech", "stop"); X } X X /* Callback function for streaming,TTS or bridged calls */ X this.onInput = function(s, type, inputEvent, _this) { X try { X if (type == "event") { X var speech_type = inputEvent.getHeader("Speech-Type"); X var rv = new Array(); X X if (!_this.grammar_name) { X console_log("error", "No Grammar name!\n"); X _this.session.hangup(); X return false; X } X X var grammar_object = _this.grammar_hash[_this.grammar_name]; X X if (!grammar_object) { X console_log("error", "Can't find grammar for " + _this.grammar_name + "\n"); X _this.session.hangup(); X return false; X } X X if (speech_type == "begin-speaking") { X if (grammar_object.halt) { X return false; X } X } else { X var body = inputEvent.getBody(); X var result; X var xml; X X body = body.replace(/<\?.*?\?>/g, ''); X xml = new XML("<xml>" + body + "</xml>"); X result = xml.result; X X _this.lastDetect = body; X X if (_this.debug) { X console_log("debug", "----XML:\n" + body + "\n"); X console_log("debug", "----Heard [" + result.interpretation.input + "]\n"); X console_log("debug", "----Hit score " + result.interpretation.@confidence + "/" + X grammar_object.min_score + "/" + grammar_object.confirm_score + "\n"); X } X X if (result.interpretation.@confidence >= grammar_object.min_score) { X if (result.interpretation.@confidence < grammar_object.confirm_score) { X rv.push("_confirm_"); X } X X eval("xo = " + grammar_object.obj_path + ";"); X for (x = 0; x < xo.length(); x++) { X rv.push(xo[x]); X console_log("info", "----" +xo[x] + "\n"); X } X } else { X rv.push("_no_idea_"); X } X X } X delete interp; X return rv; X } X } X X catch(err) { X console_log("crit", "----ERROR:\n" + err + "\n"); X } X } X} X X/* Constructor for SpeechObtainer Class (Class to collect data from a SpeechDetect Class) */ Xfunction SpeechObtainer(asr, req, wait_time) { X X this.items = new Array(); X this.collected_items = new Array(); X this.index = 0; X this.collected_index = 0; X this.req = req; X this.tts_eng = undefined; X this.tts_voice = false; X this.asr = asr; X this.top_sound = false; X this.add_sound = false; X this.dup_sound = false; X this.bad_sound = false; X this.needConfirm = false; X this.grammar_name = false; X this.audio_base = asr.audio_base; X this.audio_ext = asr.audio_ext; X this.tts_eng = asr.tts_eng; X this.tts_voice = asr.tts_voice; X this.debug = asr.debug; X X if (!req) { X req = 1; X } X X if (!wait_time) { X wait_time = 5000; X } X X this.waitTime = wait_time + 0; X X /* Set the TTS info */ X this.setTTS = function (tts_eng, tts_voice) { X this.tts_eng = tts_eng; X this.tts_voice = tts_voice; X } X X /* Set the audio base */ X this.setAudioBase = function (audio_base) { X this.audio_base = audio_base; X } X X /* Set the audio extension */ X this.setAudioExt= function (audio_ext) { X this.audio_ext = audio_ext; X } X X /* Set the grammar to use */ X this.setGrammar = function (grammar_name, path, obj_path, min_score, confirm_score, halt) { X var grammar_object = new Grammar(grammar_name, path, obj_path, min_score, confirm_score, halt); X this.asr.addGrammar(grammar_object); X this.grammar_name = grammar_name; X } X X /* Set the top audio file or tts for the collection */ X this.setTopSound = function (top_sound) { X this.top_sound = top_sound; X } X X /* Set the audio file or tts for misunderstood input */ X this.setBadSound = function (bad_sound) { X this.bad_sound = bad_sound; X } X X /* Set the audio file or tts for duplicate input */ X this.setDupSound = function (dup_sound) { X this.dup_sound = dup_sound; X } X X /* Set the audio file or tts for accepted input */ X this.setAddSound = function (add_sound) { X this.add_sound = add_sound; X } X X /* Add acceptable items (comma sep list) */ X this.addItem = function(item) { X ia = item.split(","); X var x; X for (x = 0; x < ia.length; x++) { X this.items[this.index++] = ia[x]; X } X } X X this.addItemAlias = function(item,alias) { X ia = item.split(","); X var x; X for (x = 0; x < ia.length; x++) { X this.items[this.index++] = ia[x] + ":::" + alias; X } X } X X /* Add a regex */ X this.addRegEx = function(item) { X this.items[this.index++] = item; X } X X /* Reset the object and delete all collect items */ X this.reset = function() { X this.collected_index = 0; X delete this.collected_items; X this.collected_items = new Array(); X } X X /* Stream a file, collecting input */ X this.streamFile = function(str) { X var rv; X if (!str) { X console_log("error", "No file specified!\n"); X return; X } X files = str.split(","); X for( x = 0; x < files.length; x++) { X if (!files[x] || files[x] == "noop") { X continue; X } X rv = this.asr.session.streamFile(this.audio_base + files[x] + this.audio_ext , this.asr.onInput, this.asr); X if (rv) { X break; X } X } X X return rv; X } X X /* Speak some text, collecting input */ X this.speak = function(str) { X return this.asr.session.speak(this.tts_eng, this.tts_voice, str, this.asr.onInput, this.asr); X } X X /* Process collected input */ X this.react = function(say_str, play_str) { X var rv; X X X if (!rv) { X rv = this.asr.session.collectInput(this.asr.onInput, this.asr, 500); X } X if (!rv) { X this.asr.resume(); X if (this.tts_eng && this.tts_voice) { X rv = this.speak(say_str); X } else { X rv = this.streamFile(play_str); X } X } X X if (!rv) { X rv = this.asr.session.collectInput(this.asr.onInput, this.asr, 500); X } X X if (rv && !rv[0]) { X rv = false; X } X X return rv; X } X X /* Collect input */ X this.run = function() { X var rv; X var hit; X var dup; X X if (this.collected_index) { X this.reset(); X } X X if (!this.grammar_name) { X console_log("error", "No Grammar name!\n"); X this.session.hangup(); X return false; X } X X this.asr.setGrammar(this.grammar_name); X X while(this.asr.session.ready() && this.collected_index < this.req) { X var x; X this.needConfirm = false; X if (!rv) { X rv = this.react(this.top_sound, this.top_sound); X } X if (!rv) { X this.asr.resume(); X rv = this.asr.session.collectInput(this.asr.onInput, this.asr, this.waitTime); X } X hit = false; X if (rv) { X var items = rv; X rv = undefined; X for (y = 0; y < items.length; y++) { X if (items[y] == "_no_idea_") { X if (this.debug) { X console_log("debug", "----We don't understand this\n"); X } X break; X } X if (items[y] == "_confirm_") { X this.needConfirm = true; X if (this.debug) { X console_log("debug", "----We need to confirm this one\n"); X } X continue; X } X X for(x = 0 ; x < this.index; x++) { X if (this.debug) { X console_log("debug", "----Testing [" + y + "] [" + x + "] " + items[y] + " =~ [" + this.items[x] + "]\n"); X } X str = this.items[x]; X X ab = str.split(":::"); X X var re = new RegExp(ab[0], "i"); X match = re.exec(items[y]); X X if (match) { X X for (i = 0; i < match.length; i++) { X if (ab.length == 1) { X rep = match[i]; X } else { X rep = ab[1]; X } X X dup = false; X for(z = 0; z < this.collected_items.length; z++) { X if (this.collected_items[z] == rep) { X dup = true; X break; X } X } X if (dup) { X if (this.dup_sound) { X rv = this.react(this.dup_sound + " " + rep, this.dup_sound + "," + rep); X } X } else { X if (this.debug) { X console_log("debug", "----Adding " + rep + "\n"); X } X this.collected_items[this.collected_index++] = rep; X hit = true; X if (this.add_sound) { X rv = this.react(this.add_sound + " " + rep, this.add_sound + "," + rep); X } X } X } X } X } X } X } X X if (!rv) { X rv = this.asr.session.collectInput(this.asr.onInput, this.asr, 1000); X } X X if (!rv && !hit && !dup) { X rv = this.react(this.bad_sound, this.bad_sound); X } X } X X return this.collected_items; X X } X} bb67ff2bd323c8319e07da00f1a837ed echo x - freeswitch-pizzademo/files/javascript/ps_pizza.js sed 's/^X//' >freeswitch-pizzademo/files/javascript/ps_pizza.js << '4bb18679aa511755730e631282a8bb61' X/* X * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application X * Copyright (C) 2005/2006, Anthony Minessale II <anthmct@yahoo.com> X * X * Version: MPL 1.1 X * X * The contents of this file are subject to the Mozilla Public License Version X * 1.1 (the "License"); you may not use this file except in compliance with X * the License. You may obtain a copy of the License at X * http://www.mozilla.org/MPL/ X * X * Software distributed under the License is distributed on an "AS IS" basis, X * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License X * for the specific language governing rights and limitations under the X * License. X * X * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application X * X * The Initial Developer of the Original Code is X * Anthony Minessale II <anthmct@yahoo.com> X * Portions created by the Initial Developer are Copyright (C) X * the Initial Developer. All Rights Reserved. X * X * Contributor(s): X * X * Anthony Minessale II <anthmct@yahoo.com> X * X * X * pizza.js ASR Demonstration Application X * X */ Xinclude("javascript/js_modules/SpeechTools.jm"); X Xfunction on_dtmf(a, b, c) {} X Xvar dft_min = 40; Xvar dft_confirm = 70; X X/***************** Initialize The Speech Detector *****************/ Xvar asr = new SpeechDetect(session, "pocketsphinx"); X X/***************** Be more verbose *****************/ Xasr.debug = 1; X X/***************** Set audio params *****************/ Xasr.setAudioBase("/usr/local/share/freeswitch/sounds/pizza/"); Xasr.setAudioExt(".wav"); X X/***************** Unload the last grammar whenever we activate a new one *****************/ Xasr.AutoUnload = true; X X/***************** Create And Configure The Pizza *****************/ Xvar pizza = new Object(); X X/***************** Delivery Or Take-Out? *****************/ Xpizza.orderObtainer = new SpeechObtainer(asr, 1, 5000); Xpizza.orderObtainer.setGrammar("pizza_order", "", "result.interpretation.input", dft_min, dft_confirm, true); Xpizza.orderObtainer.setTopSound("GP-DeliveryorTakeout"); Xpizza.orderObtainer.setBadSound("GP-NoDeliveryorTake-out"); Xpizza.orderObtainer.addItemAlias("Delivery", "Delivery"); Xpizza.orderObtainer.addItemAlias("Takeout,Pickup", "Pickup"); X X/***************** What Size? *****************/ Xpizza.sizeObtainer = new SpeechObtainer(asr, 1, 5000); Xpizza.sizeObtainer.setGrammar("pizza_size", "", "result.interpretation.input", dft_min, dft_confirm, true); Xpizza.sizeObtainer.setTopSound("GP-Size"); Xpizza.sizeObtainer.setBadSound("GP-NI"); Xpizza.sizeObtainer.addItemAlias("^Extra\\s*Large", "ExtraLarge"); Xpizza.sizeObtainer.addItemAlias("^Large$", "Large"); Xpizza.sizeObtainer.addItemAlias("^Medium$", "Medium"); Xpizza.sizeObtainer.addItemAlias("^Small$", "Small"); Xpizza.sizeObtainer.addItemAlias("^Humongous$,^Huge$,^Totally\\s*Humongous$,^Totally", "TotallyHumongous"); X X/***************** What Type Of Crust? *****************/ Xpizza.crustObtainer = new SpeechObtainer(asr, 1, 5000); Xpizza.crustObtainer.setGrammar("pizza_crust", "", "result.interpretation.input", dft_min, dft_confirm, true); Xpizza.crustObtainer.setTopSound("GP-Crust"); Xpizza.crustObtainer.setBadSound("GP-NI"); Xpizza.crustObtainer.addItemAlias("^Hand\\s*Tossed$,^Tossed$", "HandTossed"); Xpizza.crustObtainer.addItemAlias("^Chicago\\s*style$,^Chicago$", "Pan"); Xpizza.crustObtainer.addItemAlias("^Deep,^Pan,^Baked", "Pan"); Xpizza.crustObtainer.addItemAlias("^New\\s*York,^Thin", "Thin"); X X/***************** Specialty Or Custom? *****************/ Xpizza.typeObtainer = new SpeechObtainer(asr, 1, 5000); Xpizza.typeObtainer.setGrammar("pizza_type", "", "result.interpretation.input", dft_min, dft_confirm, true); Xpizza.typeObtainer.setTopSound("GP-SpecialtyorCustom"); Xpizza.typeObtainer.setBadSound("GP-NI"); Xpizza.typeObtainer.addItemAlias("^Specialty$,^Specialty\\s*pizza$", "Specialty"); Xpizza.typeObtainer.addItemAlias("^pick", "Custom"); X X X/***************** Which Specialty? *****************/ Xpizza.specialtyObtainer = new SpeechObtainer(asr, 1, 5000); Xpizza.specialtyObtainer.setGrammar("pizza_specialty", "", "result.interpretation.input", dft_min, dft_confirm, true); Xpizza.specialtyObtainer.setTopSound("GP-SpecialtyList"); Xpizza.specialtyObtainer.setBadSound("GP-NI"); Xpizza.specialtyObtainer.addItemAlias("^Hawaii,^Hawaiian", "Hawaiian"); Xpizza.specialtyObtainer.addItemAlias("^Meat", "MeatLovers"); Xpizza.specialtyObtainer.addItemAlias("Pickle,^World", "Pickle"); Xpizza.specialtyObtainer.addItemAlias("^Salvador,^Dolly,^Dali", "Dali"); Xpizza.specialtyObtainer.addItemAlias("^Veg", "Vegetarian"); X X X/***************** What Toppings? *****************/ Xpizza.toppingsObtainer = new SpeechObtainer(asr, 1, 5000); Xpizza.toppingsObtainer.setGrammar("pizza_toppings", "", "result.interpretation.input", dft_min, dft_confirm, true); Xpizza.toppingsObtainer.setTopSound("GP-Toppings"); Xpizza.toppingsObtainer.setBadSound("GP-NI"); Xpizza.toppingsObtainer.addItemAlias("anchovie,anchovies", "anchovies"); Xpizza.toppingsObtainer.addItemAlias("artichoke,artichockes", "artichoke"); Xpizza.toppingsObtainer.addItemAlias("canadian\\s*bacon", "canadianbacon"); Xpizza.toppingsObtainer.addItemAlias("everything", "everything"); Xpizza.toppingsObtainer.addItemAlias("extra\\s*cheese", "extracheese"); Xpizza.toppingsObtainer.addItemAlias("garlic", "garlic"); Xpizza.toppingsObtainer.addItemAlias("goat\\s*cheese", "goatcheese"); Xpizza.toppingsObtainer.addItemAlias("bell\\s*pepper,bell\\s*peppers", "bellpepper"); Xpizza.toppingsObtainer.addItemAlias("mango", "mango"); Xpizza.toppingsObtainer.addItemAlias("mushroom,mushrooms", "mushroom"); Xpizza.toppingsObtainer.addItemAlias("olives", "olives"); Xpizza.toppingsObtainer.addItemAlias("onion,onions", "onions"); Xpizza.toppingsObtainer.addItemAlias("pepperoni", "pepperoni"); Xpizza.toppingsObtainer.addItemAlias("pickle,pickles", "pickle"); Xpizza.toppingsObtainer.addItemAlias("pineapple", "pineapple"); Xpizza.toppingsObtainer.addItemAlias("salami", "salami"); Xpizza.toppingsObtainer.addItemAlias("sausage", "sausage"); Xpizza.toppingsObtainer.addItemAlias("shrimp", "shrimp"); Xpizza.toppingsObtainer.addItemAlias("spinich", "spinich"); Xpizza.toppingsObtainer.addItemAlias("ham", "ham"); X X/***************** Change Delivery Or Size Or Crust, Add/Rem Toppings Or Start Over *****************/ Xpizza.arsoObtainer = new SpeechObtainer(asr, 1, 5000); Xpizza.arsoObtainer.setGrammar("pizza_arso", "", "result.interpretation.input", dft_min, 50, true); Xpizza.arsoObtainer.setTopSound("GP-ARSO"); Xpizza.arsoObtainer.setBadSound("GP-NI"); Xpizza.arsoObtainer.addItemAlias("^delivery$", "delivery"); Xpizza.arsoObtainer.addItemAlias("^size$", "size"); Xpizza.arsoObtainer.addItemAlias("^crust$", "crust"); Xpizza.arsoObtainer.addItemAlias("^start\\s*over$", "startover"); Xpizza.arsoObtainer.addItemAlias("^add\\s*", "add_topping"); Xpizza.arsoObtainer.addItemAlias("^remove\\s*", "rem_topping"); X X/***************** Yes? No? Maybe So? *****************/ Xpizza.yesnoObtainer = new SpeechObtainer(asr, 1, 5000); Xpizza.yesnoObtainer.setGrammar("pizza_yesno", "", "result.interpretation.input", dft_min, 20, true); Xpizza.yesnoObtainer.setBadSound("GP-NI"); Xpizza.yesnoObtainer.addItemAlias("^yes,^correct", "yes"); Xpizza.yesnoObtainer.addItemAlias("^no", "no"); X X/***************** Get Some Information *****************/ Xpizza.get = function(params, confirm) { X for(;;) { X if (!session.ready()) { X return false; X } X var main_items = params.run(); X if (confirm && params.needConfirm) { X pizza.yesnoObtainer.setTopSound("Confirm" + main_items[0]); X var items = pizza.yesnoObtainer.run(); X if (items[0] == "yes") { X break; X } X } else { X break; X } X } X X return main_items; X}; X X/***************** Is This Right? *****************/ Xpizza.check = function () { X if (!session.ready()) { X return false; X } X asr.streamFile("GP-You_ordered_a"); X asr.streamFile(pizza.size); X asr.streamFile(pizza.crust); X if (pizza.type == "Specialty") { X asr.streamFile(pizza.specialty); X asr.streamFile("pizza"); X } else { X asr.streamFile("pizza"); X asr.streamFile("GP-With"); X for (key in pizza.toppings) { X if (pizza.toppings[key] == "add") { X asr.streamFile(key); X } X } X X } X X pizza.yesnoObtainer.setTopSound("GP-WasThisRight"); X items = pizza.yesnoObtainer.run(); X return items[0] == "yes" ? true : false; X}; X X/***************** Let's Remove The Toppings *****************/ Xpizza.clearToppings = function() { X if (!session.ready()) { X return false; X } X if (pizza.toppings) { X delete pizza.toppings; X } X pizza.have_toppings = false; X pizza.toppings = new Array(); X} X X/***************** Clean Slate *****************/ Xpizza.init = function() { X if (!session.ready()) { X return false; X } X pizza.add_rem = "add"; X pizza.order = pizza.size = pizza.crust = pizza.type = false; X pizza.toppingsObtainer.setTopSound("GP-Toppings"); X pizza.specialty = false; X pizza.clearToppings(); X pizza.said_greet = false; X} X X/***************** Welcome! *****************/ Xpizza.greet = function () { X if (!session.ready()) { X return false; X } X if (!pizza.said_greet) { X asr.streamFile("GP-Greeting"); X pizza.said_greet = true; X } X}; X X/***************** Collect Order Type *****************/ Xpizza.getOrder = function() { X if (!session.ready()) { X return false; X } X if (!pizza.order) { X var items = pizza.get(pizza.orderObtainer, true); X pizza.order = items[0]; X } X}; X X/***************** Collect Size *****************/ Xpizza.getSize = function() { X if (!session.ready()) { X return false; X } X if (!pizza.size) { X var items = pizza.get(pizza.sizeObtainer, true); X pizza.size = items[0]; X } X}; X X/***************** Collect Crust *****************/ Xpizza.getCrust = function() { X if (!session.ready()) { X return false; X } X if (!pizza.crust) { X var items = pizza.get(pizza.crustObtainer, true); X pizza.crust = items[0]; X } X}; X X/***************** Collect Pizza Type *****************/ Xpizza.getType = function() { X if (!session.ready()) { X return false; X } X if (!pizza.type) { X var items = pizza.get(pizza.typeObtainer, true); X pizza.type = items[0]; X } X}; X X/***************** Collect Toppings *****************/ Xpizza.getToppings = function() { X if (!session.ready()) { X return false; X } X if (pizza.type == "Specialty" && !pizza.specialty) { X var items = pizza.get(pizza.specialtyObtainer, true); X pizza.specialty = items[0]; X pizza.have_toppings = true; X } else if (!pizza.have_toppings) { X toppings = pizza.get(pizza.toppingsObtainer, false); X for(x = 0; x < toppings.length; x++) { X pizza.toppings[toppings[x]] = pizza.add_rem; X } X pizza.have_toppings = true; X } X}; X X/***************** Modify Pizza If You Don't Like It *****************/ Xpizza.fix = function() { X if (!session.ready()) { X return false; X } X asr.streamFile("GP-Wanted-No"); X arso = pizza.get(pizza.arsoObtainer, false); X for (x = 0; x < arso.length; x++) { X if (arso[x] == "delivery") { X pizza.order = false; X } else if (arso[x] == "size") { X pizza.size = false; X } else if (arso[x] == "crust") { X pizza.crust = false; X } else if (arso[x] == "startover") { X pizza.init(); X } else { X if (pizza.type == "Specialty") { X asr.streamFile("GP-ChangeSpec"); X pizza.type = false; X pizza.clearToppings(); X } else { X pizza.have_toppings = false; X if (arso[x] == "add_topping") { X pizza.add_rem = "add"; X pizza.toppingsObtainer.setTopSound("GP-Adding"); X } else { X pizza.add_rem = "rem"; X pizza.toppingsObtainer.setTopSound("GP-Remove"); X } X } X } X } X}; X X/***************** Tie It All Together *****************/ Xpizza.run = function() { X pizza.init(); X X for(;;) { X if (!session.ready()) { X break; X } X pizza.greet(); X pizza.getOrder(); X pizza.getSize(); X pizza.getCrust(); X pizza.getType(); X pizza.getToppings(); X X if (pizza.check()) { X asr.streamFile(pizza.order); X break; X } else { X pizza.fix(); X } X } X}; X X/***************** Begin Program *****************/ Xsession.answer(); Xpizza.run(); Xasr.stop(); 4bb18679aa511755730e631282a8bb61 echo x - freeswitch-pizzademo/distinfo sed 's/^X//' >freeswitch-pizzademo/distinfo << 'a4b53054b0d3f4d03a0da9d198a3b168' XMD5 (pizza_gram.tar.gz) = dc10f21c8d6bd708b7deae9f18a82b92 XSHA256 (pizza_gram.tar.gz) = e713406834ba40fe07c69b84f042fcb27493c15bc6b51133418527bc7a818027 XSIZE (pizza_gram.tar.gz) = 1053 XMD5 (pizza_sounds.tar.gz) = dacfde8879da8dd0e0542069e5cba6a2 XSHA256 (pizza_sounds.tar.gz) = 606f736625b7f331e219e10460029c8e0b0e58136feeddde976a0dcc68a97bef XSIZE (pizza_sounds.tar.gz) = 1498679 a4b53054b0d3f4d03a0da9d198a3b168 echo x - freeswitch-pizzademo/pkg-descr sed 's/^X//' >freeswitch-pizzademo/pkg-descr << '378620611b62ea92ef547ff42cd3378a' XFreeSwitch PockectSphinx Pizza Demo 378620611b62ea92ef547ff42cd3378a echo x - freeswitch-pizzademo/pkg-plist sed 's/^X//' >freeswitch-pizzademo/pkg-plist << 'fc61f57755a875b77bd4088c25b7cb00' Xfreeswitch/grammar/pizza_arso.gram Xfreeswitch/grammar/pizza_crust.gram Xfreeswitch/grammar/pizza_order.gram Xfreeswitch/grammar/pizza_size.gram Xfreeswitch/grammar/pizza_specialty.gram Xfreeswitch/grammar/pizza_toppings.gram Xfreeswitch/grammar/pizza_type.gram Xfreeswitch/grammar/pizza_yesno.gram Xfreeswitch/scripts/javascript/js_modules/SpeechTools.jm Xfreeswitch/scripts/javascript/ps_pizza.js Xfreeswitch/sounds/pizza/GP-DeliveryorTakeout.wav Xfreeswitch/sounds/pizza/extracheese.wav Xfreeswitch/sounds/pizza/garlic.wav Xfreeswitch/sounds/pizza/Pickle.wav Xfreeswitch/sounds/pizza/ConfirmDali.wav Xfreeswitch/sounds/pizza/ConfirmStartOver.wav Xfreeswitch/sounds/pizza/MeatLovers.wav Xfreeswitch/sounds/pizza/TotallyHumongous.wav Xfreeswitch/sounds/pizza/ConfirmPickle.wav Xfreeswitch/sounds/pizza/goatcheese.wav Xfreeswitch/sounds/pizza/Small.wav Xfreeswitch/sounds/pizza/canadianbacon.wav Xfreeswitch/sounds/pizza/ham.wav Xfreeswitch/sounds/pizza/Medium.wav Xfreeswitch/sounds/pizza/ConfirmHawaiian.wav Xfreeswitch/sounds/pizza/GP-ChangeSpec.wav Xfreeswitch/sounds/pizza/ConfirmCustom.wav Xfreeswitch/sounds/pizza/ConfirmTotallyHumongous.wav Xfreeswitch/sounds/pizza/pickles.wav Xfreeswitch/sounds/pizza/ConfirmMedium.wav Xfreeswitch/sounds/pizza/olives.wav Xfreeswitch/sounds/pizza/ConfirmPan.wav Xfreeswitch/sounds/pizza/Vegetarian.wav Xfreeswitch/sounds/pizza/GP-WasThisRight.wav Xfreeswitch/sounds/pizza/shrimp.wav Xfreeswitch/sounds/pizza/ExtraLarge.wav Xfreeswitch/sounds/pizza/HandTossed.wav Xfreeswitch/sounds/pizza/GP-Wanted-No.wav Xfreeswitch/sounds/pizza/salami.wav Xfreeswitch/sounds/pizza/GP-SpecialtyList.wav Xfreeswitch/sounds/pizza/GP-Crust.wav Xfreeswitch/sounds/pizza/ConfirmExtraLarge.wav Xfreeswitch/sounds/pizza/Pan.wav Xfreeswitch/sounds/pizza/GP-SpecialtyorCustom.wav Xfreeswitch/sounds/pizza/Hawaiian.wav Xfreeswitch/sounds/pizza/artichoke.wav Xfreeswitch/sounds/pizza/Dali.wav Xfreeswitch/sounds/pizza/ConfirmLarge.wav Xfreeswitch/sounds/pizza/ConfirmHandTossed.wav Xfreeswitch/sounds/pizza/ConfirmPickup.wav Xfreeswitch/sounds/pizza/spinach.wav Xfreeswitch/sounds/pizza/everything.wav Xfreeswitch/sounds/pizza/Delivery.wav Xfreeswitch/sounds/pizza/GP-NI.wav Xfreeswitch/sounds/pizza/sausage.wav Xfreeswitch/sounds/pizza/ConfirmVegetarian.wav Xfreeswitch/sounds/pizza/mango.wav Xfreeswitch/sounds/pizza/GP-Remove.wav Xfreeswitch/sounds/pizza/bellpepper.wav Xfreeswitch/sounds/pizza/GP-You_ordered_a.wav Xfreeswitch/sounds/pizza/mushroom.wav Xfreeswitch/sounds/pizza/Thin.wav Xfreeswitch/sounds/pizza/onions.wav Xfreeswitch/sounds/pizza/pizza.wav Xfreeswitch/sounds/pizza/ConfirmRemove.wav Xfreeswitch/sounds/pizza/ConfirmNone.wav Xfreeswitch/sounds/pizza/pineapple.wav Xfreeswitch/sounds/pizza/GP-ARSO.wav Xfreeswitch/sounds/pizza/GP-Size.wav Xfreeswitch/sounds/pizza/GP-Adding.wav Xfreeswitch/sounds/pizza/GP-Toppings.wav Xfreeswitch/sounds/pizza/GP-Greeting.wav Xfreeswitch/sounds/pizza/ConfirmDelivery.wav Xfreeswitch/sounds/pizza/ConfirmThin.wav Xfreeswitch/sounds/pizza/ConfirmSpeciality.wav Xfreeswitch/sounds/pizza/ConfirmSmall.wav Xfreeswitch/sounds/pizza/ConfirmMeatLovers.wav Xfreeswitch/sounds/pizza/pepperoni.wav Xfreeswitch/sounds/pizza/GP-With.wav Xfreeswitch/sounds/pizza/Large.wav Xfreeswitch/sounds/pizza/Pickup.wav Xfreeswitch/sounds/pizza/GP-NoDeliveryorTake-out.wav Xfreeswitch/sounds/pizza/anchovies.wav Xfreeswitch/sounds/pizza/Crust.wav X@dirrm freeswitch/sounds/pizza X@dirrm freeswitch/sounds X@dirrm freeswitch/scripts/javascript/js_modules X@dirrm freeswitch/scripts/javascript X@exec mkdir -p %D/freeswitch/scripts/javascript/js_modules X@exec mkdir -p %D/freeswitch/scripts/javascript fc61f57755a875b77bd4088c25b7cb00 echo x - freeswitch-pizzademo/Makefile sed 's/^X//' >freeswitch-pizzademo/Makefile << 'fbe7ee448e90adbbce26752d0a254c89' X# Ports collection makefile for: freeswitch pizza demo X# Date created: september , 2009 X# Whom: Richard Neese <r.neese@gmail.com> X# X# $FreeBSD$ X# X XPORTNAME= freeswitch-pizzademo XPORTVERSION= 0.1 XCATEGORIES= audio XMASTER_SITES= http://files.freeswitch.org/:source1 \ X http://dl.getdropbox.com/u/152504/:source2 XDISTFILES= pizza_gram.tar.gz:source1 \ X pizza_sounds.tar.gz:source1 X XMAINTAINER= r.neese@gmail.com XCOMMENT= FreeSwitch pizza demo X XRUN_DEPENDS= ${LOCALBASE}/freeswitch/bin/freeswitch:${PORTSDIR}/net/freeswitch X XNO_BUILD= yes X Xdo-install: X @${CP} -R files/* ${LOCALBASE}/share/freeswitch/scripts X @${TAR} -xvzf ${DISTDIR}/pizza_gram.tar.gz -C ${LOCALBASE}/share/freeswitch/grammar X @${TAR} -xzvf ${DISTDIR}/pizza_sounds.tar.gz -C ${LOCALBASE}/share/freeswitch/sounds X @${CHOWN} -R freeswitch:freeswitch /$(LOCALBASE)/share/freeswitch/scripts X @${CHOWN} -R freeswitch:freeswitch /$(LOCALBASE)/share/freeswitch/grammar X @${CHOWN} -R freeswitch:freeswitch /$(LOCALBASE)/share/freeswitch/sounds X X.include <bsd.port.mk> fbe7ee448e90adbbce26752d0a254c89 exit --- fspizza.shar ends here --- >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201004040226.o342QGg8072954>