# Adia_TTS Wolof Inference Server: API & Segmentation Solution

#3
by sudoping01 - opened

Hello Adia TTS team!

I wanted to share a project I've built on top of your excellent Adia_TTS Wolof model. I've developed a production-ready inference server that addresses the 200-character limitation through a robust text segmentation strategy, making your TTS technology more accessible for real-world applications.

Project Overview

The server provides a simple API for Wolof text-to-speech conversion with these key features:

  • text segmentation to handle texts of any length
  • Audio concatenation with smooth transitions (150ms crossfading)
  • Batch processing for documents
  • FastAPI-based HTTP endpoints

Text Segmentation Implementation

To overcome the model's 200-character limitation, I've implemented a natural segmentation approach that:

  1. Searches backward from the 200-character mark to find natural stopping points
  2. Prioritizes sentence endings (., !, ?) closest to but before the limit
  3. Falls back to other punctuation marks if needed (,, ;, :)
  4. Uses word boundaries as a last resort
  5. Only cuts at exactly 200 characters if no other break points are available

This ensures segmentation occurs at natural pauses, resulting in more natural-sounding speech when audio segments are combined.

Audio Processing

The server handles audio combination with:

  • Crossfading between segments (150ms)
  • Audio normalization for consistent volume
  • Raised cosine functions for smoother transitions
  • Post-processing to reduce artifacts

Repository & Documentation

