say.conf [RU]

Основной форум.
Для опытных

Модераторы: Admins, Модераторы

Аватара пользователя
anest
Модератор
Сообщения: 5701
Зарегистрирован: 28 ноя 2004, 10:04

say.conf [RU]

Сообщение anest » 11 янв 2007, 20:25

Ктонить поделится сабжем?

Аватара пользователя
IgorG
Модератор
Сообщения: 1054
Зарегистрирован: 21 ноя 2005, 05:59
Откуда: Россия, Омск
Контактная информация:

Сообщение IgorG » 12 янв 2007, 04:38

Тоже интересуюсь, а то я начал заниматься, но с такой дикой нехваткой времени... если кто сделал то можно запостить так же в багтрекер, чтобы включили в последующие версии.
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru

Аватара пользователя
anest
Модератор
Сообщения: 5701
Зарегистрирован: 28 ноя 2004, 10:04

Сообщение anest » 12 янв 2007, 15:31

тупо скопировал секцию [it] в [ru]
вроде все сходится там.

Аватара пользователя
IgorG
Модератор
Сообщения: 1054
Зарегистрирован: 21 ноя 2005, 05:59
Откуда: Россия, Омск
Контактная информация:

Сообщение IgorG » 12 янв 2007, 16:34

Только там произношение родов нету, в любом случае его доделывать :)
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru

Аватара пользователя
IgorG
Модератор
Сообщения: 1054
Зарегистрирован: 21 ноя 2005, 05:59
Откуда: Россия, Омск
Контактная информация:

Сообщение IgorG » 13 янв 2007, 07:24

Первоначальный черновик настройки. Получился большой, над оптимизацией подумаю позже. Сделал пока только произношение числительных :) Тестируйте и выкладывайте результаты. если что-то произносится не так, как хотелось бы, то выкладывайте результат , указывая:
1) Что тестировали (дата, числительное, дата)
2) Значение произносимой величины
3) Что было произнесено, как должно произноситься

Настройки делались на основе английского произношения
Вот настройки в say.conf:

Код: Выделить всё

[ru-base](!)
    _[n]um:0. => num:${SAY:1}
    _[n]um:X  => digits/${SAY}
    ; Tens
    _[n]um:1X         => digits/${SAY}
    _[n]um:[2-9]0     =>  digits/${SAY}
    _[n]um:[2-9][1-9] =>  digits/${SAY:0:1}0, num:${SAY:1}
    ; Hundreds
    _[n]um:[1-9]00    => digits/${SAY}
    _[n]um:XXX        => num:${SAY:0:1}00, num:${SAY:1}
    ; Thousands
    _[n]um:1XXX       => num:${SAY:0:1}, digits/thousand, num:${SAY:1}
    _[n]um:[2-4]XXX   => num:${SAY:0:1}, digits/thousands-i, num:${SAY:1}
    _[n]um:[5-9]XXX   => num:${SAY:0:1}, digits/thousands, num:${SAY:1}
    _[n]um:X1XXX      => num:${SAY:0:2}, digits/thousand, num:${SAY:2}
    _[n]um:X[2-4]XXX  => num:${SAY:0:2}, digits/thousands-i, num:${SAY:2}
    _[n]um:X[5-9]XXX  => num:${SAY:0:2}, digits/thousands, num:${SAY:2}
    _[n]um:XX1XXX     => num:${SAY:0:3}, digits/thousand, num:${SAY:3}
    _[n]um:XX[2-4]XXX => num:${SAY:0:3}, digits/thousands-i, num:${SAY:3}
    _[n]um:XX[5-9]XXX => num:${SAY:0:3}, digits/thousands, num:${SAY:3}
    ; Millions
    _[n]um:1XXXXXX        => num:${SAY:0:1}, digits/million, num:${SAY:1}
    _[n]um:[2-4]XXXXXX    => num:${SAY:0:1}, digits/millions-i, num:${SAY:1}
    _[n]um:[5-9]XXXXXX    => num:${SAY:0:1}, digits/millions, num:${SAY:1}
    _[n]um:X1XXXXXX       => num:${SAY:0:2}, digits/million, num:${SAY:2}
    _[n]um:X[2-4]XXXXXX   => num:${SAY:0:2}, digits/millions-i, num:${SAY:2}
    _[n]um:X[5-9]XXXXXX   => num:${SAY:0:2}, digits/millions, num:${SAY:2}
    _[n]um:XX1XXXXXX      => num:${SAY:0:3}, digits/million, num:${SAY:3}
    _[n]um:XX[2-4]XXXXXX  => num:${SAY:0:3}, digits/millions-i, num:${SAY:3}
    _[n]um:XX[5-9]XXXXXX  => num:${SAY:0:3}, digits/millions, num:${SAY:3}
    ; Billions
    _[n]um:1XXXXXXXXX     => num:${SAY:0:1}, digits/billion, num:${SAY:1}
    _[n]um:[2-4]XXXXXXXXX => num:${SAY:0:1}, digits/billions-i, num:${SAY:1}
    _[n]um:[5-9]XXXXXXXXX => num:${SAY:0:1}, digits/billions, num:${SAY:1}
    _[n]um:X1XXXXXXXXX    => num:${SAY:0:2}, digits/billion, num:${SAY:2}
    _[n]um:X[2-4]XXXXXXXXX => num:${SAY:0:2}, digits/billions-i, num:${SAY:2}
    _[n]um:X[5-9]XXXXXXXXX => num:${SAY:0:2}, digits/billions, num:${SAY:2}
    _[n]um:XX1XXXXXXXXX    => num:${SAY:0:3}, digits/billion, num:${SAY:3}
    _[n]um:XX[2-4]XXXXXXXXX => num:${SAY:0:3}, digits/billions-i, num:${SAY:3}
    _[n]um:XX[5-9]XXXXXXXXX => num:${SAY:0:3}, digits/billions, num:${SAY:3}

    ; enumeration
    _e[n]um:X => digits/h-${SAY}
    _e[n]um:1X => digits/h-${SAY}
    _e[n]um:[2-9]0 => digits/h-${SAY}
    _e[n]um:[2-9][1-9] => num:${SAY:0:1}0, digits/h-${SAY:1}
    _e[n]um:[1-9]XX => num:${SAY:0:1}, digits/hundred, enum:${SAY:1}

