bgmtts — Bulgarian text-to-speech (two voices)

A small Bulgarian text-to-speech model with a woman and a man voice. It runs on an ordinary CPU with onnxruntime (no GPU), reads numbers, dates, units and abbreviations, and puts the stress on the right syllable.

Демо в браузъра / Try it in the browser

Примери / Samples

The texts below are shown as the model reads them: after the normalization (numbers, dates, units and abbreviations written out) and with the stress mark ( ̀ ) the stress model put on every word. / Текстовете са показани така, както ги чете моделът: след нормализацията и с ударенията, които е сложил.

Възможности

[жена] До̀бър ден! Това̀ е ма̀лкият модѐл, ко̀йто гово̀ри напра̀во в бра̀узъра, без съ̀рвър. [мъж] Тѐгли се веднъ̀ж, о̀коло педесѐт мегаба̀йта, и по̀сле рабо̀ти и о̀флайн. [жена] Почтѝ нѝщо тук не е напѝсано с ударѐние. [мъж] Ударѐнията ѝдват от рѐчника, а за ду̀мите, коѝто не са в нѐго, ги предска̀зва ма̀лка мрѐжа на само̀то устро̀йство. [жена] Кога̀то тря̀бва то̀чно определѐно ударѐние, то се пѝше в самѝя текст. Бо̀рис и Борѝс са разлѝчни хо̀ра. [мъж] Въ̀лна и вълна̀ съ̀що се пѝшат една̀кво, затова̀ по-сѝгурно е да се зададѐ ударѐнието. [жена] Чуждѝците мина̀ват гла̀дко. Тря̀бва да commit-на ко̀да, по̀сле ще го push-на и ще deploy-на но̀вата вѐрсия. [мъж] Имена̀ като̀ nvidia, Netflix, Microsoft, Google и OpenAI се чета̀т почтѝ ка̀кто ги ка̀зваме. [жена] Ако̀ нѐщо тря̀бва да оста̀не на англѝйски, се маркѝра: state of the art. [мъж] Съкращѐнията на латѝница се изгова̀рят бу̀ква по бу̀ква: ей ай, ей пи ай, джи пи ѐс, ю ес бѝ, ем пи три. [жена] На кѝрилица завѝси от ду̀мата — на̀то, герб и данс се чета̀т сля̀то, а бе де жѐ, е ге нѐ и о о нѐ се ка̀зват бу̀ква по бу̀ква. [мъж] Числа̀та, да̀тите и мѐрките ста̀ват ду̀ми: на седемна̀йсти окто̀мври две хѝляди два̀йсет и шѐста годѝна в четирина̀йсет часа̀ и трѝйсет билѐтът поскъ̀пна с пет процѐнта до педесѐт лѐва, а апартамѐнтът е два̀йсет и пет квадра̀тни мѐтра [жена] Вла̀кът вървѐше със сто и два̀йсет киломѐтра в час. Класѝрах се трѐти от два милио̀на уча̀стници. [мъж] В два̀йсет и пъ̀рви век хо̀рата са до̀ста разлѝчни. В глава̀ четвъ̀рта на рома̀на се гово̀ри за Хѐнри о̀сми, ко̀йто е живя̀л през деветна̀йсти век, то̀ест до̀ста отда̀вна. [жена] Интона̀цията слѐдва пунктуа̀цията, но все о̀ще не доста̀тъчно изразѝтелно. Наѝстина ли? [мъж] Да! И така̀ ната̀тък…

Два гласа / Two voices

Поздрав

До̀бър ден! Това̀ е ма̀лкият модѐл, ко̀йто гово̀ри напра̀во в бра̀узъра, без съ̀рвър. Мо̀га да гово̀ря с жѐнски и с мъ̀жки глас.

Жена / Woman Мъж / Man

Два гласа

[жена] Здравѐйте, аз съм жѐнският глас. [мъж] А аз съм мъ̀жкият. Смѐняте ни с та̀говете в квадра̀тни ско̀би.

Два гласа / Two voices

Кафене

[жена] Добро̀ у̀тро! Какво̀ ще жела̀ете днес? [мъж] Едно̀ голя̀мо кафѐ с мля̀ко, мо̀ля. Ѝмате ли нѐщо сла̀дко? [жена] Ѝмаме пря̀сно изпѐчени кѝфли с шокола̀д. [мъж] Чудѐсно, взѐмам една̀.

Два гласа / Two voices

При лекаря

[мъж] До̀бър ден, до̀кторе. От ня̀колко дни ме болѝ гъ̀рлото и ѝмам температу̀ра. [жена] Седнѐте, мо̀ля. Отворѐте уста̀ и кажѐте "а̀аа". Да, гъ̀рлото е зачервѐно. Ще ви изпѝша лека̀рство.

Два гласа / Two voices

Новини

[жена] До̀бър вѐчер, това̀ са новинѝте. Днес в Со̀фия се провѐде срѐща на кмѐтовете от ця̀лата страна̀. [мъж] Обсъ̀дени бя̀ха ремо̀нтите на пъ̀тищата и но̀вите автобу̀сни лѝнии, коѝто ще тръ̀гнат от пъ̀рви декѐмври. [жена] А сега̀ — врѐмето.

