Balabolka (Text-To-Speech)

Balabolka

Balabolka는 텍스트 음성 변환(Text-To-Speech, TTS) 프로그램입니다. 당신의 시스템에 설치된 모든 컴퓨터 목소리는 Balabolka로 이용할 수 있습니다. 당신의 시스템에 있는 모든 일반 텍스트 문서는 "파일 | 열기" 메뉴를 통해 읽기 및 편집을 위해 열 수 있습니다. 새로운 문서를 만들기 위해, 단순히 "파일"메뉴에서 "새 문서"를 선택하십시오.

스피치는 Balabolka 상단의 도구 모음에서 발견되는 표준 소리 내어 읽기-일시 정지-정지 버튼을 사용하여 제어할 수 있습니다. 이 프로그램은 클립보드의 내용을 읽을 수 있고, AZW, AZW3, CHM, DjVu (DjVu+OCR), DOC, DOCX, EML, EPUB, FB2 (FB2.ZIP, FBZ), FB3, HTML, LIT, MD, MOBI, ODP, ODS, ODT, PDB, PDF, PPT, PPTX, PRC, RTF, TCR, WPD, XLS 및 XLSX 파일에서 텍스트를 볼 수 있으며, 글꼴 및 배경색 사용자 정의, 시스템 트레이에서 또는 글로벌 단축키로 읽기를 제어할 수 있습니다.

화면 위의 텍스트는 "파일" 메뉴에서 "파일 | 오디오 파일로 저장" 또는 "파일 | 오디오 파일로 분할 및 변환"을 선택하여 WAV, MP3, MP4, OGG, OPUS 또는 WMA 파일로 저장할 수 있습니다.

Balabolka는 외부의 LRC 파일이나 오디오 파일 내부 MP3 태그의 동기화된 텍스트를 저장할 수 있습니다. 오디오 파일이 컴퓨터의 플레이어 또는 현대의 디지털 오디오 플레이어로 재생하면, 텍스트가 동시(동일 방식으로, 노래 가사처럼)에 표시됩니다.

이 프로그램은 마이크로소프트 스피치 API (SAPI)의 다양한 버전을 사용할 수 있습니다. 이것은 목소리의 매개 변수, 포함하고 있는 속도와 음성 조절을 할 수 있습니다.

사용자는 목소리의 발음의 품질을 향상시키기 위해 특별한 대체 목록을(replacement list) 적용할 수 있습니다. 이 특징은 당신이 단어 또는 분리 음절의 단어를 바꿀 때 도움이 됩니다. Balabolka는 2 종류의 대체 목록을 사용합니다:

  • 발음 수정을 위한 규칙은 정규 표현식(regular expressions)의 문법을 사용하는 *.rex 확장자을 가진 파일에 저장할 수 있습니다;
  • *.dic 확장자을 가진 파일; 이 포맷은 동유럽에서 대중적입니다; 규칙의 문법(syntax of rules)이 간단해서, 파일은 수천의 규칙을 포함할 수 있습니다.

발음 수정을 위한 파일은 Documents\Balabolka (또는 Windows XP의 My Documents\Balabolka) 폴더에 저장됩니다. 만약 어떤 사전이 사용된다면, 프로그램은 읽는 동안 모든 문장이나 단락를 강조 표시합니다; 그렇지 않으면, 현재의 단어가 강조 표시됩니다.

참고. 포터블 버전에서는 발음 수정을 위한 파일이 Dictionaries 하위 폴더에 위치합니다.

* Balabolka는 러시아 단어이며, "수다쟁이, 지저귀는새" 등으로 번역될 수 있습니다.

WWW: balabolka.site

E-mail: crossa@list.ru

ⓒ2006-2020 Ilya Morozov


음성(목소리)

스피치 응용 프로그래밍 인터페이스(Speech Application Programming Interface) 또는 SAPI는 Windows 응용 프로그램 안에서 음성 합성의 사용을 허용하기 위해 마이크로소프트에서 개발되었습니다. 2가지 주요 SAPI 버전(SAPI 4와 SAPI 5)이 있으며, 서로 간에 호환되지 않습니다.

SAPI 4 (Microsoft Speech API 4.0)

All voices for SAPI 4 became obsolete; they are not recommended for installing anymore. Use the fresh versions of speech engines.

SAPI 5 (Microsoft Speech API 5.x)

더 좋은 음성 품질을 얻기 위해, 당신은 Acapela Group, Cepstral 또는 IVONA를 구입할 수 있습니다. 그들은 대형 음성 데이터베이스를 사용 TTS 엔진의 새로운 세대이며 음성 품질이 우수합니다.

고품질 상업용 음성:

  • Acapela Group (demo)
  • Alfanum (demo)
  • Cepstral (demo)
  • IVONA (demo)
  • Nuance/Cerence (demo)
  • Voiceware (demo)

Microsoft Speech Platform

The Microsoft Speech Platform allows developers to build and deploy Text-to-Speech applications. The Microsoft Speech Platform consists of a Runtime, and Runtime Languages (engines for speech recognition and text-to-speech). There are separate Runtime Languages for speech recognition and speech synthesis. The version of the Runtime Languages must match the version of the Speech Platform that you installed.

Use the following steps to install the Microsoft Speech Platform:

  1. Download and install the Speech Platform Runtime
    (the file 'x86_SpeechPlatformRuntime\SpeechPlatformRuntime.msi').
  2. Download and install Runtime Languages for use with the Speech Platform
    (files with names starting with 'MSSpeech_TTS_').

The Microsoft Speech Platform (version 11.0) provides support for 26 languages for speech synthesis. XML tags can be used both for SAPI 5 and Speech Platform.


명령줄(Command Line)

Balabolka 명령줄에서 매개 변수를 허용합니다:

balabolka.exe [-options] [filename] [audio_file] [voice]

매개 변수 voice는 다음 방식으로 정의해야 합니다:

voice_name [rRate] [pPitch]

filename
파일 열기

-c
클립보드 소리내어 읽기

-c voice_name
음성 선택 및 클립보드 소리내어 읽기

-m
최소화 실행

-r filename
파일 열기 및 처음부터 소리내어 읽기

-r filename voice_name
파일 열기, 음성 선택 및 처음부터 소리내어 읽기

-s filename audio_file
파일 열기 및 오디오 파일(WAV, MP3, MP4, OGG 또는 WMA)로 텍스트 읽기

-s filename audio_file voice_name
파일 열기, 음성 선택 및 오디오 파일로 텍스트 읽기

-q
읽기가 끝나면 종료

목소리의 이름은 한 단어로 정의할 수 있습니다; 예를 들면: Peter. 이 프로그램은 목소리(SAPI 5 and SAPI 4)의 목록에서 해당 이름을 선택합니다.

몇 가지 옵션은 한 번에 설정할 수 있습니다:

-rm filename
최소화 실행 및 지정된 파일 읽기

-rq filename
지정된 파일 읽기 및 읽기가 끝나면 종료

예를 들면:

balabolka.exe book.txt

balabolka.exe book.txt "Cepstral Callie"

balabolka.exe -rmq book.txt

balabolka.exe -sq "c:\my books\book.txt" "c:\my files\book.wav"

balabolka.exe -r "c:\text\book.txt" Peter r180 p85

balabolka.exe -c "VW Kate"

명령줄에서 텍스트 파일의 이름을 지정하지 않는 경우, 읽을 텍스트 라인, 당신은 옵션에 특별한 수정자를 포함하고 있어야 합니다:

-n [text_line]
이 매개 변수는 명령줄에 파일명 대신 텍스트의 줄을 포함한 것을 의미합니다.

예를 들면:

balabolka.exe -n "Example of text."

balabolka.exe -rn "The program will read this text." Emily

balabolka.exe -snq "This text will be saved to an audio file." "c:\my files\book.mp3"


맞춤법 검사

Balabolka는 맞춤법 검사를 위해 맞춤법 검사 엔진 일반 스펠러 API (CSAPI)를 구현합니다. CSAPI는 맞춤법 검사를 포함하는 모든 마이크로소프트 응용 프로그램을 사용하기 위해 설계되었습니다. CSAPI는 현재 많은 판매자에 의해 제공되고 Microsoft Office 97/2000 및 많은 다른 응용 프로그램에서 사용됩니다. CSAPICSAPI 엔진은 Balabolka 설치 패키지의 일부로서 선적되지 않지만, Microsoft Office가 설치되어 있다면, Balabolka는 자동적으로 CSAPI의 존재를 탐지하고 그것을 사용합니다.

설명 편집의 창에 있는 동안, 당신은 맞춤법 검사기 메뉴를 사용할 수 있습니다. 강조 표시된 단어에 오른쪽 클릭으로 팝업 메뉴를 표시하고, 맞춤법에 대한 제안 목록에서 올바른 단어를 선택할 수 있습니다. 또는, 사용자 사전에 단어를 추가하기 위해 사전에 단어 추가를 선택합니다. 만약 맞춤법이 틀린 단어가 맞춤법 사전에 올바른 제안이 없다면, 팝업 메뉴에 아무런 제안이 표시되지 않습니다.

또한 맞춤법 검사 대화 상자를 사용하여 텍스트를 확인하는 것도 가능합니다 (메뉴 항목 "텍스트 | 맞춤법 검사"를 클릭하십시오). 다음은 맞춤법 검사 대화 상자 버튼의 설명입니다:

  • 변경 - 현재 단어를 "제안" 필드에서 가져온 올바른 단어로 변경합니다.
  • 모두 변경 - 설명에 선택된 단어의 모든 발생을 "제안" 필드에서 가져온 올바른 단어로 변경합니다.
  • 무시 - 현재 단어를 변경하지 않고 생략하고 맞춤법이 틀린 다음 단어로 갑니다.
  • 모두 무시 - 설명에 현재 단어의 모든 발생을 변경하지 않고 생략하고 맞춤법이 틀린 다음 단어로 갑니다. 이 단어는 이후에 전체 현재 Balabolka 세션 중에 맞춤법이 올바른지 취급됩니다.
  • 추가 - 사용자 사전에 현재 단어를 추가합니다.

A "사용자 사전"은 텍스트 형태로 단어의 설정을 가진 파일이며, *.dic 확장자를 가지고 있습니다. 사용자 사전의 주요 목적은 사용자가 맞춤법 검사를 위해 지정 단어를 추가할 수 있도록 합니다. Microsoft Office 97/2000은 사용자 사전을 여기 보관합니다: c:\Program Files\Common Files\Microsoft Shared\Proof\custom.dic.

Balabolka는 맞춤법 검사를 위해 두 가지 언어를 정의할 수 있습니다 (체크 박스 2차 언어). 이 경우는 맞춤법 검사 대화 상자는 비활성화됩니다; 당신은 맞춤법 검사기 메뉴만을 사용할 수 있습니다.

Balabolka는 Hunspell (hunspell.github.io)을 사용할 수 있습니다. Hunspell는 OpenOffice.org와 Mozilla Firefox의 기본 맞춤법 검사기입니다.

Windows용 맞춤법 검사기 사전은 Balabolka의 웹 사이트에서 다운로드할 수 있습니다.

The application allows to use the spell checking built in operating system. The Spell Checking API is available beginning with the Windows 8.


텍스트 찾기 및 바꾸기

The program allows to search for text in the current document and replace it with different text. Most of special codes from Microsoft Word are supported for the non-printing characters (codes are case-sensitive):

^p
Paragraph mark
^t
Tab character
^nnn
ASCII character (where nnn is the character code)
^0 nnn
ANSI character (where 0 is zero and nnn is the character code)
^U nnnnn
Unicode character (where nnnnn is the character code)
^+
Em dash ( � )
^=
En dash ( � )
^^
Caret character
^s
Nonbreaking space
^?
Any character (in the Find what box only)
^#
Any digit (in the Find what box only)
^$
Any letter (in the Find what box only)
^c
Microsoft Windows Clipboard contents (in the Replace with box only)
^&
Contents of the Find what box (in the Replace with box only)


질문과 답

"OLE error 80045042" 오류 메시지가 나타납니다. 이것은 무슨 뜻입니까?

이 오류의 의미: "XML 구문 분석기가 잘못된 구문 때문에 실패했습니다." 당신은 텍스트 안에 있는 XML 태그의 구문을 확인해야 합니다. 아니면, 텍스트의 일부가 XML 태그의 시작처럼 보이며, 그것이 SAPI를 혼란시킬 수 있습니다. 만약 당신이 XML 태그를 사용하고 싶지 않다면, 텍스트에서 "<" and ">" 기호를 제거하십시오 (또는 "less than"과 "greater than" 단어를 서로 변경하십시오).

SAPI 4는 어디에서 받을 수 있습니까?

SAPI 4 목소리를 사용하려면, 재배포 가능 마이크로소프트 Speech API 파일을 다운로드 및 설치하십시오 (824 KB). 또한, 당신은 마이크로소프트 Speech Control Panel(스피치 제어판) (840 KB)을 다운로드하고 설치할 수 있습니다; 스피치 제어판은 당신의 시스템에 설치된 텍스트 음성 변환(text-to-speech) 엔진 호환 목록을 만들고 사용자 설정을 사용자 요구에 맞추도록 제어판에 아이콘을 추가할 수 있습니다.

SAPI 5는 어디에서 받을 수 있습니까?

Windows XP (이후 버전)에서는 SAPI 5가 함께 제공됩니다.

어떻게 텍스트 음성 변환(text-to-speech) 목소리가 컴퓨터에 설치되었는지 알 수 있습니까?

당신은 컴퓨터의 제어판 -> 음성 -> 음성 속성 -> 텍스트 음성 변환 -> 음성 선택을 실행하여 사용 가능한 모든 목소리를 볼 수 있습니다.

내 컴퓨터는 2개의 사운드 카드를 가지고 있습니다. 나는 어떻게 텍스트 음성 변환 재생을 위한 오디오 장치를 선택할 수 있습니까?

당신은 Windows의 제어판에서 음성을 선택하여 음성 속성 대화 상자에서 오디오 출력 버튼을 누르십시오. 또한, Balabolka는 목소리 설정 패널에 오디오 출력 버튼을 가지고 있습니다(SAPI 5에 한함).

어떻게 Balabolka를 자동설치할 수 있습니까?

Balabolka 를 대화 없이 자동 모드로 설치하시려면 자동 설치(silent installation)를 사용하시면 됩니다다. 자동 설치는 -silent 명령 줄 스위치를 사용해서 할 수 있습니다.

내 컴퓨터는 64비트 버전의 Windows를 실행합니다. 나는 마이크로소프트 스피치 플랫폼(Microsoft Speech Platform)과 한국어 목소리 Heami용 64비트 런타임 패키지를 설치했습니다. 하지만 사용가능한 음성 목록이 여전히 비어 있습니다. 어디에 문제가 있습니까?

Balabolka 는 32-비트 응용 프로그램입니다. 당신은 마이크로소프트 스피치 플랫폼용 32비트 런타임 패키지를 또한 설치해야 합니다.

구글 텍스트 음성 변환(Google Text-To-Speech)이 무엇입니까?

구글 번역(Google Translate)에 텍스트를 음성으로 변환시켜 주는 “Listen”버튼이 있습니다. 이 버튼을 누르면 브라우저가MP3 파일을 다운로드하기 시작합니다. 이 서비스는 100개의 부호보다 짧은 음성 텍스트 변환을 지원합니다. Balabolka 를 사용하시면 커다란 텍스트를 작은 부분으로 나누어서 각 부분에 대한 오디오 파일을 만든 후 그것들을 하나로 합칠 수 있습니다(WAV, MP3 및 OGG 포맷을 지원합니다).