[ru](ru-base,date-base,digit-base)
    _datetime::. => date:AdBY 'digits/at' IMp:${SAY}
    _date::. => date:AdBY:${SAY}
    _time::. => date:IMp:${SAY}
Вот кусок диалплана для тестирования:

[config]
[globals]
SAY_NUMBER_BEGIN=10
SAY_NUMBER_STEP= 1
SAY_DATE_BEGIN=10000 ; Unixtime
SAY_DATE_STEP=500 ; Unixtime


[say]
; Russian
exten => 787,1,Answer
exten => 787,n,Wait(1)
exten => 787,n,Set(SAY_NUMBER=${SAY_NUMBER_BEGIN})
exten => 787,n,Set(CHANNEL(language)=ru)
exten => 787,n,SayNumber(${SAY_NUMBER})
exten => 787,n,Wait(1)
exten => 787,n,Set(SAY_NUMBER=$[${SAY_NUMBER} + ${SAY_NUMBER_STEP}])
exten => 787,n,GoTo(787,4)

exten => 788,1,Answer
exten => 788,n,Wait(1)
exten => 788,n,Set(SAY_DATE=${SAY_DATE_BEGIN})
exten => 788,n,Set(CHANNEL(language)=ru)
exten => 788,n,SayUnixtime(${SAY_DATE})
exten => 788,n,Wait(1)
exten => 788,n,Set(SAY_DATE=$[${SAY_DATE} + ${SAY_DATE_STEP}])
exten => 788,n,GoTo(788,4)
[/config]


P.S. Все накидано в спешке, работоспособность не гарантирую. Как будет подтверждено что, что-то из этого вообще работает, то вынесем в первый пост.
Последний раз редактировалось IgorG 15 янв 2007, 05:35, всего редактировалось 3 раза.
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru

Аватара пользователя
IgorG
Модератор
Сообщения: 1054
Зарегистрирован: 21 ноя 2005, 05:59
Откуда: Россия, Омск
Контактная информация:

Сообщение IgorG » 13 янв 2007, 07:28

PS. Обнаружил что в консоли есть команда say load new, возможно она нужна для подключения нового стиля произношения. Пока что я не имею возможности сам тестировать написанное, так как нет времени настраивать домашнюю машину...
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru

Аватара пользователя
anest
Модератор
Сообщения: 5701
Зарегистрирован: 28 ноя 2004, 10:04

Сообщение anest » 13 янв 2007, 13:04

*-1.2: SetLanguage(ru) is deprecated.
Use Set(LANGUAGE()=ru)

*-1.4: LANGUAGE() is deprecated; use CHANNEL(language) instead.

:shock: каждую версию будут в слова играться? :?

tip:
тепреь это будет выглядеть так

exten => 787,n,Set(CHANNEL(language)=ru)

Аватара пользователя
IgorG
Модератор
Сообщения: 1054
Зарегистрирован: 21 ноя 2005, 05:59
Откуда: Россия, Омск
Контактная информация:

Сообщение IgorG » 13 янв 2007, 13:25

Да, уж у них в примерах в текущем релизе дан неправильный образец диалплана... Ужас...
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru

Аватара пользователя
IgorG
Модератор
Сообщения: 1054
Зарегистрирован: 21 ноя 2005, 05:59
Откуда: Россия, Омск
Контактная информация:

Сообщение IgorG » 16 янв 2007, 08:02

Последний вариант: =)

Код: Выделить всё

[ru-base](!)
    _[n]um:0. => num:${SAY:1}
    _[n]um:X  => digits/${SAY}
    ; Tens
    _[n]um:1X         => digits/${SAY}
    _[n]um:[2-9]0     =>  digits/${SAY}
    _[n]um:[2-9][1-9] =>  digits/${SAY:0:1}0, num:${SAY:1}
    ; Hundreds
    _[n]um:[1-9]00    => digits/${SAY}
    _[n]um:XXX        => num:${SAY:0:1}00, num:${SAY:1}
    ; Thousands
    _[n]um:1XXX       => num:${SAY:0:1}, digits/thousand, num:${SAY:1}
    _[n]um:[2-4]XXX   => num:${SAY:0:1}, digits/thousands-i, num:${SAY:1}
    _[n]um:[5-9]XXX   => num:${SAY:0:1}, digits/thousands, num:${SAY:1}
    _[n]um:X1XXX      => num:${SAY:0:2}, digits/thousand, num:${SAY:2}
    _[n]um:X[2-4]XXX  => num:${SAY:0:2}, digits/thousands-i, num:${SAY:2}
    _[n]um:X[5-9]XXX  => num:${SAY:0:2}, digits/thousands, num:${SAY:2}
    _[n]um:XX1XXX     => num:${SAY:0:3}, digits/thousand, num:${SAY:3}
    _[n]um:XX[2-4]XXX => num:${SAY:0:3}, digits/thousands-i, num:${SAY:3}
    _[n]um:XX[5-9]XXX => num:${SAY:0:3}, digits/thousands, num:${SAY:3}
    ; Millions
    _[n]um:1XXXXXX        => num:${SAY:0:1}, digits/million, num:${SAY:1}
    _[n]um:[2-4]XXXXXX    => num:${SAY:0:1}, digits/millions-i, num:${SAY:1}
    _[n]um:[5-9]XXXXXX    => num:${SAY:0:1}, digits/millions, num:${SAY:1}
    _[n]um:X1XXXXXX       => num:${SAY:0:2}, digits/million, num:${SAY:2}
    _[n]um:X[2-4]XXXXXX   => num:${SAY:0:2}, digits/millions-i, num:${SAY:2}
    _[n]um:X[5-9]XXXXXX   => num:${SAY:0:2}, digits/millions, num:${SAY:2}
    _[n]um:XX1XXXXXX      => num:${SAY:0:3}, digits/million, num:${SAY:3}
    _[n]um:XX[2-4]XXXXXX  => num:${SAY:0:3}, digits/millions-i, num:${SAY:3}
    _[n]um:XX[5-9]XXXXXX  => num:${SAY:0:3}, digits/millions, num:${SAY:3}
    ; Billions
    _[n]um:1XXXXXXXXX     => num:${SAY:0:1}, digits/billion, num:${SAY:1}
    _[n]um:[2-4]XXXXXXXXX => num:${SAY:0:1}, digits/billions-i, num:${SAY:1}
    _[n]um:[5-9]XXXXXXXXX => num:${SAY:0:1}, digits/billions, num:${SAY:1}
    _[n]um:X1XXXXXXXXX    => num:${SAY:0:2}, digits/billion, num:${SAY:2}
    _[n]um:X[2-4]XXXXXXXXX => num:${SAY:0:2}, digits/billions-i, num:${SAY:2}
    _[n]um:X[5-9]XXXXXXXXX => num:${SAY:0:2}, digits/billions, num:${SAY:2}
    _[n]um:XX1XXXXXXXXX    => num:${SAY:0:3}, digits/billion, num:${SAY:3}
    _[n]um:XX[2-4]XXXXXXXXX => num:${SAY:0:3}, digits/billions-i, num:${SAY:3}
    _[n]um:XX[5-9]XXXXXXXXX => num:${SAY:0:3}, digits/billions, num:${SAY:3}

    ; enumeration
    _e[n]um:X[mfn] => digits/h-${SAY}
    _e[n]um:1X[mfn] => digits/h-${SAY}
    _e[n]um:[2-9]0[mfn] => digits/h-${SAY}
    _e[n]um:[2-9][1-9][mfn] => num:${SAY:0:1}0, digits/h-${SAY:1}
    _e[n]um:[1-9]XX[mfn] => num:${SAY:0:1}, digits/hundred, enum:${SAY:1}

