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);
}