저는 자막을 오디오 파일로 변환시키기 위해 음성 eSpeak을 사용합니다. 그런데 결과 오디오 파일에 쉼이 전혀 없는 대화가 들어 있습니다. 어디에 문제가 있습니까?

자막 변환을 위해서 eSpeak을 사용하시지 말 것을 강력히 권해 드립니다. 이 음성은 XML 태그 "silence"를 지원하지 않습니다. 동일한 문제가 일부 다른 음성의 구버전에도 있습니다. 최신 버전의 상업용 소프트웨어(Cepstral, CereProc, IVONA, 등)를 사용하실 것을 권장해드립니다.

목소리가 언제나 "공백"을 두고 말하고, 텍스트가 아닌 깨는 공백(ALT+0160)을 가지고 있을 경우. 이것을 어떻게 해결합니까?

프로그램은 읽는 동안 자동적으로 깨는 공백을 일반적인 공백으로 바꿀 수 있습니다. 주요 메뉴 항목 "옵션 | 설정"에서, 창 "설정"("읽기" 탭)의 읽는 동안에 문자 무시 확인란을 선택합니다. 무시 기호의 목록에 깨는 공백을 추가: ALT 키를 누른 채 숫자 키패드에서 "0160"을 입력하십시오.

Windows 10 has the new voice Microsoft Heami Mobile, but it is not available in text-to-speech software. Is it possible to unlock the new voice?

By default, the Microsoft mobile voice is locked for using in text-to-speech software via SAPI 5. You can unlock it with a simple registry tweak. Download the archive, extract the file for your language and for your version of the operating system ("mobile_x86.reg" for 32bit and "mobile_x64.reg" for 64bit), click the right mouse button on the file's name and choose the context menu item "Merge". The Microsoft mobile voice will appear in the list of the available voices in Balabolka.

How do I change a voice during reading aloud?

Use the XML tags. It is recommended to write the opening and closing tags inside the same paragraph. For example:

<voice required="Name=Microsoft Zira Desktop">Hello, how are you?</voice>
<voice required="Name=IVONA 2 Amy">I am good.</voice>

Can I use media files generated with Balabolka in YouTube videos?

Balabolka is freeware, so you may create audio files for free. But if you use the commercial voices, you need to contact the developers of the voice and purchase the license for commercial use/audio broadcast. The audio distribution license will allow you to use speech in YouTube videos.

For example, the information from the Cepstral web-site: "Cepstral Personal voices are for personal use only and are NOT licensed for audio distribution. This means the audio you create is for your use only and cannot be shared with others or used in videos, presentations, or webpages. If you are interested in an audio distribution license, please contact sales."


Using Replacement Lists

Replacement Rules

Panel of Dictionaries

The application allows to use a special text file with replacement rules ("dictionary"), to improve pronunciation of words. Each line of the file contains one substitution rule. Rules can be regular expressions (filenames with extension *.rex) or templates (filenames with extension *.dic).

When the user tells the program to read the text aloud, Balabolka checks against the dictionary what words in the text require correction of pronunciation, and applies the respective substitution rule from the dictionary. The altered text is sent to computer voice clipboard, and the voice reads the text aloud.

In order to see the list of dictionaries used by the program, select menu item "View | Show | Panel of Dictionaries" or press F11. On the right of the main window, list of filenames will be displayed; it is divided into two parts:

  • top part - files with replacement lists;
  • bottom part - files with lists of homographs (heteronyms).

Different computer voices can use different replacement lists. The user can select necessary files from the list.

In order to create a new dictionary, right-click on dictionaries panel and in context menu select "New" and then type filename of the new dictionary. The file will be created on disk, and its name will appear in the list on the panel.

If the user wants to make changes to the replacement list, he should select the necessary file from the list and click "Edit". This will open a window for editing replacement list. To add a new replacement rule it is necessary to fill in "Read this:" and "like this:" fields, then click "Add". After the editing process is finished, click "Save" and exit the editor.

General List of Rules

If several filenames from the list are selected, rules from these dictionaries are automatically merged by the application into a single list stored in computer's memory. To see this list, right-click on dictionaries panel and select "Show List" from popup menu.

When the rules from different files are united into a shared list, it happens as follows:

  • rules from *.rex files are added one after another, as they are located within the vocabulary; the files are processed in alphabetical order.
  • all rules of the *.dic files are sorted in such a way that first come case-sensitive rules, then non-case-sensitive rules, then the rules are sorted again by template length - those with the longest symbols pattern are placed closer to the top.

Order of rules in the list is important in cases where several rules can be applied to the same word in the text. Balabolka performs the replacement sequentially, that is, the second rule will be applied to the text that has already been changed by the first rule in the list. In this case, rules order is important.

Rules from files with *.rex extension will be applied to the text first. In order to check result of applying rules from changes lists to the text in the current document, you can use options from main menu "Options | Pronunciation Correction | View Changed Text" and "Options | Pronunciation Correction | Replacement Statistics".

Additional Tools

To find a pair of rules that influence the same text, you must select menu item "Options | Pronunciation Correction | Find Pairs of Rules". This will allow finding the rules that shall never be used because another rule has already modified this expression in the text.

Most frequently correction is required for pronunciation of people's names, places names, animals’ nicknames, names of organizations, etc. Searching for these words in the current document can be facilitated by means of main menu item "Options | Pronunciation Correction | Find Names in Text". Balabolka makes it possible to view three lists of found words:

  • names (words that always start with a capital letter in the current document);
  • all words with initial capital letter;
  • all words found in document text.

As you move through the list of words, the application will automatically read the word aloud. If a word is read incorrectly, you can correct pronunciation, adding a new rule to the dictionary. List of the found names can be sorted either alphabetically or by frequency of the word use in the text. Also, you can disable showing words that appear in the text only several times; this will speed up checking the list of names found in the current document.

Profiles

Current dictionaries panel settings can be stored in the form of "profiles". To create and edit profiles, use menu item "Options | Pronunciation Correction | Profiles".


발음 수정이 있는 REX 파일

각 줄에서, 문자의 두 번째 설정은 문자의 첫 번째 설정에 대한 음성의 발음을 대신합니다. 그것들이 표시되는 대체 순서대로 발생하는 것을 유의하십시오. 예를 들어, 이 두 줄:

rat=mouse
mouse=hamster

rat becomes hamster. This may not be what was intended.