[ru](ru-base,digit-base)
    _date:[Y]:.  => enum:${SAY:0:4}m            ; year, [12]xxx
    _date:[Bb]:. => digits/mon-$[${SAY:4:2}-1]  ; month name, 0..11
    _date:[Aa]:. => digits/day-${SAY:16:1}      ; day of week
    _date:[de]:. => enum:${SAY:6:2}n            ; day of month
    _date:[hH]:. => num:${SAY:8:2}              ; hour
    _date:[I]:.  => num:$[${SAY:8:2} % 12]      ; hour 0-12
    _date:[M]:.  => num:${SAY:10:2}             ; minute
    _date:[pP]:. => digits/p-m  ; am pm
    _date:[S]:.  => num:${SAY:13:2}             ; seconds

    _datetime::. => date:AdBY 'digits/at' IM:${SAY}
    _date::. => date:AdBY:${SAY}
    _time::. => date:IM:${SAY}
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru

shtorm512
Сообщения: 30
Зарегистрирован: 06 сен 2007, 07:23

Сообщение shtorm512 » 03 окт 2007, 01:49

Единицы, десятки, сотни и минус не произносит - нормально работают, а вот с тысячами какой то косяк......все равно по английской логике работают! Вопрос - где еще добавить строки, чтобы после произнесенной цифры он в правильном падеже произносил "рубль, рубля, рублей"??? :)

Аватара пользователя
IgorG
Модератор
Сообщения: 1054
Зарегистрирован: 21 ноя 2005, 05:59
Откуда: Россия, Омск
Контактная информация:

Сообщение IgorG » 03 окт 2007, 04:43

Ой, давно я за это не брался, нужно будет доработать и включить в транк. А насчет рублей рекомендую сделать макрос для произношения сумм =)
рубль, рубля, рублей произносится в зависимости от последней цифры.
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru

shtorm512
Сообщения: 30
Зарегистрирован: 06 сен 2007, 07:23

Сообщение shtorm512 » 04 окт 2007, 00:57

Сделал я произношения рубля, рублей, рубль. Только путем исполнения Перлового скрипта, но все равно работает. Так же и для копеек сделал8)

Аватара пользователя
anest
Модератор
Сообщения: 5701
Зарегистрирован: 28 ноя 2004, 10:04

Сообщение anest » 04 окт 2007, 01:18

shtorm512, не вижу аттача ;)

Аватара пользователя
IgorG
Модератор
Сообщения: 1054
Зарегистрирован: 21 ноя 2005, 05:59
Откуда: Россия, Омск
Контактная информация:

Сообщение IgorG » 04 окт 2007, 04:40

В виде макроса примерно так:

Код: Выделить всё

[macro-saycountru]
exten => s,1,NoOp(Say Word In Russian)
exten => s,n,GotoIf($[${ARG4}%10 = 1]:one)
exten => s,n,GotoIf($[${ARG4}%10 = 2]:two)
exten => s,n,GotoIf($[${ARG4}%10 = 3]:two)
exten => s,n,GotoIf($[${ARG4}%10 = 4]:two)
exten => s,n,Goto(three)
exten => s,n(one),Playback(${ARG1})
exten => s,n(two),Playback(${ARG2})
exten => s,n(three),Playback(${ARG3})
Не тестировал, но как-то так. Использовать так:

Код: Выделить всё

exten => _X.,1,Macro(saycountru,rubl,rublya,rubley,145)
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru

Ded
Guru
Сообщения: 4428
Зарегистрирован: 10 янв 2005, 16:01
Откуда: Road Town, Tortola, British Virgin Islands

Сообщение Ded » 21 дек 2007, 13:26

IgorG писал(а):PS. Обнаружил что в консоли есть команда say load new, возможно она нужна для подключения нового стиля произношения.
Ahtung! Опасная команды, вводит в заблуждение. Она хоть и перечитывает конф, но пеосле этого читает тишину.

Аватара пользователя
IgorG
Модератор
Сообщения: 1054
Зарегистрирован: 21 ноя 2005, 05:59
Откуда: Россия, Омск
Контактная информация:

Сообщение IgorG » 21 дек 2007, 18:00

Не понял, что именно не так? Если можно пошпгово, с конфигом и выводом из консоли. Если что не так - подправлю.
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru

Ded
Guru
Сообщения: 4428
Зарегистрирован: 10 янв 2005, 16:01
Откуда: Road Town, Tortola, British Virgin Islands

Сообщение Ded » 21 дек 2007, 18:27

Ковыряюсь в say.conf.
Делаю там изменения, чтобы услышать эти изменения делаю say load new.
После этого либо глохнет
-- Executing [23@say:4] Set("SIP/202-09bcb0d0", "CHANNEL(language)=de") in new stack
-- Executing [23@say:5] Goto("SIP/202-09bcb0d0", "23|3") in new stack
-- Goto (say,23,3)
-- Executing [23@say:3] SayNumber("SIP/202-09bcb0d0", "23") in new stack ; вот тут тишина
== Spawn extension (say, 23, 3) exited non-zero on 'SIP/202-09bcb0d0'

Пока что вопросов больше, чем ответов. Не понимаю, почему не принимаются изменения в say.conf.

Аватара пользователя
IgorG
Модератор
Сообщения: 1054
Зарегистрирован: 21 ноя 2005, 05:59
Откуда: Россия, Омск
Контактная информация:

Сообщение IgorG » 21 дек 2007, 19:13

А до этого какой оежим, так же new? Вообще конфиг подгружается при загрузке app_playback.so. Наверное нужно добавить комманду say reload? Вообще комманда say load как-то не логична, не совсем понятно по названию что она делает.

Ded, в общем предлагай как должно работать, я в понедельник покручу.
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru

Braams
Сообщения: 83
Зарегистрирован: 03 авг 2006, 13:07

Сообщение Braams » 19 фев 2008, 12:17

Если кому интересно - моя версия say.conf, числительные, с поддержкой женского рода (кусочек для num)

Код: Выделить всё

