Hello,
Une petite évolution de la formidable classe de DjMomo :
la fonction PlayTTSJingle (à ajouter dans sonos.class.php) qui joue un mp3 avant de lancer le TTS.
Peut-être que ça serait plus propre / simple de modifier PlayTTS et de lui ajouter un paramètre facultatif pour le fichier mp3 de jingle. Peut-être aussi la possibilité de lire le jingle à la fin du TTS... bref des améliorations possibles.
Mais ça a le mérite de fonctionner :
- Code : Tout sélectionner
/**
* Play a jingle and then a TTS message
* @param string message
* @param string radio name display on sonos controller
* @param int volume
* @param string language
* @param string jingle (mp3 file name for jingle)
*/
public function PlayTTSJingle($message,$directory,$volume=0,$unmute=0,$jingle,$lang='fr')
{
$actual['track'] = $this->GetPositionInfo();
$actual['volume'] = $this->GetVolume();
$actual['mute'] = $this->GetMute();
$actual['status'] = $this->GetTransportInfo();
$this->Pause();
if ($unmute == 1)
$this->SetMute(0);
if ($volume != 0)
$this->SetVolume($volume);
$file = 'x-file-cifs://'.$directory.'/'.$this->TTSToMp3($message,$lang);
$jingle_file = 'x-file-cifs://'.$directory.'/audio/'.$jingle;
if (((stripos($actual['track']["TrackURI"],"x-file-cifs://")) != false) or ((stripos($actual['track']["TrackURI"],".mp3")) != false))
{
// It's a MP3 file
$JingleNumber = $this->AddURIToQueue($jingle_file);
$TrackNumber = $this->AddURIToQueue($file);
$this->ChangeTrack($JingleNumber);
$this->Play();
sleep(2);
while ($this->GetTransportInfo() == "PLAYING") {}
$this->Pause();
$this->SetVolume($actual['volume']);
$this->SetMute($actual['mute']);
$this->ChangeTrack($actual['track']["TrackNumberInQueue"]);
$this->SeekTime($actual['track']["RelTime"]);
$this->RemoveTrackFromQueue($TrackNumber);
$this->RemoveTrackFromQueue($JingleNumber);
}
else
{
//It's a radio / or TV (playbar) / or nothing
$this->SetQueue($jingle_file);
$this->Play();
sleep(2);
while ($this->GetTransportInfo() == "PLAYING") {}
$this->Pause();
$this->SetQueue($file);
$this->Play();
sleep(2);
while ($this->GetTransportInfo() == "PLAYING") {}
$this->Pause();
$this->SetVolume($actual['volume']);
$this->SetMute($actual['mute']);
$this->SetQueue($actual['track']["TrackURI"]);
}
if (strcmp($actual['status'],"PLAYING") == 0)
$this->Play();
return true;
}
fonction qu'il faut appeler dans un script de ce type :
- Code : Tout sélectionner
<?php
// Exemple de l'utilisation de la fonction Text-to-speech avec Jingle
require("sonos.class.php");
$IP_sonos_1 = "192.168.0.XX"; // ip du sonos à faire parler
$directory = "192.168.0.XX/XXXX/sonos"; // Indiquer ici le dossier partagé contenant les scrips PHP sonos (et qui contiendra le sous-dossier audio)
$volume = 0;
$force_unmute = 0;
$jingle = 'sf_sonnette_04.mp3'; // le nom du fichier mp3 (jingle) à placer à la racine du dossier 'audio'
if (isset($_GET['force_unmute'])) $force_unmute = $_GET['force_unmute']; // Force la désactivation de la sourdine. Optionnel
if (isset($_GET['volume'])) $volume = $_GET['volume']; // Niveau sonore. Optionnel.
$message = $_GET['message']; // Message à diffuser
//Instanciation de la classe
$sonos_1 = new SonosPHPController($IP_sonos_1);
$sonos_1->PlayTTSJingle($message,$directory,$volume,$force_unmute,$jingle); //Lecture de l'annonce
?>
et en bonus le mp3 dont je me sers (et qui devrait être libre de droits..)