Comment lines start with the pound sign (#) and are ignored.

왼쪽 문자열은 정규 표현식 패턴을 포함할 수 있습니다. 정규 표현식 패턴은 대소문자를 구분합니다. 만약 당신이 대소문자 구분 패턴을 정의하려면, 줄의 처음에 "@" 기호를 추가해야 합니다; 예를 들면:

@DOT=Department of Transport

아래는 사용할 수있는 문자와 시퀀스입니다.

문자 | 설명
\ | Marks the next character as either a special character or a literal. For example, "n" matches the character "n". "\n" matches a newline character. The sequence "\\" matches "\" and "\(" matches "(".
^ | Matches the beginning of input.
$ | Matches the end of input.
* | Matches the preceding character zero or more times. For example, "zo*" matches either "z" or "zoo".
+ | Matches the preceding character one or more times. For example, "zo+" matches "zoo" but not "z".
? | Matches the preceding character zero or one time. For example, "a?ve?" matches the "ve" in "never".
. | Matches any single character except a newline character.
(pattern) | Matches pattern and remembers the match. The matched substring can be retrieved using the special character $N, where N is the Nth parenthetical statement in the regular expression. To match parentheses characters ( ), use "\(" or "\)".
x|y | Matches either x or y. For example, "z|food" matches "z" or "food". "(z|f)oo" matches "zoo" or "foo".
{n} | n is a nonnegative integer. Matches exactly n times. For example, "o{2}" does not match the "o" in "Bob," but matches the first two o's in "foooood".
{n,} | n is a nonnegative integer. Matches at least n times. For example, "o{2,}" does not match the "o" in "Bob" and matches all the o's in "foooood." "o{1,}" is equivalent to "o+". "o{0,}" is equivalent to "o*".
{n,m} | m and n are nonnegative integers. Matches at least n and at most m times. For example, "o{1,3}" matches the first three o's in "fooooood." "o{0,1}" is equivalent to "o?".
[xyz] | A character set. Matches any one of the enclosed characters. For example, "[abc]" matches the "a" in "plain".
[^xyz] | A negative character set. Matches any character not enclosed. For example, "[^abc]" matches the "p" in "plain".
[a-z] | A range of characters. Matches any character in the specified range. For example, "[a-z]" matches any lowercase alphabetic character in the range "a" through "z".
[^m-z] | A negative range characters. Matches any character not in the specified range. For example, "[m-z]" matches any character not in the range "m" through "z".
\b | Matches a word boundary, that is, the position between a word and a space. For example, "er\b" matches the "er" in "never" but not the "er" in "verb".
\B | Matches a nonword boundary. "ea*r\B" matches the "ear" in "never early".
\d | Matches a digit character. Equivalent to [0-9].
\D | Matches a nondigit character. Equivalent to [^0-9].
\f | Matches a form-feed character.
\n | Matches a newline character.
\r | Matches a carriage return character.
\s | Matches any white space including space, tab, form-feed, etc. Equivalent to "[ \f\n\r\t\v]".
\S | Matches any nonwhite space character. Equivalent to "[^ \f\n\r\t\v]".
\t | Matches a tab character.
\v | Matches a vertical tab character.
\w | Matches any word character including underscore. Equivalent to "[A-Za-z0-9_]".
\W | Matches any nonword character. Equivalent to "[^A-Za-z0-9_]".
\num | Matches num, where num is a positive integer. A reference back to remembered matches. For example, "(.)\1" matches two consecutive identical characters.
\n | Matches n, where n is an octal escape value. Octal escape values must be 1, 2, or 3 digits long. For example, "\11" and "\011" both match a tab character. "\0011" is the equivalent of "\001" & "1". Octal escape values must not exceed 256. If they do, only the first two digits comprise the expression. Allows ASCII codes to be used in regular expressions.
\xn | Matches n, where n is a hexadecimal escape value. Hexadecimal escape values must be exactly two digits long. For example, "\x41" matches "A". Allows ASCII codes to be used in regular expressions.
\x{n} | Matches n, where n is a hexadecimal escape value. Hexadecimal escape values must be exactly four digits long. For example, "\x{00dc}" matches "Ü". Allows Unicode codes to be used in regular expressions.

Balabolka supports the special operators for text converting to uppercase or lowercase.

Operator | Description
\U | Converts all following chars to the next \L or \E to uppercase.
\L | Converts all following chars to the next \U or \E to lowercase.
\E | Turns off case conversion.
\u | Converts the next character to uppercase.
\l | Converts the next character to lowercase.

For example, the expression:

(test)=\U$1\E

will convert "test" to "TEST".


발음 수정을 가진 DIC 파일

각 줄에서, 두 번째 문자 설정은 첫째 문자 설정 음성의 발음을 대신합니다. 설명 줄은 샵(#) 기호로 시작하고 무시됩니다.

패턴은 대소문자를 구분합니다. 만약 대소문자 구분 패턴을 정의하고 싶다면, 당신은 줄 시작 부분에 "$" 기호를 추가해야 합니다. 예를 들면:

$DOT=Department of Transport

기본적으로, 패턴은 모든 단어(또는 몇 단어)에 일치합니다. 만약 패턴 앞 또는 뒤에 어떤 문자가 있다면, "*" 기호가 사용됩니다. 예를 들면:

auto*=avto

이 패턴 "autobiography", "autocatalysis", "autogenesis" 등은 일치합니다. 2개의 연속 특수 기호("#", "*", "=", "$")는 단일 문자로 표시합니다; 예를 들면:

**=asterisk


동형이의어

Homographs(동형이의어) 또는 homograms라고 불리는, 몇몇의 단어는, 어쩌면 TTS 시스템에서 가장 어려운 문제를 일으킬 수 있습니다. 동형이의어는 같은 방식의 철자가 있지만 일반적으로 발음과 의미가 다릅니다 (예: fair, lives). 단어 lives (생명, 삶)를 문장에서 예를 들면 "Three lives were lost (셋이 생명을 잃었다)"와 "One lives to eat(하나는 먹기 위해 산다)"는 다르게 발음합니다. 몇몇의 단어, 예를 들면 lead (리드, 안내하다)는, 동사나 명사로서, 두 명사의 감각 사이에서 서로 다른 발음을 사용하게 됩니다 (He followed her lead (그는 그녀의 리드를 따랐다) / He covered the hull with lead (그는 선체를 리드로 덮었다)). 이런 일종의 몇 가지 의미론적인 정보가 단어의 정확한 발음을 달성하기 위해 필요합니다.

또한 어떤 단어의 발음은 문맥상 효과 때문에 달라질 수 있습니다. 이것은 끝 과 시작 문구를 비교하면 쉽게 알 수 있습니다. the의 발음은 다음 나오는 단어의 초기 음소에 의존합니다. 복합 단어는 또한 문제가 있습니다. 예를 들면 'mother (어머니)와 hothouse (온실)의 'th' 문자는 다르게 발음됩니다. 어떤 소리가 또한 유성음이 되거나 다른 문맥에서 무성음이 될 수 있습니다. 예를 들면, 음소 /s/는 단어 dogs에서 유성음이 되지만, 단어 cats에서 무성음입니다.

Heteronyms(동철 이음 이의어)는 동형이의어의 일종입니다. 그것은 같은 철자이지만 의미그리고 발음에 차이가 있는 단어입니다. 모든 동철 이음 이의어는 또한 동형이의어이지만, 모든 동형이의어가 동철 이음 이의어인 것은 아닙니다. 다른 것이 완전히 관련 없는 한, 많은 동철 이음 이의어가 비슷한 의미(특별히 관련 명사와 동사의 철자가 동일하지만 발음이 다른)입니다.

특히 그것이 다른 언어에서 빌려 질 경우, 알맞은 이름을 위해 정확한 발음을 찾는 것이 일반적으로 모든 TTS 시스템을 위한 가장 어려운 작업 중의 하나입니다. 몇몇의 일반적인 이름, Nice와 Begin 같이, 제목 및 단일 텍스트를, 문장 처음 위치를 포함하여, 대문자 표기 문장에서 모호할 때가 있습니다. 예를 들면, 문장 Nice is a nice place (니스는 좋은 장소이다)는 매우 문제가 있기 때문에 단어 Nice는 /niis/ 또는 /nais/로 발음할 수 있습니다. Leicester와 Arkansas 같이, 몇몇의 이름과 장소는 또한 특별한 발음을 가지고 있습니다. 정확한 발음을 위해, 이러한 종류의 단어는 특정한 예외 사전에 포함시킬 수 있습니다 (*.hmg 확장자를 가진 파일, 예를 들면 English.hmg).

각 행에서, 두 번째 문자 설정은 첫 번째 문자 설정을 위해 음성의 발음 대체를 가지고 있으며, 쉼표로 열거됩니다. 예를 들면:

lead=leed,led

패턴은 대소문자를 구분합니다. 만약 당신이 대소문자 구분 패턴을 정의하려면, 줄의 처음에 "$" 기호를 추가하여야 합니다:

$Nice=Niis,Nais

이 프로그램 Balabolka는 각 동형이의어를 위한 표현의 목록을 추가할 수 있습니다 (동형이의어의 편집기에서 탭 "동형이의어가 있는 표현"); 이러한 표현은 동형이의어의 검색 중 자동으로 대체됩니다 (기본 메뉴 항목 "텍스트 | 동형이의어 찾기"). 예를 들면:

close=close,cloze

too close=close
to close his eyes=cloze

만약 대소문자 구분을 표현하려면, 당신은 텍스트의 처음에 "$" 기호를 추가하여야 합니다:

$Nice=Niis,Nais

$city Nice=Niis
nice to have=nais

임의 문자 기호 "*" 문자가 어떤 단어를 대신하거나 단어 안에서 몇 글자 대신 사용할 수 있습니다 (처음 또는 단어의 끝에):

close=close,cloze

to close * eyes=cloze


컨트롤 태그 (SAPI 4)

이 섹션은 텍스트 음성 변환(text-to-speech) 번역의 작시법을 향상시키기 위해 소스 텍스트에 포함할 수 있는 컨트롤 태그에 대해 설명합니다:

  • Syntax
  • Conventions
  • Chr
  • Com
  • Ctx (some speech engines may not support this tag)
  • Dem (new for SAPI 4.0 -- some speech engines may not support this tag)
  • Emp (some speech engines may not support this tag)
  • Eng
  • Mrk
  • Pau
  • Pit
  • Pra (new for SAPI 4.0 -- some speech engines may not support this tag)
  • Prn (some speech engines may not support this tag)
  • Pro (some speech engines may not support this tag)
  • Prt (some speech engines may not support this tag)
  • RmS (new for SAPI 4.0 -- some speech engines may not support this tag)
  • RmW (new for SAPI 4.0 -- some speech engines may not support this tag)
  • RPit (new for SAPI 4.0 -- some speech engines may not support this tag)
  • RPrn (new for SAPI 4.0 -- some speech engines may not support this tag)
  • RSpd (new for SAPI 4.0 -- some speech engines may not support this tag)
  • Rst (new for SAPI 4.0)
  • Spd
  • Vce (some speech engines may not support this tag)
  • Vol

A text-to-speech engine can usually translate individual words to speech successfully. However, as soon as the engine speaks a sentence, the perceived quality of its translation decreases because the engine cannot correctly synthesize human prosody -- the inflection, accent, and timing of human speech.

The prosody of translated speech can be improved by using text-to-speech control tags to better simulate human speech.

This section describes control tags that you can use to alter the prosody of text translated into speech. All tags are optional except the bookmark (Mrk) tag, which must be supported.

Syntax

Text-to-speech control tags follow these general rules of syntax:

  • All tags begin and end with a backslash character (\).
  • The backslash character is not allowed within a tag.
  • An odd number of backslash characters in tagged text produce undefined behavior in the engine.
  • Tags are case-insensitive. For example, \vce\ is the same as \VCE\.
  • Tags are white-space -- dependent. For example, \Rst\ is not the same as \ Rst \.

To include a backslash character in tagged text, but outside a tag, use a double backslash (\\).

If the application has the tagged text bit on and wishes to speak a filename, such as "c:\windows\system\test.txt", then it should double up the backslashes (e.g., "c:\\windows\\system\\test.txt").

Samples:

  • code\ ctx="e-mail" \ - Should be parsed as an "e-mail" tag.
  • \ctx="e-mail" - Should be ignored since it's an unclosed tag at the end of a document.
  • \\ctx="e-mail"\\ - Speaks "back-slash c t x equals e-mail back-slash"
  • \\\\\\\\ctx="e-mail"\\\\\\\\ - Speaks "backslash backslash backslash backslash c t x equals e-mail backslash backslash backslash backslash"
  • \ctm="e-mail"\ - Ignored because it's an unknown tag.

When the text-to-speech engine encounters a tag it does not understand, the tag is ignored.

Conventions

This section uses the following typographic conventions.

Example | Description
Chr | Bold type indicates speech-inflection keywords.
string | Italic indicates placeholders for information you supply, such as a character or context string.
[[option]] | Double square brackets indicate items that are optional.
[[option...]] | Three dots (an ellipsis) following an item indicate that more items having the same form may appear.
"C" | Quotation marks are required to delimit strings.

Chr

\Chr=string[[,string...]]\

Sets the character of the voice.

Example: \Chr="Angry"\

Parameter | Description
string | String that specifies the characteristics of the voice.

The default characteristic is "Normal," which produces a normal tone of voice. Although the Chr tag is less specific than setting the inflection, stress, attack, and whispering qualities individually, it is easier to use and allows the engine more flexibility and intelligence in its response.

Several characteristics can be specified in the same tag, separated by commas. Depending on its capabilities, an engine may not support all of the characteristics listed here, or it may support additional characteristics. Some common characteristics are the following:

"Angry"
"Business"
"Calm"
"Depressed"
"Excited"
"Falsetto"
"Happy"
"Loud"
"Monotone"
"Perky"
"Quiet"
"Sarcastic"
"Scared"
"Shout"
"Tense"
"Whisper"

Com

\Com=string\

Embeds a comment in the text. Comments are not translated into speech.

Example: \com="This is a comment."\

Parameter | Description
string | Text of the comment.

Ctx

\Ctx=string\
Note: Some speech engines may not support this tag.

Sets the context for the text that follows, which determines how symbols are spoken.

Example: \ctx="Unknown"\

Parameter | Description
string | String that specifies the context.

This parameter can be one of these strings:

Context string | Description
"Address" | Addresses and/or phone numbers
"C" | Code in the C or C++ programming language
"Document" | Text document
"E-Mail" | Electronic mail
"Numbers" | Numbers, dates, times, and so on
"Spreadsheet" | Spreadsheet document
"Unknown" | Context is unknown (default)
"Normal" | Normal/default speech mode.

Dem

\Dem\
Note: Some speech engines may not support this tag.

De-emphasizes the next word.

Emp

\Emp\
Note: Some speech engines may not support this tag.

Emphasizes the next word to be spoken.

Example: the \Emp\truth, the \Emp\whole truth, and nothing \Emp\but the truth.

Eng

\Eng;GUID:command\
\Eng:command\

Embeds an engine-specific command that affects only the engine with the specified globally unique identifier (GUID). Subsequent engine-specific tags for that engine can omit the GUID until an engine-specific tag for a different engine is used.

Parameter | Description
GUID | Globally unique identifier of the engine.
command | Engine-specific command.

Mrk

\Mrk=number\

Indicates a bookmark in the text.

Example: \Mrk=75000\

Parameter | Description
number | Number of the bookmark.

The Mrk tag accepts a decimal representation. Bookmark number zero (\Mrk=0\) is reserved.

Pau

\Pau=number\

Pauses speech for the specified number of milliseconds.

Example: \Pau=1000\

Parameter | Description
number | Number of milliseconds to pause.

Pit

\Pit=number\

Sets the baseline pitch of the text-to-speech mode to the specified value in hertz.

Example: \Pit=90\

Parameter | Description
number | Pitch, in hertz.

The actual pitch fluctuates above and below this baseline.

Pra

\Pra=value\
Note: Some speech engines may not support this tag.

Sets the pitch range.

Parameter | Description
value | Pitch range in Hz.

Prn

\Prn=text=pronunciation\
Note: Some speech engines may not support this tag.

Indicates how to pronounce text by passing the phonetic equivalent to the engine.

Example: \Prn=tomato=tomaato\

Parameter | Description
text | Text to pronounce.
pronunciation | Phonetic equivalent for pronouncing the text.

Using the Prn tag without specifying the word pronunciation (\Prn=text\) will undo the changes to the pronunciation; that is, it will return the word to the original pronunciation.

This tag is valid only for engines that support the International Phonetic Alphabet. The engine should continue to use this pronunciation for the current text-to-speech mode and should store the pronunciation in its lexicon for later use. If a lexicon entry already exists for a particular word, the Prn tag should be ignored for that word.

Pro

\Pro=number\
Note: Some speech engines may not support this tag.

Activates and deactivates prosodic rules, which affect pitch, speaking rate, and volume of words independently of control tags embedded in the text. Prosodic rules are applied by the engine.

Example: \Pro=0\

Parameter | Description
number | Number that indicates whether to activate or deactivate prosodic rules. Setting number to 1, the default, activates prosodic rules. Setting number to 0 deactivates prosodic rules.

Prt

\Prt=string\
Note: Some speech engines may not support this tag.

Indicates the part of speech of the next word.

Example: \prt="Abbr"\

Parameter | Description
string | String that indicates the part of speech.

This parameter can be one of these strings:

String | Description
"Abbr" | Abbreviation
"Adj" | Adjective
"Adv" | Adverb
"Card" | Cardinal number
"Conj" | Conjunction
"Cont" | Contraction
"Det" | Determiner
"Interj" | Interjection
"N" | Noun
"Ord" | Ordinal number
"Prep" | Preposition
"Pron" | Pronoun
"Prop" | Proper noun
"Punct" | Punctuation
"Quant" | Quantifier
"V" | Verb

RmS

\RmS=number\
Note: Some speech engines may not support this tag.

Sets reading mode to spelling out each letter of each word, or turns it off. Not all engines support this tag, so an application can get more consistent results by normalizing the text itself and putting spaces between letters.

Parameter | Description
number | Number that indicates whether to spell out each letter of each word. Setting number to 1 sets reading mode to spelling out each letter of each word. Setting number to 0, the default, turns it off.

RmW

\RmW=number\
Note: Some speech engines may not support this tag.

Sets reading mode to leaving audible pauses between each word, or turns it off. Not all engines support this tag, so an application can get more consistent results by normalizing the text itself and putting periods between words.

Parameter | Description
number | Number that indicates whether to leave audible pauses between each word. Setting number to 1 sets reading mode to leave audible pauses between each word. Setting number to 0, the default, turns it off.

RPit

\RPit=value\
Note: Some speech engines may not support this tag.

Sets the relative pitch.

Parameter | Description
value | Relative pitch. 100 is the default/original for the voice.

RPrn

\RPrn=value\
Note: Some speech engines may not support this tag.

Set the relative pitch range.

Parameter | Description
value | Relative pitch range. 100 is the default/original for the voice.

RSpd

\RSpd=value\
Note: Some speech engines may not support this tag.

Sets the relative speed. 100 is the default/original for the voice.

Parameter | Description
value | Relative speed. 100 is the default/original for the voice.

Rst

\Rst\

Resets the engine to the default settings for the current mode, as though the mode had just been re-created.

Spd

\Spd=number\

Sets the baseline average talking speed of the text-to-speech mode to the specified number of words per minute.

Example: \Spd=120\

Parameter | Description
number | Baseline average talking speed, in words per minute.

Vce

\Vce=charact=value[[,charact=value]]\
Note: Some speech engines may not support this tag.

Instructs the engine to change its speaking voice to one that has the specified characteristics.

Parameter | Description
charact | One of the characteristics listed in the table below.
value | String that specifies the characteristic.

Characteristics are specified in the order of importance. The engine selects a voice that most closely matches the characteristics specified at the beginning of the list.

The charact=value argument can be any of the following:

  • Language=language. Requests the engine speak in the specified language
  • Accent=accent. Requests the engine speak in the specified accent. For example, if language="English" and Accent="French" the engine will speak English with a French accent.
  • Dialect=dialect. Requests the engine speak in the specified dialect
  • Gender=gender. Specifies the gender of the voice: "Male", "Female", or "Neutral".
  • Speaker=speakername. Specifies the name of the voice, or NULL if the name is unimportant
  • Age=age. Specifies the age of the voice, which can be one of the values shown below
  • Style=style. The personality of the voice -- for example: "Business", "Casual", "Computer", "Excited", or "Singsong".
Age string | Description
"Baby" | About 1 year old
"Toddler" | About 3 years old
"Child" | About 6 years old
"Adolescent" | About 14 years old
"Adult" | Between 20 and 60 years old
"Elderly" | Over 60 years old

Vol

\Vol=number\

Sets the baseline speaking volume for the text-to-speech mode.

Example: \Vol=32768\

Parameter | Description
number | Baseline speaking volume.

The volume level is a linear range from 0 for absolute silence to 65535 for the maximum monaural volume. The default is 65535.

If you specify a value greater than 65535, the engine assumes that you want to set the left and right channels separately and converts the value to a double word, using the low word for the left channel and the high word for the right channel. For example, a value of 65536 sets the left channel to the maximum baseline speaking volume and the right channel to the minimum.


XML 태그 (SAPI 5)

SAPI 5 합성 마크업은 텍스트의 음성 합성을 수정하는 텍스트에 삽입된 확장 가능한 마크업 언어 (XML) 태그의 모음입니다. 볼륨 제어 및 단어 강조와 같은 기능을 제공하는, 이러한 XML 태그는, 텍스트에 삽입됩니다. 기본적으로, SAPI XML parser(구문 분석기)는 XML을 자동 감지합니다. 잘못된 XML 구조의 경우, 말하기 오류를 프로그램에 의해 되돌릴 수 있습니다..

Every XML element consists of a start tag <Some_tag> and an end tag </Some_tag> with a case-insensitive tag name and contents between these tags. If the element is empty, it has no contents <Some_tag></Some_tag> and the start tag and the end tag might be the same <Some_tag/>.

SAPI의 텍스트 음성 변환 (TTS) XML 태그는 몇 가지 카테고리로 나누어집니다.

  • 음성 상태 제어
  • 직접 항목 삽입
  • 음성 문맥 제어
  • 음성 선택
  • 사용자 정의 발음

음성 상태 제어 태그

SAPI TTS XML supports five tags that control the state of the current voice: Volume, Rate, Pitch, Emph, and Spell.

Volume

The Volume tag controls the volume of a voice. The tag can be empty, in which case it applies to all subsequent text, or it can have content, in which case it only applies to that content.

The Volume tag has one required attribute: Level. The value of this attribute should be an integer between zero and one hundred. Values outside of this range will be truncated.

<volume level="50"> This text should be spoken at volume level fifty. <volume level="100"> This text should be spoken at volume level one hundred. </volume> </volume>
<volume level="80"/> All text which follows should be spoken at volume level eighty.

One hundred represents the default volume of a voice. Lower values represent percentages of this default. That is, 50 corresponds to 50% of full volume.

Rate

The Rate tag controls the rate of a voice. The tag can be empty, in which case it applies to all subsequent text, or it can have content, in which case it only applies to that content.

The Rate tag has two attributes, Speed and AbsSpeed, one of which must be present. The value of both of these attributes should be an integer between negative ten and ten. Values outside of this range may be truncated by the engine (but are not truncated by SAPI). The AbsSpeed attribute controls the absolute rate of the voice, so a value of ten always corresponds to a value of ten, a value of five always corresponds to a value of five.

<rate absspeed="5"> This text should be spoken at rate five. <rate absspeed="-5"> This text should be spoken at rate negative five. </rate> </rate>
<rate absspeed="10"/> All text which follows should be spoken at rate ten.

The Speed attribute controls the relative rate of the voice. The absolute value is found by adding each Speed to the current absolute value.

<rate speed="5"> This text should be spoken at rate five. <rate speed="-5"> This text should be spoken at rate zero. </rate> </rate>

Zero represents the default rate of a voice, with positive values being faster and negative values being slower.

Pitch

The Pitch tag controls the pitch of a voice. The tag can be empty, in which case it applies to all subsequent text, or it can have content, in which case it only applies to that content.

The Pitch tag has two attributes, Middle and AbsMiddle, one of which must be present. The value of both of these attributes should be an integer between negative ten and ten. Values outside of this range may be truncated by the engine (but are not truncated by SAPI).

The AbsMiddle attribute controls the absolute pitch of the voice, so a value of ten always corresponds to a value of ten, a value of five always corresponds to a value of five.

<pitch absmiddle="5"> This text should be spoken at pitch five. <pitch absmiddle="-5"> This text should be spoken at pitch negative five. </pitch> </pitch>
<pitch absmiddle="10"/> All text which follows should be spoken at pitch ten.

The Middle attribute controls the relative pitch of the voice. The absolute value is found by adding each Middle to the current absolute value.

<pitch middle="5"> This text should be spoken at pitch five. <pitch middle="-5"> This text should be spoken at pitch zero. </pitch> </pitch>

Zero represents the default middle pitch for a voice, with positive values being higher and negative values being lower.

Emph

The Emph tag instructs the voice to emphasize a word or section of text. The Emph tag cannot be empty. The following word should be emphasized.

<emph> boo </emph>!

The method of emphasis may vary from voice to voice.

Spell

The Spell tag forces the voice to spell out all text, rather than using its default word and sentence breaking rules, normalization rules, and so forth. All characters should be expanded to corresponding words (including punctuation, numbers, and so forth). The Spell tag cannot be empty.

<spell> These words should be spelled out. </spell>
These words should not be spelled out.

직접 항목 삽입 태그

Three tags are supported that applications the ability to insert items directly at some level: Silence, Pron, and Bookmark.

Silence

The Silence tag inserts a specified number of milliseconds of silence into the output audio stream. This tag must be empty, and must have one attribute, Msec.

Five hundred milliseconds of silence <silence msec="500"/> just occurred.

Pron

The Pron tag inserts a specified pronunciation. The voice will process the sequence of phonemes exactly as they are specified. This tag can be empty, or it can have content. If it does have content, it will be interpreted as providing the pronunciation for the enclosed text. That is, the enclosed text will not be processed as it normally would be.

The Pron tag has one attribute, Sym, whose value is a string of white space separated phonemes.

<pron sym="h eh l l ow & w er l l d "/>
<pron sym="h eh l l ow & w er l l d"> hello world </pron>

Bookmark

The Bookmark tag inserts a bookmark event into the output audio stream. Use this event to signal the application when the audio corresponding to the text at the Bookmark tag has been reached. The Bookmark tag must be empty.

The Bookmark tag has one attribute, Mark, whose value is a string. This value can then be used to differentiate between bookmark events (each of which will contain the string value from their corresponding tag).

The application will receive an event here,

<bookmark mark="bookmark_one"/>

and another one here

<bookmark mark="bookmark_two"/>

음성 문맥 제어 태그

Two tags provide context to the current voice: PartOfSp and Context. Those tags enable the voice to determine how to deal with the text it is processing. With both of these tags, the extent to which voices use the context may vary.

PartOfSp

The PartOfSp tag provides the voice with the part of speech of the enclosed word(s). Use this tag to enable the voice to pronounce a word with multiple pronunciations correctly depending on its part of speech. The PartOfSp tag cannot be empty.

The PartOfSp tag has one attribute, Part, which takes a string corresponding to a SAPI part of speech as its attribute. Only SAPI defined parts of speech are supported - "Unknown", "Noun", "Verb", "Modifier", "Function", "Interjection".

<partofsp part="noun"> A </partofsp> is the first letter of the alphabet.

Did you <partofsp part="verb"> record </partofsp> that <partofsp part="noun"> record </partofsp>?

Context

The Context tag provides the voice with information which the voice may then use to determine how to normalize special items, like dates, numbers, and currency. Use this tag to enable the voice to distinguish between confusable date formats (see the example, below). The Context tag cannot be empty.

The Context tag has one attribute, Id, which takes a string corresponding to the context of the enclosed text. Several contexts are defined by SAPI and are more likely to be recognized by SAPI compliant voices, but any string may be used. See documentation for a particular voice for more details.

<context id="date_mdy"> 03/04/01 </context> should be March fourth, two thousand one.
<context id="date_dmy"> 03/04/01 </context> should be April third, two thousand one.
<context id="date_ymd"> 03/04/01 </context> should be April first, two thousand three.

음성 선택 태그

There are two tags which can be used (potentially) to change the current voice: Voice and Lang.

Voice

The Voice tag selects a voice based on its attributes, Age, Gender, Language, Name, Vendor, and VendorPreferred. The tag can be empty, in which case it changes the voice for all subsequent text, or it can have content, in which case it only changes the voice for that content.

The Voice tag has two attributes: Required and Optional. The attributes of the current voice are always added as optional attributes when the Voice tag is used. This means that, a voice which is more similar to the current voice will be selected over one which is less similar.

If no voice is found that matches all of the required attributes, no voice change will occur.

The default voice should speak this sentence. <voice required="Gender=Female;Age!=Child"> A female non-child should speak this sentence, if one exists. <voice required="Age=Teen"> A teen should speak this sentence - if a female, non-child teen is present, she will be selected over a male teen, for example. </voice> </voice>

Lang

The Lang tag selects a voice based solely on its Language attribute. The tag can be empty, in which case it changes the voice for all subsequent text; or it can have content, in which case it only changes the voice for that content.

The Lang tag has one attribute, LangId. This attribute should be a LANGID, such as 409 (U.S. English), 411 (Japanese) or 412 (Korean). Note that these numbers are hexadecimal, but without the typical "0x".

The Lang tag is a shortened version of the Voice tag with the Required attribute containing "Language=xxx". So the following examples should produce exactly the same results:

<voice required="Language=409"> A U.S. English voice should speak this. </voice>
<lang langid="409"> A U.S. English voice should speak this. </lang>

사용자 정의 발음

An alternative to using the <P> tag with the DISP and PRON attributes is to use custom pronunciation. Using custom pronunciation, tags in the form of the following.

<P DISP="disp" PRON="pron">word</P>

can be written as

<P>/disp/word/pron;</P>

More specifically, if you want to recognize the word hello only when it is pronounced as ah and display greeting when recognized, you would normally use something like the following.

<P DISP="greeting" PRON="ah">hello</P>

Using custom pronunciation, the above would translate to the following.

<P>/greeting/hello/ah;</P>


Context Tag Definitions (SAPI 5)

The XML CONTEXT tag specifies the normalization of a block of text. This specification defines the SAPI predefined attributes (ID) for the CONTEXT tag. These IDs are strings. SAPI does not perform any parameter validation on the string passed to the engine, hence, the application can specify engine-specific normalization IDs to the engine. Engine-specific strings begin with the engine vendor's name to avoid confusion between engines.

For example:

<context id="My_Context"> text </context>

The exact implementation of some of these values is dependent on the engine used in SAPI 5. In order to force a certain normalization, application developers can choose to normalize the text, or use another SAPI tag or engine-specific ID. Each context tag can contain more than one string.

For example:

<context id="date_mdy"> 12/21/99 11/21/99 10/21/99 </context>

would be normalized to "December twenty first nineteen ninety nine November twenty first nineteen ninety nine October twenty first nineteen ninety nine."

The following predefined context types are supported:

  • Date
  • Time
  • Number
  • Web
  • E-mail
  • Address

Date

This context specifies that the number passed to the engine is a date. Dates will generally have the format of number [delimiter] number [delimiter] number or number [delimiter] number where the delimiter can be a '.', '/' or '-', and numbers are typically between 01 and 12 for months, 01 and 31 for days. A year is generally a two or four-digit number.

The following are valid string types:

date_mdy

This will normalize the date so that the first group of numbers is the month, the second group is the day, and the third group is the year. In the case where the year is a two-digit number, the engine reads it as a two-digit number or a four-digit number.

For example:

<context id="date_mdy">12/21/99</context>

will be normalized to "December twenty first ninety nine"
or "December twenty first nineteen ninety nine"

<context id="date_mdy">12/21/1999</context>

will be normalized to "December twenty first nineteen ninety nine"

date_dmy

This will normalize the date so that the first group of numbers is the day, the second group is the month, and the third group is the year. In the case where the year is a two-digit number, the engine reads it as a two-digit number. If the year is represented as a four-digit number, it is represented as a four-digit year.

For example:

<context id="date_dmy">21.12.99</context>

will be normalized to "December twenty first ninety nine"
or "December twenty first nineteen ninety nine"

<context id="date_dmy">21-12-1999</context>

will be normalized to "December twenty first nineteen ninety nine"

date_ymd

This will normalize the date so that the first group of numbers is the year, the second group is the month, and the third group is the day. In the case where the year is a two-digit number, the engine reads it as a two-digit number. If the year is represented as a four-digit number, it is represented as a four-digit year.

For example:

<context id="date_ymd">99-12-21</context>

will be normalized to "December twenty first ninety nine"
or "December twenty first nineteen ninety nine"

<context id="date_ymd">1999.12.21</context>

will be normalized to "December twenty first nineteen ninety nine"

date_ym

This will normalize the date so that the first group of numbers is the year, and the second group is the month. In the case where the year is a two-digit number, the engine reads it as a two-digit number. If the year is represented as a four-digit number, it is represented as a four-digit year.

For example:

<context id="date_ym">99-12</context>

will be normalized to "December ninety nine"
or "December nineteen ninety nine"

<context id="date_ym">1999.12</context>

will be normalized to "December nineteen ninety nine"

date_my

This will normalize the date so that the first group of numbers is the month, and the second group is the year. In the case where the year is a two-digit number, the engine reads it as a two-digit number. If the year is represented as a four-digit number, it is represented as a four-digit year.

For example:

<context id="date_my">12/99</context>

will be normalized to "December ninety nine"
or "December nineteen ninety nine"

<context id="date_my">12/1999</context>

will be normalized to "December nineteen ninety nine"

date_dm

This will normalize the date so that the first group of numbers is the day and the second group is the month.

For example:

<context id="date_dm">21.12</context>

will be normalized to "December twenty first"

date_md

This will normalize the date so that the first group of numbers is the month and the second group is the day.

For example:

<context id="date_md">12/21</context>

will be normalized to "December twenty first"

date_year

This will normalize the date so that the number is read as a year.

For example:

<context id="date_year">1999</context>

will be normalized to "nineteen ninety nine"

<context id="date_year">2001</context>

will be normalized to "Two thousand one"

chs_date_ymdhm

The text specifying the date is normalized so that the first group of numbers is the year, the second group is the month, the third group is the day, the fourth group is the hour and the fifth group is the minute. In the case where the year is a two-digit number, the engine reads it as a two-digit number. If the year is represented as a four-digit number, it is represented as a four-digit year. The text format for time needs to specify the hour as a number between 00 and 23 (in case of with PM/AM before, between 01 and 12), and the minute as a number between 01 and 59.

This is a Chinese specific context tag.

Time

This context specifies that the number passed to the engine is a time. Times will generally have the format of number [delimiter] number [delimiter] number or number [delimiter] number where the delimiter is ':' or ' ' ' or ' " ' and numbers are typically between 01 and 24 for hours, 01 and 59 for minutes and seconds.

When a zero is present in numbers between 01 and 09, the engine can ignore this, or normalize it as "oh". The engine can place an "and" in the normalized time.

time

For example:

<context id="time">12:30</context>

will be normalized to "twelve thirty"

<context id="time">01:21</context>

is normalized as "one twenty one"
or "oh one twenty one"

<context id="time">1'21"</context>

is normalized as "one minute twenty one seconds"
or "one minute and twenty one seconds"

chs_time_hms

The text specifying the time is normalized so that the first group of numbers is the hour, the second group is the minute and the third group is the second.

This is a Chinese engine specific context tag.

chs_time_hm

The text specifying the time is normalized so that the first group of numbers is the hour and the second group is the minute.

This is a Chinese engine specific context tag.

Number

number_cardinal

The text is normalized as a number using the regular format of ones, tens, etc. The engine can place "and" in the normalized text.

For example:

<context id="number_cardinal">3432</context>

will be normalized to "three thousand four hundred thirty two"

<context id="number_cardinal">3432</context>

will be normalized to "three thousand four hundred and thirty two"

number_digit

The text is normalized digit by digit.

For example:

<context id="number_digit">3432</context>

will be normalized to "three four three two"

number_fraction

The text is normalized as a fraction.

For example:

<context id="number_fraction">3/15</context>

will be normalized to "three fifteenths" or "three over fifteen"

number_decimal

The text is normalized as a decimal value.

For example:

<context id="number_decimal">423.1243</context>

will be normalized to "four hundred and twenty three point one two four three"

phone_number

The text is normalized as a phone number. The exact implementation of this is left to the engine developer and may be defined in a future release of SAPI.

currency

The text is normalized as a currency. The exact implementation of this is left to the engine developer and may be defined in a future release of SAPI.

For example:

<context id="currency">$34.90</context>

will be normalized to "thirty four dollars and ninety cents"

chs_number_percentage

The text is normalized as a percentage value.

This is a Chinese engine specific context tag.

chs_number_scientific

The text is normalized as a scientific value.

This is a Chinese engine specific context tag.

chs_phone_postal

The phone number and address postal is almost the same as that of number_cardinal; the only difference is that "1" is read as "yao1".

This is a Chinese engine specific context tag.

Web

The text is normalized as a URL. The exact implementation of this is left to the engine developer and may be defined in a future release of SAPI.

web_url

For example:

<context id="web_url">www.Microsoft.com</context>

will be normalized to "w w w dot Microsoft dot com"

E-mail

The text is normalized as e-mail. The exact implementation of this is left to the engine developer and may be defined in a future release of SAPI.

e-mail_address

The text is normalized as an e-mail address. The exact implementation of this is left to the engine developer and may be defined in a future release of SAPI.

For example:

<context id="e-mail_address">someone@microsoft.com</context>

will be normalized to "Someone at Microsoft dot com"

Address

The text is normalized as an address. The exact implementation of this is left to the engine developer and may be defined in a future release of SAPI.

address

For example:

<context id="address">One Microsoft Way, Redmond, WA, 98052</context>

will be normalized to "One Microsoft Way Redmond Washington nine eight zero five two"

address_postal

The text is normalized as a postal address. The exact implementation of this is left to the engine developer and may be defined in a future release of SAPI.

For example:

<context id="address_postal">A2C 4X5</context>

will be normalized to "A 2 C 4 X 5"


Universal Tags

It is recommended to use the control tags for SAPI 4 and the XML tags for SAPI 5 and Microsoft Speech Platform. But in addition Balabolka supports its own universal tags to modify the speech synthesis.

Audio

Balabolka는 문서의 텍스트에 외부 오디오 파일(오디오 클립)의 링크를 추가할 수 있습니다. 주 메뉴 항목의 "텍스트 | 오디오 클립"을 사용하여 오디오 파일명을 선택하십시오. 지원되는 포맷: WAV, MP3, OGG.

오디오 클립 태그는 다음과 같이 표시됩니다:

{{Audio=C:\Sounds\ring.wav}}

또한 오디오 클립에 대한 상대 경로가 허용됩니다. 상대 경로는 현재 문서와 관련된 파일의 위치입니다:

{{Audio=..\My Sounds\ring.mp3}}

소리 내어 읽는 동안, Balabolka는 오디오 클립 태그에 도달하면 잠시 멈추어, 오디오 클립을 재생하고 다시 소리내어 읽기를 계속합니다. 오디오 파일로 변환할 때, 오디오 클립은 프로그램으로 만들어지는 오디오 파일에 포함됩니다.

Voice

If it is necessary to change a voice or its properties during reading aloud, a special tag can be used for SAPI 5 and Microsoft Speech Platform (SAPI 4 voices will ignore this tag).

The tag format:

{{Voice=Name;Rate;Pitch;Volume}}

  • Name - the name of a voice (one word or the part of a word is enough);
  • Rate - the rate of a voice (values range from -10 to 10);
  • Pitch - the pitch of a voice (values range from -10 to 10);
  • Volume - the volume (values range from 0 to 100).

A tag applies to all subsequent text. The values are separated by semicolons. For example:

This text will be spoken by the default voice of Balabolka. {{Voice=Kimberly;0;0;100}} The voice 'Kimberly' will read the other text.

The tag's content is case insensitive. Values for some properties can be omitted:

{{voice=eric;;;50}}

{{Voice=Hans;-1}}

{{Voice=Rachel}}

To return to the default voice, use this tag:

{{Voice=}}

Warning! It is impossible to switch between SAPI 5 voices and voices of the Microsoft Speech Platform.

Pause

A specified number of milliseconds of silence can be inserted into the output audio file. For example:

One hundred twenty milliseconds of silence {{Pause=120}} just occurred.


Phonetic Alphabets

A phonetic alphabet contains combinations of letters, numbers, and characters which are known as "phones". A phone represents a discrete sound in a spoken language. Phones are used to create phonetic spellings that determine how a word should be pronounced to be spoken. Speech engines support three phonetic alphabets:

  • International Phonetic Alphabet (IPA)
  • Speech API (SAPI) Phone Set
  • Universal Phone Set (UPS)

International Phonetic Alphabet is a system of phonetic notation based primarily on the Latin alphabet, devised as a standardized representation of the sounds of spoken language. You can use this phonetic alphabet to specify pronunciations for any language.

The first languages created by Microsoft for text-to-speech on computers specified pronunciations of words using the SAPI Phone Set. A phone consists of one or more characters from a phonetic alphabet that describe a discreet sound in a spoken language. The following languages use the SAPI Phone Set to describe the sounds of each language: Chinese, English, French, German, Japanese, Spanish.

More recently, Microsoft developed the Universal Phone Set, a machine-readable phonetic alphabet that is based on the International Phonetic Alphabet. UPS is a more powerful phonetic alphabet than the SAPI Phone Set, can be used to describe the sounds of any new language, and is easier to map to other machine-readable phonetic alphabets such as X-SAMPA, SAMPA or ASCII-IPA.

The user creates the pronunciation using the XML PRON tag. For example, here are two phonetic spellings that a speech engine can use to speak the word "hello" in US English:

<pron sym="h eh - l ow 1"/>

<pron sym="H EH S1 L O"/>

The first example uses phones from the SAPI phone set. The "1" is a stress symbol that indicates which syllable should be accented. The phones are space-delimited, and the "-" separates the syllables in the word. The second example uses phones from the Universal Phone Set. The letters indicate the spoken segments that make up the word. The "S1" is a stress symbol that indicates which syllable should be accented.

The current versions of IVONA voices do not support SAPI phonemes. The PRON tag is ignored. It is recommended to use the Speech Synthesis Markup Language (SSML) tag to provide a phonetic pronunciation for the specific text.

<phoneme alphabet="ipa" ph="təˈmeɪtoʊ">tomato</phoneme>

The PHONEME tag can be shortened:

<phoneme alphabet="ipa" ph="pəˈteɪtoʊ"/>

The SSML tag supports phonetic alphabets:

  • International Phonetic Alphabet (IPA)
  • Extended Speech Assessment Methods Phonetic Alphabet (X-SAMPA)

IPA symbols are difficult to enter from the keyboard. Balabolka allows to choose characters from the list of IPA symbols. Also the application can convert words to IPA symbols. The phonetic transcriptions are supported for languages:

  • English
  • French
  • German
  • Italian
  • Polish
  • Portuguese
  • Russian
  • Spanish
  • Turkish
  • Ukrainian

Text should be written in lower case; the capital vowels can be used to indicate a primary stress in words.


SAPI Phone Set

Microsoft Speech API uses a phonetic alphabet to express speech in phonemes. A phonetic alphabet defines all the phonemes which are used by a language, together with their properties and the data for their production as sounds. Users can create pronunciations for words that are not currently in the lexicon by using the phonemes represented in the following tables. The phoneme set is composed of a symbolic phonetic representation (SYM).

The user will be able to enter the SYM representation to create the pronunciation using the XML PRON tag. Each phoneme entry should be space delimited.

Example. Pronunciation for "hello":

<pron sym="h eh l ow"/>

For improved accuracy, the primary (1), secondary (2) stress markers, and the syllabic markers (-) can be added to the pronunciation.

Example. Pronunciation for "hello" using the primary stress (1) and the syllabic marker (-):

<pron sym="h eh - l ow 1"/>

SAPI Phone Set used for the following languages:

  • English (United States)
  • French
  • German
  • Italian
  • Spanish
  • Chinese
  • Japanese

US English Phonemes

Phoneme Symbol | Example | Transcription
1 | Primary stress |
2 | Secondary stress |
- | Syllable boundary (hyphen) |
& | Word boundary |
! | Sentence terminator (exclamation mark) |
, | Sentence terminator (comma) |
. | Sentence terminator (period) |
? | Sentence terminator (question mark) |
_ | Silence (underscore) |
aa | father | f aa 1 dh er
ae | cat | k ae 1 t
ah | but | b ah 1 t
ao | bought | b ao 1 t
aw | house | h aw 1 s
ax | about | ax b aw 1 t
ay | bite | b ay 1 t
b | book | b uh 1 k
ch | catch | k eh 1 ch
d | done | d ah 1 n
dh | breathe | b r i dh
eh | bet | b eh 1 t
er | bird | b er 1 d
ey | ate | ey 1 t
e@ | fairly | f e@ 1 l i
f | fog | f ao 1 g
g | good | g uh 1 d
h | hello | h eh l ow 1
ih | bit | b ih 1 t
iy | beat | b iy 1 t
i@ | here | h i@ 1
jh | jump | jh ah 1 mp
k | cat | k ae 1 t
l | lot | l aa 1 t
m | Mom | m aa 1 m
n | nod | n aa 1 d
ng | sing | s ih 1 ng
ow | boat | b ow 1 t
oy | boy | b oy 1
p | pot | p aa 1 t
r | rat | r ae 1 t
s | sit | s ih 1 t
sh | shut | sh ah 1 t
t | top | t aa 1 p
th | thick | th ih 1 k
uh | book | b uh 1 k
uw | boot | b uw 1 t
v | various | v eh 1 r i ih s
w | won | w ah 1 n
y | you | y uw 1
z | zoo | z uw 1
zh | casual | k ae 1 zh uw ah l

French Phonemes

Phoneme Symbol | Example | Transcription
1 | Primary stress |
2 | Secondary stress |
- | Syllable boundary (hyphen) |
& | Word boundary |
! | Sentence terminator (exclamation mark) |
, | Sentence terminator (comma) |
. | Sentence terminator (period) |
? | Sentence terminator (question mark) |
_ | Silence (underscore) |
a | patte | p a 1 t
aan | abandon | a b aan d aon 1
ao | comme | k ao 1 m
aon | bon | b aon 1
ax | le | l ax 1
b | bouche | b u 1 sh
ch | charlie | ch a 1 r l i
d | dame | d a 1 m
dz | jeudi | j oe dz i 1
e | marché | m a r sh e 1
eh | chère | sh eh 1 r
ehn | main | m ehn 1
eo | feu | f eo 1
f | fille | f i 1 j
g | garde | g a 1 r d
i | libre | l i 1 b r
j | pierre | p j e 1 r
jh | George | jh ao 1 r jh
k | chique | sh i k
l | langage | l aan g a 1 zh
m | mois | m w a 1
n | nonne | n ao 1 n
ng | shopping | sh ao p i 1 ng
nj | campagne | k aan p a 1 nj
o | animaux | a n i m o 1
oe | leur | l oe 1 r
oen | parfum | p a r f oen 1
p | pile | p i 1 l
q | hacher | q a sh e 1
r | route | r u t
s | adresser | a d r e s e 1
sh | chaise | sh eh 1 z
t | technique | t eh k n i 1 k
ts | énergétique | e n eh r zh e ts i 1 k
u | doux | d u 1
ue | une | ue 1 n
uh | Bush | b uh 1 sh
v | vive | v i 1 v
w | boire | b w a 1 r
yw | huile | yw i 1 l
z | zone | z ao 1 n
zh | juste | zh ue 1 s t

German Phonemes

Phoneme Symbol | Example | Transcription
1 | Primary stress |
2 | Secondary stress |
- | Syllable boundary (hyphen) |
& | Word boundary |
! | Sentence terminator (exclamation mark) |
, | Sentence terminator (comma) |
. | Sentence terminator (period) |
? | Sentence terminator (question mark) |
_ | Silence (underscore) |
a | Achtung | q a 1 x t uh ng
A | Name | n A 1 m ah
aan | Chance | sh aan 1 s ah
ah | bitte | b ih 1 t ah
ao | Hoffnung | h ao 1 f n uh ng
aon | Pompon | p aon 1 p aon 1
aw | Raum | rq aw 1 m
ay | Zeit | ts ay 1 t
b | besonders | b ah z ao 1 n d e@ s
c | China | c i 1 n A
ch | deutsch | d oy 1 ch
d | das | d a 1 s
e | mehr | m e 1 r
eh | Enkel | q eh 1 ng k el
EH | erklären | q eh r k l EH 1 rq en
ehn | Bassin | b a s ehn 1
el | Einzelnen | q ay 1 n ts el n en
em | einem | q ay 1 n em
en | einen | q ay 1 n en
er | Surfer | s er 1 f e@
ey | Display | d ih s p l ey 1
e@ | Kindern | k ih 1 n d e@ n
f | Fall | f a 1 l
g | glaube | g l aw 1 b ah
h | Haupt | h aw 1 p t
i | sieben | z i 1 b en
ih | immer | q ih 1 m e@
j | ja | j A 1
jh | Dschungel | jh uh 1 ng el
k | Kultur | k uh l t u 1 r
l | lieber | l i 1 b e@
m | mein | m ay 1 n
n | Name | n A 1 m ah
ng | Junge | j uh 1 ng ah
o | oder | q o 1 d e@
oe | öffnete | q oe 1 f n ah t ah
OE | Österreich | q OE 1 s t ah rq ay c
oen | Parfum | p a r f oen 1
oy | Europa | q oy rq o 1 p A
p | Parlament | p a r l a m eh 1 n t
pf | Pflicht | pf l ih 1 c t
q | aber | q A 1 b e@
r | Berliner | b eh r l i 1 n e@
rq | Runde | rq uh 1 n d ah
s | Szene | s ts e 1 n ah
sh | sprach | sh p rq A 1 x
t | tol | t ao 1 l
ts | Zimmer | ts ih 1 m e@
u | Uhren | q u 1 rq en
ue | hübsch | h ue 1 p sh
UE | über | q UE 1 b e@
uh | Schutz | sh uh 1 ts
v | wichtig | v ih 1 c t ih c
w | Mademoiselle | m a d ah m w a z eh 1 l
x | Buch | b u 1 x
z | selbst | z eh 1 l p s t
zh | Spionage | sh p i o n A 1 zh ah

Italian Phonemes

Phoneme Symbol | Example | Transcription
1 | Primary stress |
2 | Secondary stress |
- | Syllable boundary (hyphen) |
& | Word boundary |
! | Sentence terminator (exclamation mark) |
, | Sentence terminator (comma) |
. | Sentence terminator (period) |
? | Sentence terminator (question mark) |
_ | Silence (underscore) |
a | campo | k a 1 m p o
ao | nove | n ao 1 v e
b | barra | b a 1 rr a
ch | percento | p e r ch eh 1 n t o
d | mondo | m o 1 n d o
dz | zeta | dz eh 1 t a
e | venire | v e n i 1 r e
eh | lento | l eh 1 n t o
f | fine | f i 1 n e
g | gruppi | g r u 1 p i
i | si | s i
j | funzione | f u n ts j o 1 n e
jh | generazione | jh e n e r a ts j o 1 n e
k | economia | e k o n o m i 1 a
l | libri | l i 1 b r i
ll | gli | ll i
m | mai | m a 1 i
n | nord | n ao r d
nj | signor | s i 1 nj ao r
o | otto | ao 1 t t o
p | primo | p r i 1 m o
r | arrivederci | a rr i v e d e 1 r ch i
rr | arrivederci | a rr i v e d e 1 r ch i
s | sinistra | s i n i 1 s t r a
sh | scienza | sh eh 1 n ts a
t | tre | t r eh
ts | grazie | g r a 1 ts j e
u | punto | p u 1 n t o
v | venti | v e 1 n t i
w | Washington | w a 1 sh i ng t o n
z | svolta | z v o 1 l t a

Spanish Phonemes

Phoneme Symbol | Example | Transcription
1 | Primary stress |
2 | Secondary stress |
- | Syllable boundary (hyphen) |
& | Word boundary |
! | Sentence terminator (exclamation mark) |
, | Sentence terminator (comma) |
. | Sentence terminator (period) |
? | Sentence terminator (question mark) |
_ | Silence (underscore) |
a | aquí | a k i 1
b | Brasil | b r a s i 1 l
ch | Chile | ch i 1 l e
d | grande | g r a 1 n d e
e | este | e 1 s t e
f | función | f u n s xi o 1 n
g | segundo | s e g u 1 n d o
i | identidad | i d e n t i d a 1 d
j | yo | j o 1
k | casa | k a 1 s a
l | los | l o 1 s
ll | llamada | ll a m a 1 d a
m | manos | m a 1 n o s
n | no | n o 1
nj | año | a 1 nj o
o | bueno | b xu e 1 n o
p | para | p a 1 r a
r | para | p a 1 r a
rr | radio | rr a 1 d xi o
s | solo | s o 1 l o
sh | Bush | b u 1 sh
t | importante | i m p o r t a 1 n t e
u | uno | u 1 n o
w | Hollywood | o 1 l i w u d
x | general | x e n e r a 1 l
xi | iogur | xi o g u 1 r
xu | puedo | p xu e 1 d o

Chinese Phonemes

Phoneme Symbol | Example
- | Syllable boundary (hyphen)
! | Sentence terminator (exclamation mark)
& | Word boundary
, | Sentence terminator (comma)
. | Sentence terminator (period)
? | Sentence terminator (question mark)
_ | Silence (underscore)
+ | Primary stress
* | Secondary stress
1 | Tone 1
2 | Tone 2
3 | Tone 3
4 | Tone 4
5 | Tone 5
a | a 1 fei 1 (rogue)
ai | ai 4 ren 2 (lover)
an | an 1 quan 2 (safe)
ang | ang 1 zang 1 (dirty)
ao | jiao 1 ao 4 (proud)
ba | ba 4 ba 5 (dad)
bai | bai 2 se 4 (white)
ban | mu 4 ban 3 (board)
bang | bang 3 jia 4 (kidnap)
bao | yong 1 bao 4 (embrace)
bei | bei 3 fang 1 (north)
ben | ben 4 dan 4 (fool)
beng | beng 4 tiao 4 (jump)
bi | bi 2 zi 5 (nose)
bian | bian 4 hua 5 (change)
biao | biao 3 ge 2 (table)
bie | li 2 bie 2 (part with)
bin | bin 1 ke 4 (guest)
bing | shi 4 bing 1 (soldier)
bo | bo 2 dou 4 (wrestle)
bu | bu 4 xing 2 (walk)
ca | ca 1 gan 1 (wipe)
cai | cai 1 ce 4 (guess)
can | can 1 jia 1 (join)
cang | cang 1 ying 5 (fly)
cao | cao 1 chang 3 (playground)
ce | ce 4 liang 2 (measure)
cen | cen 1 ci 1 (uneven)
ceng | ceng 2 jing 1 (once)
cha | jian 3 cha 2 (check)
chai | chai 1 hui 3 (demolish)
chan | chan 3 ye 4 (industry)
chang | jing 1 chang 2 (often)
chao | chao 1 yue 4 (exceed)
che | qi 4 che 1 (automobile)
chen | chen 2 jiu 4 (old)
cheng | cheng 2 che 1 (ride)
chi | chi 2 dao 4 (late for)
chong | chong 1 man 3 (full of)
chou | chou 2 hen 4 (hatred)
chu | chu 2 fa 3 (division)
chuai | chuai 3 ce 4 (guess)
chuan | lun 2 chuan 2 (ship)
chuang | chuang 4 ye 4 (carve out)
chui | tie 3 chui 2 (hammer)
chun | chun 1 tian 1 (spring)
chuo | wo 4 chuo 4 (dirty)
ci | ci 2 qi 4 (porcelain)
cong | cong 2 lin 2 (thicket)
cou | jin 3 cou 4 (compact)
cu | cu 4 xiao 1 (sales promotion)
cuan | tao 2 cuan 4 (run away)
cui | cui 1 cu 4 (press)
cun | xiang 1 cun 1 (country)
cuo | cuo 4 wu 4 (error)
da | da 4 (big)
dai | dai 4 biao 3 (delegate)
dan | dan 4 shi 4 (but)
dang | dang 1 ran 2 (sure)
dao | dao 1 (knife)
de | de 5 (function word)
dei | dei 3 (must)
den | den 4 (yank)
deng | ban 3 deng 4 (wooden stool)
di | di 2 que 4 (certainly)
dia | dia 3 (coquetry voice)
dian | dian 3 (dot)
diao | diao 4 (hang)
die | die 1 dao 3 (tumble)
ding | jue 2 ding 4 (decide)
diu | diu 1 qi 4 (discard)
dong | dong 1 fang 1 (east)
dou | zhan 4 dou 4 (struggle)
du | du 4 jue 2 (stop)
duan | duan 3 (short)
dui | dui 4 (right)
dun | ting 2 dun 4 (halt)
duo | duo 1 yu 2 (unnecessary)
e | e 4 (hungry)
ei | ei 4 (yes)
en | en 1 hui 4 (favor)
er | er 3 (ear)
fa | fa 1 zhan 3 (development)
fan | fan 4 (rice)
fang | fang 2 jian 1 (room)
fei | fei 1 (fly)
fen | fen 1 bie 2 (separate)
feng | feng 1 (wind)
fo | fo 2 (buddha)
fou | fou 3 ding 4 (denial)
fu | fu 4 qin 1 (father)
ga | gan 1 ga 4 (awkward)
gai | ying 1 gai 1 (should)
gan | gan 1 jing 4 (neatness)
gang | gang 1 cai 2 (just)
gao | gao 1 (tall)
ge | pin 3 ge 2 (character)
gei | gei 3 yu 3 (give)
gen | gen 1 (root)
geng | geng 4 jia 1 (much more)
gong | gong 1 ren 2 (worker)
gou | zu 2 gou 4 (enough)
gu | gu 4 xiang 1 (hometown)
gua | xi 1 gua 1 (watermelon)
guai | qi 2 guai 4 (oddness)
guan | guan 1 bi 4 (close)
guang | guang 1 (light)
gui | gui 3 (ghost)
gun | gun 4 (stick)
guo | guo 4 qu 4 (past)
ha | ha 1 (sound of laugh)
hai | hai 2 zi 5 (child)
han | chu 1 han 4 (sweat)
hang | hang 2 xing 2 (sail)
hao | hao 3 (good)
he | he 2 (river)
hei | hei 1 (black)
hen | hen 3 (very)
heng | heng 2 xiang 4 (landscape orientation)
hong | hong 2 (red)
hou | hou 2 zi 5 (monkey)
hu | hu 2 xu 1 (beard)
hua | hua 4 (picture)
huai | huai 4 (bad)
huan | huan 2 jing 4 (environment)
huang | huang 2 se 4 (yellow)
hui | hui 1 huang 2 (refulgence)
hun | hun 2 zhuo 2 (muddy)
huo | huo 3 (fire)
ji | ji 2 shi 2 (in time)
jia | jia 4 qi 1 (holiday)
jian | jian 3 dan 1 (simple)
jiang | jiang 1 (river)
jiao | jiao 1 tong 1 (traffic)
jie | jie 2 ri 4 (feast)
jin | jin 3 zhang 1 (strain)
jing | gan 1 jing 4 (neatness)
jiong | jiong 3 po 4 (embarrassed)
jiu | jiu 3 (nine)
ju | ju 4 zi 5 (sentence)
juan | juan 3 qu 1 (curl)
jue | jue 2 ding 4 (decide)
jun | jun 1 dui 4 (army)
ka | ka 3 che 1 (truck)
kai | kai 3 xuan 2 (triumph)
kan | kan 4 (see)
kang | di 3 kang 4 (resist)
kao | kao 3 shi 4 (test)
ke | ke 3 (thirsty)
kei | kei 1 (scold)
ken | ken 3 ding 4 (affirm)
keng | keng 1 hai 4 (entrap)
kong | kong 1 qi 4 (air)
kou | kou 3 (mouth)
ku | jian 1 ku 3 (trial)
kua | kua 1 jiang 3 (praise)
kuai | kuai 4 (fast)
kuan | kuan 1 kuo 4 (openness)
kuang | kong 1 kuang 4 (void)
kui | kui 1 qian 4 (owe)
kun | kun 4 nan 2 (hard)
kuo | kuo 4 da 4 (enlarge)
la | la 4 jiao 1 (hot pepper)
lai | lai 2 (come)
lan | lan 2 se 4 (blue)
lang | lang 2 (wolf)
lao | lao 3 (old)
le | kuai 4 le 4 (happy)
lei | lei 2 (thunder)
leng | leng 3 ku 4 (steeliness)
li | li 2 (pear)
lia | lia 2 (two)
lian | lian 3 (face)
liang | li 4 liang 4 (power)
liao | zuo 2 liao 4 (seasoning)
lie | lin 3 lie 4 (severe)
lin | lin 3 lie 4 (severe)
ling | ling 2 mu 4 (mausoleum)
liu | liu 2 dong 4 (flow)
lo | lo 5 (function word)
long | long 2 (dragon)
lou | lou 4 (leak)
lu | lu 4 di 4 (land)
luan | hun 4 luan 4 (chaos)
lue | ce 4 lue 4 (tactic)
lun | yi 4 lun 4 (discuss)
luo | xia 4 luo 4 (whereabouts)
lv | lv 4 se 4 (green)
ma | ma 3 (horse)
mai | mai 2 zang 4 (bury)
man | man 3 zu 2 (satisfy)
mang | cong 1 mang 2 (hurry)
mao | mao 1 (cat)
me | shen 2 me 5 (what)
mei | mei 2 you 3 (no)
men | wo 3 men 2 (we)
meng | meng 4 (dream)
mi | hun 1 mi 2 (coma)
mian | mian 4 ji 5 (area)
miao | miao 4 (temple)
mie | mie 4 jue 2 (annihilation)
min | ren 2 min 2 (people)
ming | ming 2 bai 2 (clearness)
miu | huang 1 miu 4 (absurd)
mo | mo 4 shui 3 (ink)
mou | mou 2 lue 4 (trick)
mu | mu 4 biao 1 (target)
na | na 4 li 3 (there)
nai | nai 3 nai 5 (grandmother)
nan | nan 2 fang 1 (south)
nang | nang 2 kuo 4 (include)
nao | re 4 nao 4 (liveliness)
ne | mu 4 ne 4 (numb)
nei | nei 4 bu 4 (inside)
nen | nen 4 lv 4 (light green)
neng | neng 2 gou 4 (be capable of)
ni | ni 3 (you)
nian | nian 2 (year)
niang | gu 1 niang 5 (girl)
niao | niao 3 (bird)
nie | nie 4 (bite)
nin | nin 2 (you)
ning | an 1 ning 2 (peace)
niu | niu 2 (bull)
nong | nong 2 min 2 (farmer)
nou | nou 4 (weeding)
nu | nu 3 li 4 (try hard)
nuan | wen 1 nuan 3 (warm)
nue | nue 4 dai 4 (abuse)
nuo | nuo 4 yan 2 (promise)
nv | nv 3 zi 3 (woman)
o | o 5 (function word)
ou | ou 1 yang 2 (Chinese first name)
pa | hai 4 pa 4 (scare)
pai | pai 4 qian 3 (send)
pan | pan 4 tu 2 (betrayer)
pang | pang 2 da 4 (huge)
pao | pao 3 (run)
pei | pei 2 ban 4 (accompany)
pen | pen 2 di 4 (pan)
peng | peng 2 pai 4 (surge)
pi | pi 2 fu 1 (skin)
pian | qi 1 pian 4 (cheat)
piao | piao 4 liang 4 (pretty)
pie | pie 1 kai 1 (put aside)
pin | pin 2 fan 2 (frequency)
ping | ping 2 zi 5 (bottle)
po | po 4 huai 4 (damage)
pou | pou 2 (hold something with cupped hand)
pu | pu 2 tao 5 (grape)
qi | qi 3 qiu 2 (beg)
qia | qia 4 dang 4 (proper)
qian | qian 1 xu 1 (humility)
qiang | qiang 2 da 4 (powerful)
qiao | qiao 3 miao 4 (artifice)
qie | xiu 1 qie 4 (shyness)
qin | qin 1 zi 4 (oneself)
qing | qing 1 song 1 (easy)
qiong | qiong 2 (poverty)
qiu | qiu 2 fan 4 (prisoner)
qu | qu 1 dong 4 (drive)
quan | quan 2 bu 4 (all)
que | que 4 ding 4 (ensure)
qun | qun 2 zhong 4 (crowd)
ran | ran 2 hou 4 (then)
rang | tu 3 rang 3 (soil)
rao | wei 2 rao 4 (surround)
re | re 4 (hot)
ren | ren 2 lei 4 (human being)
reng | reng 2 ran 2 (all the same)
ri | ri 4 chu 1 (sunrise)
rong | rong 2 yao 4 (glory)
rou | niu 2 rou 4 (beef)
ru | ru 2 guo 3 (if)
ruan | rou 2 ruan 3 (soft)
rui | rui 4 zhi 4 (smart)
run | shi 1 run 4 (wetness)
ruo | ruo 4 xiao 3 (puniness)
sa | sa 1 (three)
sai | bi 3 sai 4 (compete)
san | fen 1 san 4 (disperse)
sang | sang 4 (die)
sao | da 3 sao 3 (sweep)
se | yan 2 se 4 (color)
sen | sen 1 lin 2 (forest)
seng | seng 1 lv 3 (monk)
sha | sha 1 chang 3 (battlefield)
shai | ri 4 shai 4 (be exposed to the sun)
shan | shan 4 liang 2 (goodness)
shang | shang 4 mian 4 (top)
shao | shao 4 nian 2 (youth)
she | she 2 (snake)
shei | shei 2 (who)
shen | shen 2 me 5 (what)
sheng | sheng 1 yin 1 (voice)
shi | shi 4 fei 1 (dispute)
shou | shou 3 (hand)
shu | shu 4 mu 4 (tree)
shua | shua 1 zi 5 (brush)
shuai | shuai 1 da 3 (beat)
shuan | men 2 shuan 1 (latch)
shuang | shuang 1 (pair)
shui | shui 3 (water)
shun | shun 4 li 4 (all right)
shuo | shuo 1 (say)
si | si 4 (four)
song | song 4 bie 2 (send-off)
sou | sou 1 cha 2 (search)
su | su 4 du 4 (speed)
suan | suan 4 fa 3 (arithmetic)
sui | sui 1 ran 2 (though)
sun | sun 3 shi 1 (loss)
suo | suo 3 yi 3 (so)
ta | ta 1 men 2 (they)
tai | tai 4 (too)
tan | tan 2 hua 4 (talk)
tang | tang 2 (sugar)
tao | tao 2 pao 3 (flee)
te | te 4 bie 2 (special)
tei | tei 1 (very)
teng | ben 1 teng 2 (riot)
ti | ti 1 zi 5 (ladder)
tian | tian 1 (sky)
tiao | tiao 4 yue 4 (jump)
tie | tie 3 (iron)
ting | ting 1 (listen)
tong | tong 3 yi 1 (unify)
tou | tou 2 (head)
tu | tu 3 di 4 (earth)
tuan | tuan 2 jie 2 (solidify)
tui | tui 1 dong 4 (push)
tun | tun 2 ji 1 (store up)
tuo | tuo 1 yi 1 (undress)
wa | qing 1 wa 1 (frog)
wai | wai 4 mian 4 (outside)
wan | wan 4 (ten thousands)
wang | si 3 wang 2 (death)
wei | wei 3 da 4 (great)
wen | wen 2 hua 4 (culture)
weng | lao 3 weng 1 (oldman)
wo | wo 3 (I)
wu | wu 2 lun 4 (no matter what)
xi | xi 1 fang 1 (west)
xia | xia 4 mian 4 (bottom)
xian | xian 4 zai 4 (now)
xiang | xiang 4 (like)
xiao | xiao 3 (small)
xie | xie 3 (write)
xin | xin 1 (new)
xing | xing 2 dong 4 (act)
xiong | xiong 2 (bear)
xiu | xiu 1 xi 5 (break)
xu | xu 1 yao 4 (need)
xuan | xuan 1 bu 4 (declare)
xue | xue 3 (snow)
xun | xun 2 wen 4 (ask for)
ya | ya 4 zhou 1 (Asia)
yan | yan 4 zi 5 (swallow)
yang | tai 4 yang 2 (sun)
yao | yao 1 qiu 2 (require)
ye | ye 2 ye 5 (grandfather)
yi | yi 1 (one)
yin | yin 1 yue 4 (music)
ying | ying 1 gai 1 (should)
yo | yo 5 (function word)
yong | yong 3 yuan 3 (forever)
you | you 2 yu 2 (due to)
yu | yu 2 (fish)
yuan | yuan 2 lai 2 (formerly)
yue | yue 4 (month)
yun | yun 2 (cloud)
za | za 2 luan 4 (disorder)
zai | zai 4 jian 4 (farewell)
zan | zan 2 men 5 (our)
zang | ang 1 zang 1 (dirty)
zao | zao 3 chen 2 (morning)
ze | ze 2 ren 4 (response)
zei | zei 2 (thief)
zen | zan 4 yang 2 (praise)
zeng | zeng 1 jia 1 (add)
zha | zha 4 dan 4 (bomb)
zhai | qian 4 zhai 4 (owe)
zhan | zhan 4 li 4 (stand)
zhang | zhang 1 kai 1 (open)
zhao | zhao 1 huan 4 (summon)
zhe | zhe 4 li 3 (here)
zhei | zhei 5 (this)
zhen | zhen 1 zheng 4 (real)
zheng | zheng 4 yi 4 (justice)
zhi | yi 4 zhi 4 (restrain)
zhong | zhong 1 guo 2 (China)
zhou | si 4 zhou 1 (around)
zhu | zhu 1 (pig)
zhua | zhua 1 (grab)
zhuai | zhuai 4 (pull)
zhuan | zhuan 1 (brick)
zhuang | zhuang 1 (pretend)
zhui | zhui 1 (chase)
zhun | zhun 3 (precise)
zhuo | zhuo 1 (table)
zi | zi 4 (character)
zong | zong 3 (total)
zou | zou 3 (walk)
zu | zu 1 (rent)
zuan | zuan 4 (diamond)
zui | zui 4 (most)
zun | zun 1 (respect)
zuo | zuo 4 (sit)

Japanese Phonemes (Katakana)

Symbol | Phonetic | Unicode | Remarks
' |  | U+0027 | Accent position
+ |  | U+002B | Accent boundary
| |  | U+007C | Phrase boundary
. |  | U+002E | Sentence end (standard)
? |  | U+003F | Sentence end (interrogative)
! |  | U+0021 | Sentence end (exclamation)
_ |  | U+005F | One mora pause
゜ |  | U+309C | Semi-voiced sound
ァ | a | U+30A1 | Modifier
ア | a | U+30A2 |
ィ | i | U+30A3 | Modifier
イ | i | U+30A4 |
ゥ | u | U+30A5 |
ウ | u | U+30A6 |
ェ | e | U+30A7 | Modifier
エ | e | U+30A8 |
ォ | o | U+30A9 | Modifier
オ | o | U+30AA |
カ | ka | U+30AB |
ガ | ga | U+30AC |
キ | ki | U+30AD |
ギ | gi | U+30AE |
ク | ku | U+30AF |
グ | gu | U+30B0 |
ケ | ke | U+30B1 |
ゲ | ge | U+30B2 |
コ | ko | U+30B3 |
ゴ | go | U+30B4 |
サ | sa | U+30B5 |
ザ | za | U+30B6 |
シ | shi | U+30B7 |
ジ | ji | U+30B8 |
ス | su | U+30B9 |
ズ | zu | U+30BA |
セ | se | U+30BB |
ゼ | ze | U+30BC |
ソ | so | U+30BD |
ゾ | zo | U+30BE |
タ | ta | U+30BF |
ダ | da | U+30C0 |
チ | chi | U+30C1 |
ヂ | di | U+30C2 | Deprecated - use 30B8
ッ | q | U+30C3 |
ツ | tsu | U+30C4 |
ヅ | du | U+30C5 | Deprecated - use 30BA
テ | te | U+30C6 |
デ | de | U+30C7 |
ト | to | U+30C8 |
ド | do | U+30C9 |
ナ | na | U+30CA |
ニ | ni | U+30CB |
ヌ | nu | U+30CC |
ネ | ne | U+30CD |
ノ | no | U+30CE |
ハ | ha | U+30CF |
バ | ba | U+30D0 |
パ | pa | U+30D1 |
ヒ | hi | U+30D2 |
ビ | bi | U+30D3 |
ピ | pi | U+30D4 |
フ | hu | U+30D5 |
ブ | bu | U+30D6 |
プ | pu | U+30D7 |
ヘ | he | U+30D8 |
ベ | be | U+30D9 |
ペ | pe | U+30DA |
ホ | ho | U+30DB |
ボ | bo | U+30DC |
ポ | po | U+30DD |
マ | ma | U+30DE |
ミ | mi | U+30DF |
ム | mu | U+30E0 |
メ | me | U+30E1 |
モ | mo | U+30E2 |
ャ | ya | U+30E3 | Modifier
ヤ | ya | U+30E4 |
ュ | yu | U+30E5 | Modifier
ユ | yu | U+30E6 |
ョ | yo | U+30E7 | Modifier
ヨ | yo | U+30E8 |
ラ | ra | U+30E9 |
リ | ri | U+30EA |
ル | ru | U+30EB |
レ | re | U+30EC |
ロ | ro | U+30ED |
ヮ | wa | U+30EE | Modifier
ワ | wa | U+30EF |
ヰ | wi | U+30F0 | Deprecated - use 30A4
ヱ | we | U+30F1 | Deprecated - use 30A8
ヲ | wo | U+30F2 |
ン | nn | U+30F3 |
ヴ | vu | U+30F4 |
ヵ | ka | U+30F5 |
ヶ | ke | U+30F6 |
ヷ | va | U+30F7 |
ヸ | vi | U+30F8 |
ヹ | ve | U+30F9 |
ヺ | vo | U+30FA |
・ |  | U+30FB | Middle dot
ー |  | U+30FC | Prolonged sound
ヽ |  | U+30FD | Iteration
ヾ |  | U+30FE | Voiced iteration


Universal Phone Set

The Speech API (SAPI) Universal Phone Set (UPS) is a machine-readable phone set that is based on the International Phonetic Alphabet (IPA).

UPS Design Principles

The following design principles were used to select SAPI labels and phone IDs for UPS.

  1. UPS covers the IPA 1993 Unicode character set, plus some extra SAPI phones including some suprasegmental labels that are used in speech synthesis markup but are not found in IPA.
    • In most cases there is a one-to-one mapping between UPS and IPA. In these cases, the SAPI Phone ID can simply use the IPA hex Unicode value.
    • In some cases UPS is a superset of IPA. For example, UPS includes some unique phone labels for commonly used sounds such as diphthongs and nasalized vowels, which the IPA treats as compounds. These compounds are represented using the compounding symbol "+". This symbol is treated just like any other phone, and so must be space delimited in a lexicon: the compound of A and B is written A + B, not AB or A+B. The SAPI Phone IDs of such compounds are formed from the sequence of phone IDs making up the compound.
  2. UPS pronunciations consist of a string of UPS phones, each separated by whitespace. SAPI makes no distinction between segmental phones and diacritics, suprasegmentals, and tones, and so these must also be separated by whitespace like any other SAPI phone.
  3. The UPS phone labels are not restricted to use the SAPI phone labels from US English, Spanish, French, German, Japanese, or Chinese; however, where possible, existing SAPI labels were re-used. Two sets of guidelines were used in creating the phone label names:
    • The UPS phone set reflects orthography where possible but is not biased too heavily towards English.
    • Phone labels adhere to labeling conventions that apply across phonetic classes (e.g., lax vowels use the character 'H' as in 'IH', 'UH' and 'AH').
  4. The UPS phone set is case-sensitive. UPS phone labels are all defined using ASCII character strings.
    • Segmental phones (Consonants, Vowels, Clicks and Ejectives) are represented by upper-case alphabetic symbols. These may vary in length from one to three characters. In general, shorter symbols are used for more frequent phones.
    • Diacritics are represented by three-character, lower-case, alphabetic symbols.
    • Suprasegmentals and Tones may vary in length and contain non-alphabetic characters.

The Universal Phone Set should be used for all Microsoft-supported languages except the seven languages currently supported by SAPI: Chinese, English (United States), French, German, Italian, Japanese, Spanish.

Compound Tying Symbol

UPS provides unique phone labels for common compound sounds such as affricates and nasal vowels. However, less frequent compound sounds may also exist in some languages and need to be represented in SAPI lexicons. The Universal Phone Set provides a compounding or tying symbol “+” that can be used to describe composite sounds from any two phones.

The German affricate "PF", diphthong "AI", and nasal vowel "AN" exist as unique phones in UPS. However, they could also be represented as compounds. The following example shows that "PF" and "P + F" are equivalent and are distinct from the phone sequence "P F".

Unique Phone | Compound
PF | P + F
AI | A + I

The nasal vowel "AN" can be described as the "A" vowel with a nasal diacritic. All diacritics must follow a segmental phone, so "A nas" and "A + nas" are equivalent. The former is preferred, though SAPI does not enforce any particular use of "+" or diacritics.

Unique Phone | Compound
AN | A nas
AN | A + nas

Consonants

This is a listing and cross reference of the consonant phones that are used by the three phonetic alphabets.

UPS Consonant Labeling Conventions

Consonant symbols are one, two, or three characters in length. Single character labels are used for highly frequent, language-universal consonants. In general the first character signifies place plus voicing, and the second signifies manner. Labeling conventions carry across phonetic classes in the following ways:

Conventions for place of articulation and voicing labeling:

  • Dentals and alveloars use D for voiced and T for voiceless
  • Alveolars use N for nasal and R for approximant
  • Labiodentals use V for voiced and F for voiceless
  • Velars use G for voiced and K for voiceless, NG for nasal
  • Bilabials use B for voiced and P for voiceless stops, M for nasal
  • Laterals use L
  • Uvulars use Q
  • Pharyngeals use H
  • Palatals use X for voiceless and Y for voiced

Conventions for manner of articulation labeling:

  • Single-character labels have manner encapsulated in choice of symbol: for example, M is nasal
  • Trills double up the first symbol
  • Fricatives use H
  • Approximants use X
  • Retroflex uses R

Consonant Tables

There are two tables, each listing a different category of consonant phones:

  • Consonants
  • Affricates

The table columns contain the following information:

  • UPS. The phone label specified in Microsoft’s Universal Phone Set (UPS).
  • IPA. The phone label specified in the International Phonetic Alphabet (IPA) phone set.
  • Unicode. The Unicode value from the IPA phone set.
  • IPA Description. This column describes the features of the phone, such as place of articulation, manner of articulation, phonation type, and airstream mechanism.
  • ASCII-IPA. The equivalent phone in ASCII-IPA phone set for reference.
  • X-SAMPA. The equivalent phone in X-SAMPA for reference.
  • Example. A word that uses the phone and illustrates its sound.
  • Language. The language of the example word.

Consonant Phones

Consonants are speech sounds that are articulated with complete (voiceless) or partial closure of the vocal tract.

UPS | IPA | Unicode | IPA Description | ASCII-IPA | X-SAMPA | Example | Language
P | p | U+0070 | {blb,stp,vls} | p | p | put | English
B | b | U+0062 | {blb,stp,vcd} | b | b | big | English
M | m | U+006D | {blb,nas} | m | m | mat | English
BB | ʙ | U+0299 | {blb,trl,vcd} | B<trl> | B\ |  |
PH | ɸ | U+0278 | {blb,frc,vls} | P | p\ |  |
BH | β | U+03B2 | {blb,frc,vcd} | B | B | kabra | Spanish
MF | ɱ | U+0271 | {lbd,nas} | M | F |  |
F | f | U+0066 | {lbd,frc,vls} | f | f | fork | English
V | v | U+0076 | {lbd,frc,vcd} | v | v | vat | English
VA | ʋ | U+028B | {lbd,apr,vcd} | r<lbd> | v\ |  |
TH | θ | U+03B8 | {dnt,frc,vls} | T | T | thin | English
DH | ð | U+00F0 | {dnt,frc,vcd} | D | D | then | English
T | t | U+0074 | {alv,stp,vls} | t | t | talk | English
D | d | U+0064 | {alv,stp,vcd} | d | d | dig | English
N | n | U+006E | {alv,nas} | N | n | no | English
RR | r | U+0072 | {alv,trl,vcd} | r<trl> | r | torre, rojo | Spanish
DX | ɾ | U+027E | {alv,flp,vcd} | * | 4 | butter | US English
S | s | U+0073 | {alv,frc,vls} | s | s | sit | US English
Z | z | U+007A | {alv,frc,vcd} | z | z | zap | US English
LSH | ɬ | U+026C | {alv,lat,frc,vls} |  | K |  |
LH | ɮ | U+026E | {alv,lat,frc,vcd} | z<lat> | K\ | caballo | Spanish/Zulu
RA | ɹ | U+0279 | {alv,apr} | r | r\ | puro | Spanish
L | l | U+006C | {alv,lat,apr,vcd} | l | l | lid | US English
L vel | ɫ | U+026B | {alv,lat,apr,vcd} vel |  | 5 |  |
SH | ʃ | U+0283 | {pla,frc,vls} | S | S | she | US English
SH pal | ʆ | U+0286 | {pla,frc,vls} pal |  |  |  |
ZH | ʒ | U+0292 | {pla,frc,vcd} | Z | Z | pleasure | US English
ZH pal | ʓ | U+0293 | {pla,frc,vcd} pal |  |  |  |
TR | ʈ | U+0288 | {rfx,stp,vls} | t. | t` |  |
DR | ɖ | U+0256 | {rfx,stp,vcd} | d. | d` |  |
NR | ɳ | U+0273 | {rfx,nas,vcd} | n. | n` |  |
DXR | ɽ | U+027D | {rfx,flp,vcd} | *. | r` |  |
SR | ʂ | U+0282 | {rfx,frc,vls} | s. | s` |  |
ZR | ʐ | U+0290 | {rfx,frc,vcd} | z. | z` |  |
R | ɻ | U+027B | {rfx,apr,vcd} | r. | r\` | red | US English
LR | ɭ | U+026D | {rfx,lat,vcd} | l. | l` |  |
RR rho | ɼ | U+027C | {rfx,trl} |  |  |  |
CT | c | U+0063 | {pal,stp,vls} | c | c |  |
JD | ɟ | U+025F | {pal,stp,vcd} | J | J\ |  |
NJ | ɲ | U+0272 | {pal,nas,vcd} | J |  | oignon | French
C | ç | U+00E7 | {pal,frc,vls} | C | C | sicher | German
CJ | ʝ | U+029D | {pal,frc,vcd} | C<vcd> | j\ |  |
J | j | U+006A | {pal,apr,vcd} | j | j | yard | US English
LJ | ʎ | U+028E | {pal,lat,apr,vcd} | l^ | L | gli | Italian
W | w | U+0077 | {lbv,apr,vcd} | w | w | with | US English
K | k | U+006B | {vel,stp,vls} | k | k | cut | US English
G | g | U+0067 | {vel,stp,vcd} | g | g | gut | US English
NG | ŋ | U+014B | {vel,nas} | N | N | sing | US English
X | x | U+0078 | {vel,frc,vls} | x | x | mujer | Spanish
GH | ɣ | U+0263 | {vel,frc,vcd} | Q | G | luego | Spanish
GA | ɰ | U+0270 | {vel,apr,vcd} | j<vel> | M\ |  |
GL | ʟ | U+029F | {vel,lat,vcd} | L | L\ |  |
QT | q | U+0071 | {uvl,stp,vls} | q | q |  |
QD | ɢ | U+0262 | {uvl,stp,vcd} | G | G\ |  |
QN | ɴ | U+0274 | {uvl,nas,vcd} | n" | N\ |  |
QQ | ʀ | U+0280 | {uvl,trl,vcd} | - | R\ |  |
QH | χ | U+03C7 | {uvl,frc,vls} | X | X |  |
RH | ʁ | U+0281 | {uvl,frc,vcd} | g" | R | rond | French
HH | ħ | U+0127 | {phr,frc,vls} | H | X\ |  |
HG | ʕ | U+0295 | {phr,frc,vcd} | H<vcd> | ?\ |  |
GT | ʔ | U+0294 | {glt,stp,vls} | ? | ? |  |
H | h | U+0068 | {glt,frc,vls} | h | h | help | US English
WJ | ɥ | U+0265 | {lbp,apr,vcd} | j<rnd> | H | huit;juin | French

Affricates

Affricates are consonants that begin as stops but release as a fricative.

The SAPI UPS includes explicit phones for the most frequent affricates in the highest priority languages. The IPA Unicode specification includes some of these phones, though not all of them.

The table shows the constituent phones (UPS Compound) that were combined to create the resulting explicit phone (UPS).

UPS | UPS Compound | IPA | Unicode | IPA Description | Example | Language
PF | P + F | p.f |  | {lbd,aff,vls} | Pfahl | German
TS | T + S | t.s / ʦ | U+02A6 | {den,aff,vls} | Zahl | German
CH | T + SH | t.ʃ / ʧ | U+02A7 | {pla,aff,vls} | chin | English
JH | D + ZH | d.ʒ / ʤ | U+02A4 | {pla,aff,vcd} | joy | English
JJ | J + J | j.j |  | {pal,aff,vcd} | hielo | Spanish
DZ | D + Z | d.z / ʣ | U+02A3 | {den,aff,vcd} | zona | Italian
CC | T + SC | t.ɕ / ʨ | U+02A8 | {pla,aff,vls} |  | Mandarin
TSR | T + SR | t.ʂ |  | {rfx,aff,vls} |  | Mandarin
JC | D + ZC | d.ʑ / ʥ | U+02A5 | {pla,aff,vcd} |  |

Many other affricates or compound consonants exist and may be required by other languages. For example, there are about 20 Italian geminate consonants (doubled consonants). UPS does not include dedicated phones for these, but allows them to be defined using the + symbol, or the length diacritic 'lng' in the case of geminates.

Vowels

This is a listing and cross reference of the vowel phones that are used by the three phonetic alphabets.

UPS Labeling Conventions for Vowels

The UPS labeling conventions for vowels were designed to make the phones more intuitive and maintain phonetic similarity across each class. The labels follow these conventions:

  • Cardinal or main vowels use single character labels
  • Non-cardinal vowels and common diphthongs use two characters
  • Maximum label length is three characters
  • Centralized vowel labels use X, as in AX, IX, UX
  • Checked vowel (usually must be followed by a consonant in a stressed syllable) labels use H, as in IH, UH
  • U or O signifies lip rounding, as in AU, AO, EU

Vowel Tables

There are four tables, each listing a different category of vowel phones:

  • Monophthong
  • Diphthong
  • German Diphthong
  • Nasal

Monophthong Vowel Phones

Monophthong (literally "one sound" or "one tone") vowels are those whose articulation at both beginning and end is relatively fixed, and which does not glide up or down towards a new position of articulation.

UPS | IPA | Unicode | IPA Description | ASCII-IPA | X-SAMPA | Example | Language
I | i | U+0069 | {hgh,fnt,unr,vwl} | I | i | feel | English
Y | y | U+0079 | {hgh,fnt,rnd,vwl} | Y | y | du | French
IX | ɨ | U+0268 | {hgh,cnt,unr,vwl} | i" | I\ |  |
YX | ʉ | U+0289 | {hgh,cnt,rnd,vwl} | U" | } |  |
UU | ɯ | U+026F | {hgh,bck,unr,vwl} | u- | M |  |
U | u | U+0075 | {hgh,bck,rnd,vwl} | u | u | too | English
IH | ɪ | U+026A | {smh,fnt,unr,vwl} | I | I | fill | English
YH | ʏ | U+028F | {smh,fnt,rnd,vwl} | I. | Y | hübsch | German
UH | ʊ | U+028ª | {smh,bck,rnd,vwl} | U | U | book | English
E | e | U+0065 | {umd,fnt,urd,vwl} | e | e | ses | French
EU | ø | U+00F8 | {umd,fnt,rnd,vwl} | Y | 2 | blöd | German
EX | ɘ | U+0258 | {umd,cnt,urd,vwl} | @<umd> | @\ |  |
OX | ɵ | U+0275 | {umd,cnt,rnd,vwl} |  | 8 |  |
OU | ɤ | U+0264 | {umd,bck,urd,vwl} | o- | 7 |  |
O | o | U+006F | {umd,bck,rnd,vwl} | o | o | go | English
AX | ə | U+0259 | {mid,cnt,unr,vwl} | @ | @ | ago | English
AX rho | ɚ | U+025ª | {mid,cnt,rho,vwl} | R |  | forensic | English
EH | ɛ | U+025B | {lmd,fnt,unr,vwl} | E | E | pet | English
OE | œ | U+0153 | {lmd,fnt,rnd,vwl} | W | 9 | plötzlich | German
ER | ɜ | U+025C | {lmd,cnt,unr,vwl} | V" | 3 | bird | UK English
ER rho | ɝ | U+025D | {lmd,cnt,unr,rho,vwl} | @. |  | bird | US English
UR | ɞ | U+025E | {lmd,cnt,rnd,vwl} | O" | 3\ |  |
H | ʌ | U+028C | {lmd,bck,unr,vwl} | V | V | cut | English
AO | ɔ | U+0254 | {lmd,bck,rnd,vwl} | O | O | dog | English
AE | æ | U+00E6 | {sml,fnt,unr,vwl} | & | { | cat | English
AEX | ɐ | U+0250 | {sml,cnt,unr,vwl} | 6 |  | Besser | German
A | a | U+0061 | {low,fnt,unr,vwl} | a | a | valle | Spanish
AOE | ɶ | U+0276 | {low,fnt,rnd,vwl} | &. | & |  |
AA | ɑ | U+0251 | {low,bck,unr,vwl} | A | A | father | English
Q | ɒ | U+0252 | {low,bck,rnd,vwl} | A. | Q | hot | English

Diphthong Vowel Phones

In addition to monophthongs, many languages contain diphthongs or even triphthongs. Diphthong (literally "two sounds" or "two tones") vowels are those that change quality during their pronunciation, or "glide", with a smooth movement of the tongue from one articulation to another, as in the English words eye, boy, and cow.

Diphthongs and triphthongs can be represented in UPS as vowel compounds, using the + symbol. However to make lexicons more readable, UPS also contains phones for common diphthongs. The table below shows both the compounding of two phones using the + symbol and the resultant UPS phone.

UPS Compound | UPS | IPA | X-SAMPA | Example | Language | Example | Language
E + I | EI | e.ɪ | eI | late | English | late | English
A + UH | AU | ɑ.ʊ | aU | foul | English | Haus | German
AO + I | OI | ɔ.ɪ | OI | toy | English | Kreuz | German
A + I | AI | ɑ.ɪ | ai | bite | English | Eis | German
I + AX | IYX | i.ə | i:6 | Tier | German | fear | English
Y + AX | UYX | y.ə | y:6 | Tür | German |  |
EH + AX | EHX | ɛ.ə | E6 | Berg | German | stairs | English
U + AX | UWX | u.ə | u:6 | Kur | German | lure | English
O + AX | OWX | o.ə | o:6 | Ohr | German | boa | English
AO + AX | AOX | ɔ.ə | O6 | dort | German | four | English

German Diphthong Vowels

The German language has several more centering diphthongs that must be represented as phone compounds and do not have explicit UPS phones assigned to them. The 'lng' diacritic is included for phonetic completeness.

UPS Compound | IPA | X-SAMPA | Example | Language
IH + AX | ɪ.ə | I6 | Wirt | German
YH + AX | ʏ.ə | Y6 | Türke | German
EY lng + AX | e.ə | e:6 | schwer | German
EH lng + AX | ɛ:.ə | E:6 | Bär | German
EU lng + AX | ø.ə | 2:6 | Föhr | German
OE + AX | œ.ə | 96 | Wörter | German
A lng + AX | a.ə | a:6 | Haar | German
A + AX | a.ə | a6 | hart | German
UH + AX | ʊ.ə | U6 | kurz | German

Nasal Vowel Phones

UPS contains phones for four nasal vowels. These are shown in the following table with French examples.

Compound | UPS | X-SAMPA | Example | Language
E nas | EN | e~ | vin | French
A nas | AN | a~ | vent | French
O nas | ON | o~ | bon | French
OE nas | OEN | 9~ | brun | French

Diacritics

This is a listing and cross reference of the diacritic phones that are used by the three phonetic alphabets.

Diacritic Phones

Diacritics are used to modify segmental phones (vowels, consonants, clicks, and ejectives) with additional phonetic detail. A diacritic cannot stand-alone. Diacritics must modify the preceding segmental phone. Any number of diacritics can follow a segmental symbol.

UPS | IPA | Unicode | IPA Description | ASCII-IPA | X-SAMPA
+ | ͡ | U+0361 | Tie bar |  | _
adv | o̟ | U+031F | Advanced |  | _+
api | t̺ | U+033A | Apical |  | _a
asp | tʰ | U+02B0 | Aspirated | ^lt;h> {asp} | _h
atr | e̘ | U+0318 | Advanced tongue root |  | _A
bvd | b̤ | U+0324 | Breathy voiced |  | _t
cen | ë | U+0308 | Centralized | " | _"
cvd | b̰ | U+0330 | Creaky voiced |  | _k
den | t̪ | U+032A | Dental | [ / {dnt} | _d
ejc | pʼ | U+02BC | Ejective | {ejc} | _>
lab | tʷ | U+02B7 | Labialised | <w> {lzd} | _w
lam | t̻ | U+033B | Laminal |  | _m
lar | dˡ | U+02E1 | Lateral release |  | _l
lla | n̼ | U+033C | Linguolabial |  | _N
low | e̞ | U+031E | Lowered |  | _o
lrd | o̜ | U+031C | Less rounded |  | _c
mcn | e̽ | U+033D | Mid-centralized |  | _x
mrd | o̹ | U+0339 | More rounded |  | _O
nar | d̚ | U+031A | No audible release |  | _}
nas | ñ | U+0303 | Nasalized | ~ / <nzd> | ~ / _~
nsr | oⁿ | U+207F | Nasal release |  | _n
nsy | n̯ | U+032F | Non-syllabic |  | _^
pal | tʲ | U+02B2 | Palatalized | ; / {pzd} | '
phr | nˤ | U+02E4 | Pharyngealized |  | _?\
rai | e̝ | U+031D | Raised |  | _r
ret | o̱ | U+0331 | Retracted |  | _-
rho | ə˞ | U+02DE | Rhoticity |  | `
rtr | e̙ | U+0319 | Retracted tongue root |  | _q
syl | n̩ | U+0329 | Syllabic | {syl} | = / _=
vcd | s̬ | U+032C | Voiced |  | _v
vel | tˠ | U+02E0 | Velarized | {vzd} | _G
vls | n̊ | U+030A | Voiceless |  | _0
vph | l̴ | U+0334 | Velarized or pharyngealized | {fzd} | _e

Suprasegmentals

This is a listing and cross reference of the suprasegmental phones that are used by the three phonetic alphabets.

Suprasegmental Phones

Suprasegmentals describe the features of a language above the level of individual consonants and vowels, such as prosody, tone, length, and stress.

The first set of suprasegmental symbols, up to and including “linking”, map directly to the IPA suprasegmental set and therefore have the IPA Unicode value. This set includes length diacritics for long, half-long, and extra-short. Length is often used phonemically, so length markers could also belong in the diacritics table. For this reason they are given the lower case label format of a diacritic.

The remaining suprasegmental symbols are used in UPS to describe intonation contours in text-to-speech markup (SSML prompt documents). These UPS symbols were formed by prefixing the original SAPI labels with an underscore. This makes them more easily identifiable as a class and removes any ambiguity with other IPA symbols. For example the old SAPI symbol '!' sentence terminator is the IPA symbol for an alveolar click.

UPS | IPA | Unicode | IPA Description | X-SAMPA | SAPI Equivalent
S1 | ˈ | U+02C8 | Primary stress | " | 1
S2 | ˌ | U+02CC | Secondary stress | % | 2
. | . | U+002E | Syllable break | . |
_| | | | U+007C | Minor (foot) group | | |
_|| | ‖ | U+2016 | Major (intonation) group | || |
lng | ː | U+02D0 | Long | : |
hlg | ˑ | U+02D1 | Half-long | :\ |
xsh | ˘ | U+02D8 | Extra-short | _X |
_^ | ‿ | U+203F | Linking (absence of a break) | -\ |
_! |  |  | Intonation - exclamation |  | ! Sentence terminator (exclamation mark)
_& |  |  | Intonation - continue |  | & Word boundary
_, |  |  | Intonation - incompletion rise |  | , Sentence terminator (comma)
_s |  |  | Silence |  | _ Silence (underscore)
_. | ↘ | U+2198 | Intonation – fall | <F> | . Sentence terminator (period)
_? | ↗ | U+2197 | Intonation - question rise | <R> | ? Sentence terminator (question mark)

Clicks and Ejectives

This is a listing and cross reference of the click and ejective phones that are used by the three phonetic alphabets.

Click and Ejective Phones

IPA uses a diacritic to describe ejectives, but has specific phones for clicks and implosives. Clicks and ejectives are voiceless consonants, although implosives may be partially voiced.

UPS | IPA | Unicode | IPA Description | X-SAMPA
PCK | ʘ | U+0298 | blb,clk | O\
TCK | ǀ | U+01C0 | dnt,clk | |\
NCK | ! | U+0021 | alv,clk | !\
CCK | ǂ | U+01C2 | pla,clk | =\
LCK | ǁ | U+01C1 | alv,lat,clk | |\|\
BIM | ɓ | U+0253 | blb,imp,vcd | b_<
DIM | ɗ | U+0257 | dnt-alv,imp,vcd | d_<
QIM | ʛ | U+029B | uvl,imp,vcd |
QIM vls | ʠ | U+02A0 | uvl,imp,vls |
GIM | ɠ | U+0260 | vel,imp,vcd | g_<
JIM | ʄ | U+0284 | pal,imp,vcd |
P ejc | pʼ | 0070 02BC | blb,ej | b_>
T ejc | tʼ | 0074 02BC | dnt-alv, ej | t_>
K ejc | kʼ | 006B 02BC | vel ej | g_>
S ejc | sʼ | 0073 02BC | alv fric ej | s_>
QT ejc | qʼ | 0071 02BC | uvl,ej |

Tones

This is a listing and cross reference of the tone phones that are used by the three phonetic alphabets.

Tone Phones

Tone describes the use of pitch in speech sounds to distinguish lexical or grammatical meaning. Lexical tones can follow a vowel or syllabic consonant. They can be made up of simple levels, on a universal scale which has a maximum of five level contrasts, or they can be contours composed of sequences of tones. A sequence of three tones should be sufficient to describe any tone contour.

IPA contains a mixture of lexical tones and contour tones. UPS covers the five lexical tones found in IPA, plus upstep and downstep. All contour tones can be represented in UPS by compound tones.

UPS does not include tonal symbols for the following IPA symbols: Rising, Falling, High Rising, Low Rising and Rising-Falling. These can all be defined in UPS using tone sequences. Global Rise and Global Fall are equivalent to "intonation – fall" and "intonation – question rise" in UPS ("Suprasegmentals").

UPS | IPA | Unicode | IPA Description | X-SAMPA
T5 | e̋ | U+030B | Extra high Level | _T
T4 | é | U+0301 | High Level | _H
T3 | ē | U+0304 | Mid Level | _M
T2 | è | U+0300 | Low Level | _L
T1 | ȅ | U+030F | Extra Low Level | _B
T- | ↓ | U+2193 | Downstep | !
T+ | ↑ | U+2191 | Upstep | ^

Other Phones

This is a listing and cross reference of the uncommon phones that are not listed in the other phone tables, but are used by the three phonetic alphabets.

Other Phones

UPS | IPA | Unicode | IPA Description | ASCII-IPA | X-SAMPA
WH | ʍ | U+028D | lbv,frc,vls | w<vls> | W
ESH | ʜ | U+029C | epl,frc,vls |  | H\
EZH | ʢ | U+02A2 | epl,frc,vcd |  | <\
ET | ʡ | U+02A1 | epl,stp |  | >\
SC | ɕ | U+0255 | pla,frc,vls |  | s\
ZC | ʑ | U+0291 | pla,frc,vcd |  | z\
LT | ɺ | U+027A | alv,lat,flp | *<lat> | l\
SHX | ɧ | U+0267 | simultaneous SH and X |  | x\
HZ | ɦ | U+0266 | glt,frc,vcd |  | h\