[ru-base](!)
    _[n]um:0. => num:${SAY:1}

    _[n]um:X  => digits/${SAY}
    _[n]um:[1-2]f  => digits/${SAY:0:1}f
    _[n]um:[3-9]f  => digits/${SAY:0:1}

    ; Tens
    _[n]um:1X       => digits/${SAY:0:2}
    _[n]um:1Xf      => digits/${SAY:0:2}

    _[n]um:[2-9]0       =>  digits/${SAY:0:2}
    _[n]um:[2-9]0f      =>  digits/${SAY:0:2}

    _[n]um:[2-9][1-2]   =>  digits/${SAY:0:1}0, num:${SAY:1}
    _[n]um:[2-9][1-2]f  =>  digits/${SAY:0:1}0, num:${SAY:1}

    _[n]um:[2-9][3-9]   =>  digits/${SAY:0:1}0, num:${SAY:1}
    _[n]um:[2-9][3-9]f  =>  digits/${SAY:0:1}0, num:${SAY:1}


    ; Hundreds
    _[n]um:[1-9]00    => digits/${SAY:0:1}00
    _[n]um:[1-9]00f    => digits/${SAY:0:1}00

    _[n]um:XXX        => num:${SAY:0:1}00, num:${SAY:1}
    _[n]um:XXXf        => num:${SAY:0:1}00, num:${SAY:1}

    ; Thousands
    _[n]um:1XXX       => num:${SAY:0:1}f, digits/thousand1, num:${SAY:1}
    _[n]um:1XXXf       => num:${SAY:0:1}f, digits/thousand1, num:${SAY:1}

    _[n]um:[2-4]XXX       => num:${SAY:0:1}f, digits/thousand2, num:${SAY:1}
    _[n]um:[2-4]XXXf       => num:${SAY:0:1}f, digits/thousand2, num:${SAY:1}
   _[n]um:[5-9]XXX   => num:${SAY:0:1}, digits/thousand5, num:${SAY:1}
    _[n]um:[5-9]XXXf   => num:${SAY:0:1}, digits/thousand5, num:${SAY:1}


    _[n]um:1XXXX  => num:${SAY:0:2}, digits/thousand5, num:${SAY:2}
    _[n]um:1XXXXf  => num:${SAY:0:2}, digits/thousand5, num:${SAY:2}

    _[n]um:[2-9]1XXX  => num:${SAY:0:2}f, digits/thousand1, num:${SAY:2}
    _[n]um:[2-9]1XXXf  => num:${SAY:0:2}f, digits/thousand1, num:${SAY:2}

    _[n]um:[2-9][2-4]XXX  => num:${SAY:0:2}f, digits/thousand2, num:${SAY:2}
    _[n]um:[2-9][2-4]XXXf  => num:${SAY:0:2}f, digits/thousand2, num:${SAY:2}

    _[n]um:[2-9][5-9]XXX  => num:${SAY:0:2}, digits/thousand5, num:${SAY:2}
    _[n]um:[2-9][5-9]XXXf  => num:${SAY:0:2}, digits/thousand5, num:${SAY:2}


    _[n]um:X1XXXX  => num:${SAY:0:3}, digits/thousand5, num:${SAY:3}
    _[n]um:X1XXXXf  => num:${SAY:0:3}, digits/thousand5, num:${SAY:3}

    _[n]um:X[2-9]1XXX  => num:${SAY:0:3}f, digits/thousand1, num:${SAY:3}
    _[n]um:X[2-9]1XXXf  => num:${SAY:0:3}f, digits/thousand1, num:${SAY:3}

    _[n]um:X[2-9][2-4]XXX  => num:${SAY:0:3}f, digits/thousand2, num:${SAY:3}
    _[n]um:X[2-9][2-4]XXXf  => num:${SAY:0:3}f, digits/thousand2, num:${SAY:3}

    _[n]um:X[2-9][5-9]XXX  => num:${SAY:0:3}, digits/thousand5, num:${SAY:3}
    _[n]um:X[2-9][5-9]XXXf  => num:${SAY:0:3}, digits/thousand5, num:${SAY:3}

;my millions
    _[n]um:1XXXXXX       => num:${SAY:0:1}, digits/million1, num:${SAY:1}
    _[n]um:1XXXXXXf      => num:${SAY:0:1}, digits/million1, num:${SAY:1}

    _[n]um:[2-4]XXXXXX       => num:${SAY:0:1}, digits/million2, num:${SAY:1}
    _[n]um:[2-4]XXXXXXf      => num:${SAY:0:1}, digits/million2, num:${SAY:1}

    _[n]um:[5-9]XXXXXX   => num:${SAY:0:1}, digits/million5, num:${SAY:1}
    _[n]um:[5-9]XXXXXXf  => num:${SAY:0:1}, digits/million5, num:${SAY:1}


    _[n]um:1XXXXXXX   => num:${SAY:0:2}, digits/million5, num:${SAY:2}
    _[n]um:1XXXXXXXf  => num:${SAY:0:2}, digits/million5, num:${SAY:2}

    _[n]um:[2-9]1XXXXXX   => num:${SAY:0:2}, digits/million1, num:${SAY:2}
    _[n]um:[2-9]1XXXXXXf  => num:${SAY:0:2}, digits/million1, num:${SAY:2}

    _[n]um:[2-9][2-4]XXXXXX   => num:${SAY:0:2}, digits/million2, num:${SAY:2}
    _[n]um:[2-9][2-4]XXXXXXf  => num:${SAY:0:2}, digits/million2, num:${SAY:2}

    _[n]um:[2-9][5-9]XXXXXX  => num:${SAY:0:2}, digits/million5, num:${SAY:2}
    _[n]um:[2-9][5-9]XXXXXXf  => num:${SAY:0:2}, digits/million5, num:${SAY:2}

    _[n]um:X1XXXXXXX  => num:${SAY:0:3}, digits/million5, num:${SAY:3}
    _[n]um:X1XXXXXXXf  => num:${SAY:0:3}, digits/million5, num:${SAY:3}

    _[n]um:X[2-9]1XXX XXX  => num:${SAY:0:3}, digits/million1, num:${SAY:3}
    _[n]um:X[2-9]1XXXXXXf  => num:${SAY:0:3}, digits/million1, num:${SAY:3}

    _[n]um:X[2-9][2-4]XXXXXX  => num:${SAY:0:3}, digits/million2, num:${SAY:3}
    _[n]um:X[2-9][2-4]XXXXXXf  => num:${SAY:0:3}, digits/million2, num:${SAY:3}

    _[n]um:X[2-9][5-9]XXXXXX  => num:${SAY:0:3}, digits/million5, num:${SAY:3}
    _[n]um:X[2-9][5-9]XXXXXXf  => num:${SAY:0:3}, digits/million5, num:${SAY:3}
