
Persian TTS ist eine einfache Synthese-Engine und eine reaktnative text-synthetisierende App, die ich ursprünglich als mein Bachelor-Abschlussprojekt entwickelt habe.
Das Projekt soll jedoch im Laufe der Zeit allmähliche Verbesserungen erzielen.


![]()
![]()
![]()
Persische TTS-Apps werden von React Native angetrieben, sodass Sie diese für die richtige Kompilierung der Apps ordnungsgemäß erstellen müssen. Um die Android -Version zu kompilieren, ist eine ordnungsgemäße Android -SDK auf Ihrer Maschine ein Muss, und das Kompilieren von iOS -Varienten muss eine funktionierende Xcode -Kopie und ein funktionales Cocoapods -Abhängigkeitsmanagement -Tool auf einem MacOS -Betriebssystem -Maschine haben.
Sie benötigen außerdem ein Abhängigkeitsmanagement -Tool zum Zugriff auf NPM und das Herunterladen der Abhängigkeiten des Projekts. In diesem Projekt wird Garn verwendet, aber auch NPM oder andere Tools können verwendet werden.
Zuerst können Sie den Quellcode erhalten, indem Sie ihn klonen
git clone [email protected]:amfolio/persian-tts.git cd ios
pod install Gehen Sie dann zum Verzeichnis des Pakets und installieren Sie die Abhängigkeiten mit yarn install oder npm install
Um Apps in Emulatoren von Android- und/oder iOS -Betriebssystemen zu starten, können Sie folgende Befehle verwenden:
react-native run-androidreact-native run-iosDie Struktur dieses Projekts ist nur identisch mit vielen anderen reaktnativen Projektstrukturen. Unten ist nur ein großes Bild der Hauptstruktur:
In Kürze verwendet das Projekt eine "conatnative synthetisierende" Genehmigung, um sein Ziel zu erreichen. In der persischen Sprache könnte ein unbegrenzter Satz von Wörtern konstruiert werden, indem "Konsonant+Vokal" -Paare verkauft werden. Für Tapferkeit hier nennen wir diese Paare einfach "Silben".
Um die Synthese zu erledigen, hat das Projekt zunächst einen Satz von 169 Silbenstimmen, die aus meiner eigenen Stimme wiederhergestellt sind (also ist es keine professionelle Erzählung?). Diese Zahl ist als belly ausgelegt:
| Sprachtyp | Entsprechende Dateien zählen |
|---|---|
| Vokale | 6 |
| stille Konsonanten | 23 |
| Silbe (Konsonant+Vokal) | 138 |
| Räume | 2 |
| Gesamt | 169 |
Der Synthese-Prozess ist dann durch die Verkleidung von Silben mithilfe der FFMPEG-Bibliothek und der Reakt-nativen-FFMPEG-Wrapper maßbar. Hier ist ein kurzes Schema dessen, was passiert.
Im ersten Schritt wird die phonetische Entsprechung für die persische Eingabe unter Verwendung der Nutzfunktion von TextTophonems erstellt.
const input = "سلام" ; // means "Hello" in persian
const output = textToPhonems ( input ) ; // ["sa", "lā", "m"];Das Ergebnis von Schritt 1 durchläuft durch die Phonemstoffmpeg -Versorgungsfunktion und erhält einen gültigen Befehl ffmpeg concatnation:
const ffmpeg = phonemsToFFMpeg ( output ) ;Und das Ergebnis wäre:
ffmpeg
-I sa.wav -I lā.wav -I m.wav
-filter_complex ‘[0:0][1:0][2:0]concat=n=3:v=0:a=1[out]’
-map ‘[out]’ output.wavDie Anwendung ruft FFMPEG mit React-Native-FFMPEG auf und die folgenden Schritte werden hinter den Kulissen durchgeführt:
| Vor der Verkleidung | ||
![]() | ![]() | ![]() |
| sa.wav | lā.wav | M.Wav |
| Nach der Verkleidung | ||
![]() | ||
| output.wav | ||
Die Ausgabe-Audio-Datei wird dank der React-Native-Sound-Bibliothek sowohl über iOS- als auch über Android-Plattformen gespielt. Das Lesen von Bundle-Ressourcen und das Übertragen an Sandbox/SD-Card-Standort ist dank React-Native-Fs auch möglich
Das besondere Dankeschön geht an den Direktor meines Projekts, Dr. Mohammad Taheri, der mir das Vertrauen gab, sich diesem Thema zu nähern und mich durch die besten Schritte zu führen, um es möglich zu machen. Ohne ihn hätte ich wahrscheinlich nie in solche akademischen Forschungen eingestiegen.
Der nächste große Dank geht an die Entwickler -Community, die die modernste Technologie großzügig mit anderen teilen. Diese Community ist nur zu verdanken, dass es nicht mehr notwendig ist, die Räder neu zu erfinden.
Hier ist eine kurze Liste von Bibliotheken, die mir unendlich in meinem Entwicklungspfad geholfen haben:
Dieses Repository wird ursprünglich als minimaler Aufwand für eine persische Sprache Open-Source-Text-zu-Sprache-Lösung konstruiert. Ich wäre sehr dankbar für jeden Beitrag von Problemen, die zu Fehler und Verbesserungen berichten.
Der Beitrag durch Hinzufügen weiterer Stimmen zum Projekt ist ebenfalls sehr begrüßt und Sie können Ihren Namen auch in Voices.json erwähnen.
Bitte senden Sie bitte Pull -Anfragen, wenn Sie eine Notwendigkeit empfinden.