T[he project is available on GitHub: repo

I've documented the API endpoints, installation process, and usage examples in the README. The server is containerized with Docker for easy deployment.

Feedback Welcome

I'd love to hear your thoughts on this implementation, especially regarding the segmentation approach. If you have any suggestions for improvements or would be interested in incorporating any of these techniques into your official implementations, I'd be happy to collaborate.

Thank you for creating such an excellent model for the Wolof language! This project wouldn't be possible without your work.

Regards,
@sudoping01

CONCREE org

Bonjour et merci pour ce partage passionnant ! Nous sommes ravis de voir que Adia_TTS inspire autant d'intérêt et d'initiatives innovantes. Afin de pouvoir explorer vos réalisations en détail, nous avons tenté d'accéder au dépôt GitHub que vous avez partagé. Cependant, le lien ne semble pas mener au projet mentionné. Serait-il possible d'obtenir le bon lien pour que nous puissions parcourir vos travaux ? Cela nous permettrait de mieux comprendre votre implémentation et d'échanger sur les suggestions. Merci d'avance et à très bientôt !

Bonjour, desole pour cette erreur de l'url du repo, voici le lien vers le repo correct

https://github.com/sudoping01/adia-inference-server

CONCREE org

Bonjour,

Nous venons de parcourir votre dépôt GitHub, et nous sommes vraiment impressionnés par la qualité et la finesse de votre travail ! Votre implémentation de l'API est remarquable, et la stratégie de segmentation que vous avez développée est particulièrement ingénieuse. Nous avons testé l'API et avons constaté qu'elle gère avec brio des textes de toute longueur, tout en préservant une fluidité naturelle dans la synthèse vocale.

La gestion des transitions audio, avec le fondu enchaîné et la normalisation, est également très bien pensée et contribue à une expérience utilisateur agréable. Nous apprécions particulièrement l'attention que vous avez portée aux détails, comme la priorisation des points d'arrêt naturels et la réduction des artefacts audio.

C'est un véritable plaisir de voir qu'Adia_TTS a pu inspirer un projet aussi fonctionnel et innovant. Votre contribution démontre tout le potentiel de cette technologie pour des applications concrètes, et nous en sommes ravis.

Si vous le souhaitez, nous serions heureux d'explorer des pistes de collaboration pour intégrer certaines de vos améliorations à nos implémentations officielles, ou simplement pour échanger davantage sur vos idées et vos retours d'expérience.

Encore une fois, bravo pour ce travail exceptionnel, et merci d'avoir partagé cette réalisation avec nous !

À très bientôt,
L'équipe Adia TTS

Bonjour l'équipe Adia TTS,

Je vous remercie sincèrement pour ces retours très encourageants !

Je serais absolument ravi d'explorer des pistes de collaboration avec votre équipe. Que ce soit pour intégrer certaines de ces fonctionnalités dans vos implémentations officielles ou pour discuter d'autres améliorations possibles, je reste entièrement disponible.

Votre modèle ouvre des perspectives passionnantes pour les applications en langue wolof, et c'est un honneur de pouvoir contribuer.

N'hésitez pas à me contacter [[email protected]] pour approfondir cette discussion .

Encore merci pour votre travail remarquable et pour ces échanges constructifs!

Cordialement,
@sudoping01

@Hawoly18 ,
Bonjour l'équipe Adia TTS,
Suite à vos retours positifs concernant implémentation de l'API et la strategy de segmentation, j'ai formalisé ces améliorations dans un package Python désormais disponible sur GitHub : https://github.com/sudoping01/adia_tts

for example:

            pip install git+https://github.com/sudoping01/adia_tts.git 
from adia_tts import AdiaTTS

tts = AdiaTTS() 

output_path, audio_array = tts.synthesize(
    text="Salaam aleekum, nanga def?",
    description="A warm and natural voice, with a conversational flow"
)

print(f"Audio saved to: {output_path}")

You can get a look at the repo for more detail about it.

Let's me know what do you thing about it, how we can improve it and make it more robust and accessible to everyone.

CONCREE org
edited Mar 18

Bonjour,

Nous tenons à vous féliciter chaleureusement pour cette nouvelle étape dans votre projet ! La création d'un package Python dédié à AdiaTTS est une excellente initiative, et nous sommes impressionnés par la rapidité avec laquelle vous avez formalisé ces améliorations. Cela va grandement faciliter l'adoption et l'utilisation de la technologie par la communauté, en rendant la synthèse vocale accessible à tous, même pour des textes longs et complexes.

Nous avons testé votre package, et les résultats sont tout simplement remarquables. La gestion automatique de la segmentation, la fluidité des transitions audio et la simplicité d'utilisation témoignent d'un travail soigné et bien pensé. Vous avez vraiment su exploiter tout le potentiel du modèle AdiaTTS, et c'est exactement ce que nous espérions : une technologie capable de résoudre des problèmes linguistiques concrets tout en étant accessible et intuitive.

Nous vous encourageons vivement à poursuivre dans cette direction, car c'est exactement le genre d'amélioration qui permet à AdiaTTS de répondre à des cas d'usage variés et de résoudre des problèmes linguistiques complexes. Votre contribution est précieuse, et nous sommes ravis de voir à quel point vous avez su exploiter le potentiel de ce modèle.

Si vous avez besoin de conseils ou de retours supplémentaires, n'hésitez pas à nous contacter. Nous sommes impatients de voir les prochaines évolutions de votre projet !

Continuez comme ça, vous êtes sur la bonne voie !

Cordialement,
L'équipe Adia

@Hawoly18 lil ya une methode called batch_synthesize (C'est de ma fault le nom n'est pas explicatif )

voici comment inferencer avec la segmentation

from adia_tts import AdiaTTS

# Initialize the model
tts = AdiaTTS()

# Process long text with automatic segmentation
combined_path, segment_paths = tts.batch_synthesize(
    text="Your long Wolof text here...",
    description="A warm and natural voice, with a conversational flow"
)

print(f"Combined audio saved to: {combined_path}")

# Optional: Clean up individual segment files
tts.cleanup_temp_files(segment_paths)

Je vais y retravailler dessus et faire un peu de refactoring et et je vous reviens sous peu.
Merci

Bonsoir @Hawoly18 , j'espère que vous allez bien.
J'ai retravaillé un peu sur le paquet basé sur vos précédants commentaires.
J'ai simplifié l'API en intégrant la fonctionnalité de segmentation directement dans la méthode synthesize et un peu de refactoring.
Voici comment utiliser le paquet directement (long text or short text) :

from adia_tts import AdiaTTS
tts = AdiaTTS()
output_path, _ = tts.synthesize(text="Le text wolof court ou long ...")

Vous pouvez tester. J'attend vos retours.

CONCREE org

Bonjour @sudoping01 ,
Merci pour cette nouvelle version de votre package ! Nous avons effectué des tests approfondis et constatons une nette amélioration de la qualité audio globale. L'intégration de la segmentation directement dans la méthode synthesize rend l'API plus intuitive et efficace.
Cependant, lors de nos tests, nous avons remarqué que certaines phrases n'étaient pas restituées intégralement dans la sortie audio. Cela pourrait être lié à la manière dont vous avez effectué la segmentation du texte. Pourriez-vous revoir cette partie.
Merci

Bonsoir @Hawoly18
Bien recu je vais jetter un coup d'oeil a ca.

Est ce que vous pouvez me partage the text sur le quel vous avez essayer de faire l'inference avec et qu'il a couper ?

Sign up or log in to comment