Особенности названия файлов:
1f одна
2f две
thousand1 тысяча
thousand2 тысячи
thousand5 тысяч
million1 миллион
million2 миллиона
million5 миллионов

Использование:
Playback(num:1356|say) - одна тысяча триста пятьдесят шесть
Playback(num:421f|say) - четыреста двадцать одна
Последний раз редактировалось Braams 01 апр 2008, 13:49, всего редактировалось 1 раз.
Everything over IP & IP over Everything

Ded
Guru
Сообщения: 4428
Зарегистрирован: 10 янв 2005, 16:01
Откуда: Road Town, Tortola, British Virgin Islands

Сообщение Ded » 19 фев 2008, 13:01

Playback(num:421f|say) - четыреста двадцать одна
Если 421 копейка - то семантически верно, а если 421 рубль - то не верно.

Braams
Сообщения: 83
Зарегистрирован: 03 авг 2006, 13:07

Сообщение Braams » 19 фев 2008, 13:06

в первую очередь для копеек женский род и делал
Everything over IP & IP over Everything

Ded
Guru
Сообщения: 4428
Зарегистрирован: 10 янв 2005, 16:01
Откуда: Road Town, Tortola, British Virgin Islands

Сообщение Ded » 19 фев 2008, 13:17

Лутше для тысяч, чо мелочица? Четыреста двадцать одна тысяча.... :)

Braams
Сообщения: 83
Зарегистрирован: 03 авг 2006, 13:07

Сообщение Braams » 19 фев 2008, 13:19

ну и для корректного произношения тысяч тоже :-)
Everything over IP & IP over Everything

Аватара пользователя
anest
Модератор
Сообщения: 5701
Зарегистрирован: 28 ноя 2004, 10:04

Сообщение anest » 19 фев 2008, 17:23

зачет! :)

Mike_A
Сообщения: 3
Зарегистрирован: 08 мар 2008, 22:02
Откуда: Россия, Рязань

say.conf [RU]

Сообщение Mike_A » 08 мар 2008, 22:22

Народ, вот мой вариант, говорит и мегабайты, и градусы и копейки ...
Ни как не победил минус и дробные числа - ну чтоб зарядить ему currency:-12,34, а оно само и минус и рубли и копейки сказало - надо патчи писать, тока там всё доходит до главного анализа всего dial-плана - а вот это что-то не хочеться поганить

Код: Выделить всё

exten => s,n,GotoIf($[${Downloaded} > 1024]?MByte)
exten => s,n,Playback(kilobyte:${Downloaded},say)
exten => s,n,Goto(s,next)
exten => s,n(MByte),GotoIf($[$[${Downloaded}/1024] > 1024]?GByte)
exten => s,n,Playback(megabyte:$[ROUND(${Downloaded}/1024})],say)
exten => s,n,Goto(s,next)
exten => s,n(GByte),Playback(gigabyte:$[ROUND(${Downloaded}/(1024*1024))],say) 
exten => s,n(next),...
говорилка времени тут пока не сделана
хотелось бы это всё доделать и внести в транк, но времени как всегда не хватает
Вложения
say.conf
(20.39 КБ) 277 скачиваний
Последний раз редактировалось Mike_A 09 мар 2008, 19:49, всего редактировалось 1 раз.

Ответить