Два гласа / Two voices

Приказка

[мъж] Ѝмало едно̀ врѐме една̀ ма̀лка лисѝца, коя̀то живѐела в гора̀та край река̀та. Една̀ су̀трин тя срѐщнала ста̀рия мечо̀к. [жена] Добро̀ у̀тро, чѝчо Мѐчо! Накъдѐ си се запъ̀тил? [мъж] Отѝвам за мед, ма̀лката. Ѝскаш ли да до̀йдеш с мен?

Два гласа / Two voices

Обява

[мъж] Уважа̀еми пъ̀тници, вла̀кът за Пло̀вдив ще потѐгли от вто̀ри колово̀з след дѐсет мину̀ти. [жена] Мо̀ля, не оста̀вяйте бага̀жа си без надзо̀р.

Два гласа / Two voices

Телефон

[жена] А̀ло, здравѐй! Къдѐ си? [мъж] В кола̀та съм, ще закъснѐя десетѝна мину̀ти. [жена] Ня̀ма проблѐм, ще те ча̀кам пред кѝното. [мъж] Добрѐ, до ско̀ро!

Два гласа / Two voices

Числа и дати

Срѐщата е на петна̀йсти март две хѝляди два̀йсет и сѐдма годѝна от дѐсет и трѝйсет ча̀са в за̀ла двѐста и чѐтири. Вхо̀дът е два̀йсет и пет лѐва, а за студѐнти с ка̀рта — двана̀йсет лѐва

Жена / Woman Мъж / Man

Рецепта

За ба̀ницата ви тря̀бват корѝ, чѐтири яйца̀, ко̀фичка кѝсело мля̀ко и двѐста гра̀ма сѝрене. Разбѝйте яйца̀та с мля̀кото, натрошѐте сѝренето и редѐте корѝте в тава̀та.

Жена / Woman Мъж / Man

Install

pip install "bgmtts @ https://huggingface.co/monydochev/bgmtts/resolve/main/bgmtts-0.1.0-py3-none-any.whl"

The model files (12 MB voice model + 18 MB stress model) are downloaded from this repository on first use and cached.

Use

Command line:

bgmtts "Здравейте! Как сте днес?" -o hello.wav
bgmtts "Добър ден." -o man.wav --voice man --speed 1.1
echo "Текст от файл или друга програма." | bgmtts -o out.wav

Python:

from bgmtts import TTS

tts = TTS()                                   # downloads the models once
audio = tts.synth("Здравейте! Днес е 7 ноември.", voice="woman")   # float32, 24 kHz, mono
tts.save(audio, "hello.wav")

print(tts.stress_text("Той вземал пари."))    # the text with the stress marks the model will read
  • Voices: voice="woman" / "жена" or voice="man" / "мъж". Inside the text, [мъж] and [жена] switch the voice from that point on: "[жена] Здравей! [мъж] Здравей и на теб."
  • Speed: speed=1.0 is normal, 1.2 faster, 0.9 slower.
  • Your own stress marks win: put + before the stressed vowel (муз+ика) or a stress accent after it (му́зика).
  • Stress model size: TTS(stress="small") (18 MB, default), "base" (100 MB) or "large" (240 MB, a little more accurate on rare words); stress=None uses the built-in dictionary only.
  • Offline: download the repository once and pass TTS(model_dir="path/to/folder").

Speed: about 25-30x faster than real time on a laptop CPU (one sentence ≈ 0.1 s).

Какво умее / What it does

  • Чете на книжовен български: числа („15 март 2027 г.“ → „петнайсти март две хиляди двайсет и седма година“), часове, пари, мерни единици, съкращения и абревиатури.
  • Ударения: голям речник на ударенията плюс невронен модел за ударения за многозначните и непознатите думи.
  • Латинските думи (имена на марки, приложения) се четат приблизително по български.
  • Изреченията се синтезират едно по едно, с естествена пауза след точка, въпрос и удивителна.

Ограничения / Limitations

  • Only Bulgarian. Latin-script words are read with an approximate Bulgarian pronunciation.
  • Stress can still be wrong on rare words, names and homographs that need the wider context; mark them with +.
  • Two voices only; no voice cloning.

License

CC BY-NC 4.0 — free for non-commercial use, with attribution. Commercial use is not permitted. This covers the models, the stress dictionary and the code in this repository.

Please do not use the voices to impersonate real people or to create misleading content.

Acknowledgements / Благодарности

The models were trained on BRAIN++, the Bulgarian AI Factory — a national and European AI Factory (EuroHPC) that brings together AI compute, expertise, training and support for companies and researchers.

Моделите са обучени на BRAIN++, българската AI фабрика — национална и европейска AI фабрика (EuroHPC), която събира на едно място изчислителна мощ за изкуствен интелект, експертиза, обучение и подкрепа за бизнеса и изследователите.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support