Страница 1 из 1

Проблема с озвучкой баланса

Добавлено: 17 июл 2020, 13:57
edw1111
Добрый день, пытаюсь сделать озвучивание баланса клиента через playback,но возникла следующая проблема: Если ввести любое число больше 999, то астериск произносит только валюту ( гривна, к примеру). Конфиг say.conf и extensions_custom для вызова озвучивания добавлю ниже.

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

[ua-base](!) 
    _[n]um:0 => num:${SAY} 
    _[n]um:0f => digits/${SAY:0:1} 
    _[n]um:0. => num:${SAY:1} 
    _[n]um:X  => digits/${SAY} 
    _[n]um:1f  => digits/odna
    _[n]um:2f  => digits/dvi
    _[n]um:Xf  => num:${SAY:0:1}
;     Tens 
    _[n]um:1Xf  => num:${SAY:0:2}
    _[n]um:1X   => digits/${SAY} 
    _[n]um:[2-9]0     => digits/${SAY} 
    _[n]um:[2-9]0f     => digits/${SAY:0:2} 
    _[n]um:[2-9][1-9] => digits/${SAY:0:1}0, num:${SAY:1} 
    _[n]um:[2-9][1-9]f => digits/${SAY:0:1}0, num:${SAY:1}
        ; Hundreds 
    _[n]um:[1-9]00    => digits/${SAY} 
    _[n]um:[1-9]00f    => num:${SAY} 
    _[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}, 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} 
 
[ua](ua-base,digit-base) 
 
;CHAS
    _godu[n]:0 => num:${SAY}, digits/godun
    _godu[n]:1 => digits/odna, digits/goduna
    _godu[n]:2 => digits/dvi, digits/godunu
    _godu[n]:[3-4] => num:${SAY}, digits/godunu
    _godu[n]:[5-9] => num:${SAY}, digits/godun
    _godu[n]:0X => godun:${SAY:1} 
    _godu[n]:1X => num:${SAY}, digits/godun
    _godu[n]:20 => num:${SAY}, digits/godun
    _godu[n]:2[1-4] => num:${SAY:0:1}0, godun:${SAY:1} 
    _hvulu[n]:0 => num:${SAY}, digits/hvulun
    _hvulu[n]:1 => digits/odna, digits/hvuluna
    _hvulu[n]:2 => digits/dvi, digits/hvulunu
    _hvulu[n]:[3-4] =>  num:${SAY}, digits/hvulunu
    _hvulu[n]:[5-9] => num:${SAY}, digits/hvulun
    _hvulu[n]:0X  => hvulun:${SAY:1} 
    _hvulu[n]:1X  => num:${SAY}, digits/hvulun
    _hvulu[n]:[2-5]0 => num:${SAY}, digits/hvulun
    _hvulu[n]:[2-5][1-9] => num:${SAY:0:1}0, hvulun:${SAY:1} 
    _seku[n]d:0 =>  num:${SAY}, digits/secund
    _seku[n]d:1 => digits/odna, digits/secunda
    _seku[n]d:2 => digits/dvi, digits/secundu
    _seku[n]d:[3-4] => num:${SAY}, digits/secundu
    _seku[n]d:[5-9] => num:${SAY}, digits/secund
    _seku[n]d:0X => sekund:${SAY:1} 
    _seku[n]d:1X => num:${SAY}, digits/secund
    _seku[n]d:[2-5]0 => num:${SAY}, digits/secund
    _seku[n]d:[2-5][1-9] => num:${SAY:0:1}0, sekund:${SAY:1} 
 
;zagalnij chas
    _date:[hH]:. => godun:${SAY:8:2}              ; hour 
    _date:[M]:. => hvulun:${SAY:10:2}             ; minute 
    _date:[S]:. => sekund:${SAY:13:2}             ; seconds 
    _datetime::. =>  date:AdBY HMS:${SAY} 
 
;GROSHI
 
_gr[n]:. => num:${SAY}f, digits/grn${IF($[$[$[${SAY}%10]=1] & $[$[${SAY}%100]!=11]]?1:${IF($[$[$[$[${SAY}%10]>=2] & $[$[${SAY}%10]<=4]] & $[$[$[${SAY}%100]<10] | $[$[${SAY}%100]>=20]]]?2:5)})} 
_kop:. => num:${SAY}f, digits/kop${IF($[$[$[${SAY}%10]=1] & $[$[${SAY}%100]!=11]]?1:${IF($[$[$[$[${SAY}%10]>=2] & $[$[${SAY}%10]<=4]] & $[$[$[${SAY}%100]<10] | $[$[${SAY}%100]>=20]]]?2:5)})} 
Вызываю через Playback(grn:999|say) , в логах при числе больше 999 ошибок нет, просто проигрывает файл гривны:

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

[2020-07-16 15:17:40] VERBOSE[121011][C-000008c9] pbx.c: Executing [s@balance:4] Playback("SIP/535121-0000004a", "grn:1345,say") in new stack
[2020-07-16 15:17:40] VERBOSE[121011][C-000008c9] file.c: <SIP/535121-0000004a> Playing 'digits/grn5.alaw' (language 'ua')
Может есть у кого рабочий конфиг для русского/украинского, не важно, чтобы сумма хотя бы до миллиона проговаривалась? Или может кто понимает синтаксис последних строк (там где gr[n]), которые отвечают за валюту. Подскажите, пожалуйста куда смотреть. Спасибо за помощь

Re: Проблема с озвучкой баланса

Добавлено: 17 июл 2020, 21:15
murr
Число гривень проговаривается по правилу
_gr[n]:. => num:${SAY}f,

Для сотен есть шаблон с f
_[n]um:[1-9]00 => digits/${SAY}
_[n]um:[1-9]00f => num:${SAY}
_[n]um:XXX => num:${SAY:0:1}00, num:${SAY:1}
_[n]um:XXXf => num:${SAY:0:1}00, num:${SAY:1}

А для тысяч шаблона с f нет.
; 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}

Соответственно нужно добавить что-то типа
_[n]um:1XXXf => num:${SAY:0:1}f, digits/thousand, num:${SAY:1}
......

"Отетовот"
digits/grn${IF($[$[$[${SAY}%10]=1]....
отвечает за проговаривание "гривня" в нужном склонении: "гривня", "гривни", "гривень"