<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
In reponse to tzafrir's comments: <BR>&nbsp;<BR>&gt; I am trying to add relative path support for digits/letters/phonetics for all "say" functions that are located in say.c. There are many ways to do this and I'm trying to choose the least<BR>&gt; obstructive as far as I can tell. I'd like some input if possible:<BR>&gt; &gt; <BR>&gt; &gt; *** Reasoning ***<BR>&gt; &gt; <BR>&gt; &gt; normal voice files using playback (background, ...) can have a prefix added to the language <BR>&gt; &gt; <BR>&gt; &gt; ie. playback(welcome), playback(path1/welcome), playback(sub1/path1/welcome) ...<BR>&gt; &gt; <BR>&gt; &gt; whereas "say" functions can't =&gt; SayNumber(1000)<BR>&gt; &gt; <BR>&gt; &gt; this limits us to a single voice under a specific language for any digits/letters and phonetics (what I call VOCAB files). We need to able to use multiple voices under an existing language for digits/letters amd phonetics. For example:<BR>&nbsp;<BR>Comments from tzafrir:&nbsp;<BR>&nbsp;<BR>The language serves two different roles here:<BR>&nbsp;<BR>1. defines the syntax: how exactly do you day the number?<BR>&nbsp;<BR>E.g. in Hebrew "2009" is not just "two", "thousand", "and", "9",<BR>&nbsp;<BR>It is basically "two-thousand", "and", "9".&nbsp;<BR>&nbsp;<BR>And then there's the simple subdirectory of the number.<BR>&nbsp;<BR>RESPONSE: <BR>&nbsp;<BR>This in no way affects anything to do with the language and how it is said. It only tells where to get the voice prompts from&nbsp;Relative to that language and directory, instead of the root of that language. Instead of playing the file from sounds/LANGUAGE/digits, it plays from sounds/LANGUAGE/VOCAB_RELATIVE_PATH/digits. Please feel free to rename VOCAB_RELATIVE_PATH to anything else that might be less misleading. As a side note, this will also work for any new LANGUAGE architecture that may be used.<BR><BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; &gt; <BR>&gt; &gt; Consider the following sound file directory structure:<BR>&gt; &gt; <BR>&gt; &gt; (English)<BR>&gt; &gt; sounds/digits<BR>&gt; &gt; sounds/letters<BR>&gt; &gt; sounds/phonetics<BR>&gt; &gt; sounds/customer1<BR>&gt; &gt; sounds/customer2<BR>&gt; &gt; sounds/customer3<BR>&gt; &gt; sounds/customer1/digits<BR>&gt; &gt; sounds/customer1/letters<BR>&gt; &gt; sounds/customer1/phonetics<BR>&gt; &gt; <BR>&gt; &gt; (French)<BR>&gt; &gt; sounds/fr/digits<BR>&gt; &gt; sounds/fr/letters<BR>&gt; &gt; sounds/fr/phonetics<BR>&gt; &gt; sounds/fr/customer1<BR>&gt; &gt; sounds/fr/customer2<BR>&gt; &gt; sounds/fr/customer3<BR>&gt; &gt; sounds/fr/customer1/digits<BR>&gt; &gt; sounds/fr/customer1/letters<BR>&gt; &gt; sounds/fr/customer1/phonetics<BR>&gt; &gt; <BR>&gt; &gt; there is no way to use the files under customer1 when using any of the "say" functions, as they are hard coded to look in the root language path.<BR>&gt; &gt; <BR>&gt; &gt; *** Implementation ***<BR>&gt; &gt; <BR>&gt; &gt; Method 1 (what I would prefer):<BR>&gt; &gt; One way to add this would be to add an element in the ast_chan structure, but I do not want to do this as I feel that it is too obstructive, unless the API has previsions for this.<BR>&gt; &gt; <BR>&gt; &gt; Method 2:<BR>&gt; &gt; Add the ability to pass in a relative path in each "say" function, but again this changes the way existing functions are called, and also requires a change to each "say" function (to obstructive). <BR>&gt; &gt; <BR>&gt; &gt; Method 3 (what I chose):<BR>&gt; &gt; Add an optional CHANNEL variable and use it to prefix the path in ast_say_streamfile. By using this method, I only need to change 1 function (ast_say_streamfile) which is called in ALL "say" functions, as well as add 2 functions that checks/builds the filename with the prefix. This method only applies to functions in say.c and does not affect existing syntax.<BR>&gt; &gt; <BR>&gt; &gt; *** How it works ***<BR>&gt; &gt; <BR>&gt; &gt; Add a channel variable called VOCAB_RELATIVE_PATH to enable this feature (simply call the dialplan Set function to enable it). If this variable exists, then the relative path defined by it is used, otherwise it defaults to it's usual location. If the file is not found under the relative path, it also defaults to it's usual location. <BR>&gt; <BR>&nbsp;<BR>tzafrir's comments: <BR><BR>This duplicates LANGUAGE.<BR>
&nbsp;<BR>
RESPONSE:<BR>&nbsp;<BR>I agree that this seems to duplicate LANGUAGE, but in fact it only&nbsp;complements it. The LANGUAGE field is still used and the VOCAB_RELATIVE_PATH only appends to it. If the functions in "SAY" had relative paths just like the playback and background functions do, this would not be an issue, but they are hard coded. I&nbsp;would like to&nbsp;implement this but I would need to change the syntax and I do not wish to do so for compatibility reasons.<BR>
&nbsp;<BR>
Cheers,<BR>&nbsp;<BR>NicChap.<BR><BR></body>
</html>