Intégration de la synthèse vocale Baidu TTS dans une application C#

Pour utiliser l'API Baidu Text-to-Speech, inscirvez-vous sur la plateforme Baidu AI et créez une application pour obtenir les clés d'authentification. Ajoutez ensuite les packages NuGet Baidu.AI et NAudio à votre projet.

Voici une classe utilitaire pour gérer la lecture audio avec NAudio :


public class LecteurAudioMultimedia
{
    private IWavePlayer dispositifLecture = new WaveOutEvent();
    private AudioFileReader sourceAudio = null;
    private Mp3FileReader lecteurMp3 = null;
    private MemoryStream tamponMemoire = null;

    public LecteurAudioMultimedia()
    {
        dispositifLecture.PlaybackStopped += (expediteur, evenement) =>
        {
            sourceAudio?.Dispose();
            lecteurMp3?.Dispose();
            tamponMemoire?.Dispose();
        };
    }

    public void DemarrerLecture(string cheminFichier)
    {
        dispositifLecture.Stop();
        sourceAudio = new AudioFileReader(cheminFichier);
        dispositifLecture.Init(sourceAudio);
        dispositifLecture.Volume = 1f;
        dispositifLecture.Play();
    }

    public void DemarrerLectureFlux(byte[] donneesAudio)
    {
        dispositifLecture.Stop();
        tamponMemoire = new MemoryStream(donneesAudio);
        lecteurMp3 = new Mp3FileReader(tamponMemoire);
        dispositifLecture.Init(lecteurMp3);
        dispositifLecture.Play();
    }

    public void ArreterLecture()
    {
        dispositifLecture.Stop();
    }
}

Classe principale pour interagir avec l'API Baidu TTS :


public class ServiceSyntheseVocale
{
    private Baidu.Aip.Speech.Tts clientTTS;
    private Dictionary<string object=""> reglagesVocaux;

    public ServiceSyntheseVocale(string identifiantAPI, string cleSecrete)
    {
        clientTTS = new Baidu.Aip.Speech.Tts(identifiantAPI, cleSecrete);
        clientTTS.Timeout = 60000;
        reglagesVocaux = new Dictionary<string object="">()
        {
            { "spd", 5 },
            { "pit", 5 },
            { "vol", 7 },
            { "per", 0 },
            { "aue", 3 }
        };
    }

    public void ConvertirEtJouerTexte(string texteEntree, string cheminSortie = "", bool lectureAutomatique = true)
    {
        if (string.IsNullOrEmpty(cheminSortie))
        {
            cheminSortie = Path.GetTempFileName().Replace(".tmp", ".mp3");
        }
        var reponseAPI = clientTTS.Synthesis(texteEntree, reglagesVocaux);
        if (reponseAPI.ErrorCode == 0)
        {
            File.WriteAllBytes(cheminSortie, reponseAPI.Data);
            if (lectureAutomatique)
            {
                new LecteurAudioMultimedia().DemarrerLecture(cheminSortie);
            }
        }
        else
        {
            throw new Exception(reponseAPI.ErrorMsg);
        }
    }

    public void ConvertirEtJouerEnMemoire(string texteEntree)
    {
        var reponseAPI = clientTTS.Synthesis(texteEntree, reglagesVocaux);
        if (reponseAPI.ErrorCode == 0)
        {
            new LecteurAudioMultimedia().DemarrerLectureFlux(reponseAPI.Data);
        }
        else
        {
            throw new Exception(reponseAPI.ErrorMsg);
        }
    }
}
</string></string>

Exemple d'utilisation dans un formulaire :


private void BoutonSyntheseComplete_Click(object emetteur, EventArgs arguments)
{
    var serviceVocal = new ServiceSyntheseVocale("CLE_API_OBTENUE", "CLE_SECRETE_OBTENUE");
    string contenuTexte = champSaisie.Text;
    serviceVocal.ConvertirEtJouerTexte(contenuTexte);
}

private void BoutonSyntheseRapide_Click(object emetteur, EventArgs arguments)
{
    var serviceVocal = new ServiceSyntheseVocale("CLE_API_OBTENUE", "CLE_SECRETE_OBTENUE");
    string contenuTexte = champSaisie.Text;
    serviceVocal.ConvertirEtJouerEnMemoire(contenuTexte);
}

Étiquettes: CSharp baidu-tts naudio speech-synthesis api-integration

Publié le 16 juillet à 22h25