Retour au blog de développement Note d'ingénierie

La route vers SyncTrans 1.0 : construire un interprète en temps réel pour le Mac

Lire cet article en : English · 中文 · 日本語 · Español · Français · 한국어 · Українська

SyncTrans 1.0.0 est sorti cette semaine. C'est un traducteur vocal en temps réel pour macOS 14 et versions ultérieures, sur Apple Silicon : vous parlez, la traduction apparaît au fil de la phrase, et une voix synthétisée la lit à voix haute. Cet article est le récit d'ingénierie de ce chemin — ce que nous avons construit, dans quel ordre, et quels compromis nous avons acceptés. Les notes courtes côté utilisateur se trouvent dans Nouveautés.

Pourquoi construire un interprète pour le Mac

Les applications de traduction sur téléphone fonctionnent bien pour demander où sont les toilettes. Elles fonctionnent beaucoup moins bien pour une vraie conversation, parce qu'elles la réduisent à deux personnes qui fixent tour à tour un petit écran en se passant l'appareil. Les conversations qui nous importaient — une réunion avec un client, une consultation, une discussion familiale avec un avocat ou un médecin — ont plus souvent un ordinateur portable sur la table qu'un guide de conversation.

Il se trouve aussi qu'un Mac est un matériel étonnamment adapté à cette tâche. Apple Silicon peut exécuter localement la reconnaissance vocale, la traduction automatique et la synthèse vocale à une vitesse interactive, et la machine dispose déjà d'une bonne chaîne micro, de vrais haut-parleurs et d'autant d'écrans qu'on veut bien y brancher. L'objectif que nous nous étions fixé était simple à énoncer : la machine gère la langue, pour que les personnes puissent gérer la conversation.

Deux familles de moteurs, développées en parallèle

Dès le premier prototype, SyncTrans avait deux façons de faire le même travail. Le moteur cloud géré ne demande aucune configuration : on se connecte, on choisit les langues, on démarre. Le moteur sur appareil exécute la reconnaissance, la traduction et la synthèse entièrement sur le Mac — rien ne quitte la machine, et il continue de fonctionner sans réseau.

Nous avons délibérément construit les deux en même temps, plutôt que de livrer d'abord la voie cloud et de greffer l'inférence locale plus tard. Le coût était réel : chaque fonctionnalité devait marcher deux fois, sur deux piles techniques très différentes. Le gain, c'est une abstraction de moteur unique dans laquelle les deux piles se branchent, et l'habitude de mesurer plutôt que d'affirmer. Chaque niveau de modèle local est assorti d'un plancher de mémoire mesuré, et l'application vérifie ce que la machine peut réellement exécuter avant de le proposer — un Mac plus ancien se voit dire honnêtement quels niveaux sont hors de portée, au lieu d'être dirigé vers quelque chose qui swappe.

La troisième option de moteur a découlé de cette abstraction presque gratuitement : si vous disposez déjà de services de reconnaissance vocale et de traduction auxquels vous faites confiance, vous pouvez pointer SyncTrans vers vos propres points de terminaison API, et le reste de l'application fonctionne à l'identique. Trois moteurs, une seule interface, et passer de l'un à l'autre est un réglage, pas une réinstallation.

Conçu pour le face-à-face

La fonctionnalité qui a le plus façonné le produit est née de l'observation des utilisateurs des premières versions. Avec une seule fenêtre, deux interlocuteurs finissaient inévitablement par orienter l'écran dans un sens puis dans l'autre. La 1.0 propose donc une vue de conversation sur deux écrans : une langue en plein écran sur chaque moniteur, le Mac posé entre les deux personnes, et chacun lit l'écran qui lui est destiné. Chaque fenêtre peut être assignée à son propre écran depuis l'application.

L'audio a reçu le même traitement. Avec une paire d'écouteurs partagée, SyncTrans peut envoyer une langue dans l'oreille gauche et l'autre dans l'oreille droite, de sorte que deux personnes partageant un même Mac entendent chacune la traduction qui lui est destinée. C'est une petite chose à décrire et, dans la pratique, une chose étonnamment grande : la conversation cesse complètement de tourner autour de la machine.

Trois dispositions sur un même enregistrement de session

Selon les moments, on veut des vues différentes de la même conversation : la 1.0 propose donc trois dispositions au-dessus d'un enregistrement de session unique. La disposition chat entrelace les deux langues tour par tour, à la manière d'une application de messagerie. La disposition en deux colonnes donne à chaque langue sa propre colonne, plus lisible quand deux personnes suivent en même temps. La disposition compte rendu présente la session comme un document continu que l'on peut parcourir comme des notes. Comme les dispositions sont des vues sur un seul enregistrement, changer en cours de session ne fait rien perdre.

Glossaire, contexte et chiffres qui se comportent bien

Deux fonctionnalités de qualité ont rejoint la 1.0 parce qu'elles comptent davantage que le choix brut du modèle. La traduction s'appuie sur le contexte glissant de la conversation, de sorte que les pronoms et les références au sujet se résolvent par rapport à ce qui a réellement été dit plus tôt dans la session. Un glossaire par projet verrouille les mots qu'un modèle devinerait sinon : noms de produits, noms de personnes, termes techniques. Une fois qu'un terme est dans le glossaire, il ressort de la même façon à chaque fois.

La 1.0 comprend également une couche de règles déterministe qui se place derrière le modèle pour les nombres et les formules de remise, là où une traduction littérale peut discrètement inverser le sens — les conventions chinoises de remise sont le cas célèbre. Ce travail a son propre article : Des chiffres qui survivent à la traduction.

Un historique interrogeable et exportable

Une conversation traduite est souvent quelque chose dont on a besoin après coup : chaque session est donc enregistrée par projet sur le Mac. L'historique est interrogeable à travers les projets, chaque tour de parole peut être corrigé ou supprimé, et une session terminée s'exporte en TXT, Markdown ou SRT — des notes de réunion, un devis dont vous avez besoin par écrit, ou des sous-titres pour un enregistrement du même événement. L'enregistrement vit sur votre machine, quel que soit le moteur qui l'a produit.

Sept langues dans l'interface

Un interprète dont l'interface ne parle qu'une seule langue a un problème de crédibilité : l'interface de la 1.0 est donc localisée en sept langues — anglais, chinois, japonais, espagnol, français, coréen et ukrainien. Nous avons traité la localisation comme du travail d'ingénierie et non comme un simple dépôt de traductions : les libellés de barre d'outils qui tronquent, les boutons qui débordent de leur conteneur et les mises en page qui n'acceptent que l'anglais ont tous été audités et corrigés. Ce blog est publié dans les mêmes sept langues, ce qui nous a semblé être la façon honnête de faire.

Ce que signifie la 1.0

Pour nous, la 1.0 est une promesse de base : la boucle complète — parler, voir, entendre, conserver — fonctionne de bout en bout sur chaque moteur que nous livrons, sur le matériel pour lequel nous disons qu'elle fonctionne. SyncTrans 1.0.0 requiert macOS 14 ou ultérieur sur Apple Silicon, et vous pouvez le télécharger ici. Le tour des fonctionnalités se trouve sur la page Fonctionnalités.

Des questions ou des rapports de bug ? Le tableau de commentaires est le moyen le plus rapide de nous joindre.