Reprise de la lecture d'une playlist
tchex opened this issue · 3 comments
Bonjour,
Je rencontre un problème avec les playlists :
Lorsque une playlist (de musiques en streaming via napster dans mon cas) est en cours (en lecture ou en pause) et que je demande une info à Sarah :
- sarah coupe la musique si nécessaire (ok)
- sarah me donne l'info vocalement (ok)
- une musique (toujours la même) ne faisant pas partie de la playlist est lancée, puis à la fin de cette musique, la playslist est lue (du début) (NOK)
En parallèle du plugin SONOS SARAH j'utilise un script php pour faire du TTS sur Sonos.
Il fonctionne bien, donc si ça peut aider il est là
- PHP class to control Sonos
- Forked from http://www.github.com/DjMomo/sonos
- Forked repo / updates from https://github.com/phil-lavin/sonos
et plus précisément la fonction playTTS
/**
* Play a TTS message
* @param string message
* @param string radio name display on sonos controller
* @param int volume
* @param string language
*/
public function PlayTTS($message,$directory,$volume=0,$unmute=0,$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);
if (((stripos($actual['track']["TrackURI"],"x-file-cifs://")) != false) or ((stripos($actual['track']["TrackURI"],".mp3")) != false))
{
// It's a MP3 file
$TrackNumber = $this->AddURIToQueue($file);
$this->ChangeTrack($TrackNumber);
$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);
}
else
{
//It's a radio / or TV (playbar) / or nothing
$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;
}
En tous cas chapeau pour votre travail ! c'est vraiment génial de pouvoir contrôler sonos avec la voix et faire parler sarah sur sonos !
Bon, qui se dévoue pour un essai gratuit sur napster^^ ?
Moi je ne file pas ma CB !
Edit: Je viens d'effectuer un test avec une playlist gg music, ca marche nickel.
Si c'est le mix j'ai de la chance il reprends une nouvelle chanson, si c'est une playlist à moi il continu là ou il était arrêté.
Je vais déjà réessayer avec un mp3 local, une playlist locale, une radio en streaming pour voir ce que ça donne.
Je vous dis rapidement.
Bonjour,
Je me suis permis de recoder la fonction callBackToSonos car elle ne fonctionnait pas correctement chez moi.
Pouvez-vous tester de votre côté ? merci
function callBackToSonos(message, lieu) {
console.log('CallBack To Sonos '+lieu+' requested : '+message);
// on genere le tts en wav
var exec = require('child_process').exec;
child = exec('cd plugins/sonos & ttstowav.vbs "'+message.replace(/[^a-zA-Z0-9éçè@êàâû€$£ù \.,()!:;'#-_^%*]/g, "")+'"',
function (error, stdout, stderr) {
if (error !== null) {
console.log('exec error: ' + error);
}
else {
var wavefile = 'http://'+configSarah.http.ip+':'+configSarah.http.port+'/assets/sonos/tempvoice.wav'
getTopology(function(){
// on récupère le volume actuel
getVolume(function(volumeinit) {
// On récupère le statut de lecture du sonos
GetTransportStatus (function(statusbefore) {
console.log('StatusBefore : '+statusbefore);
GetMediaInfo(function(media) {
GetInfosPosition(function(position) {
//console.log('trackuri : '+position.trackuri);
//console.log('tracknumber : '+position.tracknumber);
//console.log('trackreltime : '+position.reltime);
Pause(function () {
setVolume(configSonosPerso.volumeAnnonce, function () {
if(position.trackuri.match(new RegExp('x-file-cifs://(.*?)')) !=null || position.trackuri.match(new RegExp('npsdy:(.*?)')) !=null) {
// mp3 file ou steaming Napster (npsdy)
// ajoute le fichier wav à la fin de la liste de lecture
AddURIToQueue(wavefile,function(wavetracknumber) {
// va a la fin de la liste de lecture
Seek('TRACK_NR', wavetracknumber, function() {
// lis la piste (le fichier wav)
Play(function() {
//attend la fin de la lecture du fichier wav
waitTheEndPlay(function() {
setVolume(volumeinit, function () {
// retourne sur la piste précedement lue
Seek('TRACK_NR', position.tracknumber, function() {
// retourne à la position dans la piste précédement lue
Seek('REL_TIME', position.reltime, function() {
// retire le fichier wav de la liste de lecture
RemoveTrackFromQueue(wavetracknumber, function() {
// relance (ou pas) la lecture selon le statut d'origine
if (statusbefore != 'STOPPED' && statusbefore != 'PAUSED_PLAYBACK') {
Play(function() {
console.log('CallBack To Sonos ended - I put the music back on .. (mp3 or streaming)');
return;
});
}
else {
console.log('CallBack To Sonos ended - I keep music paused .. (mp3 or streaming)');
return;
}
});
});
});
});
});
});
});
});
}
else {
//It's a radio / or TV (playbar) / or nothing
SetQueue(wavefile,function() {
Play(function() {
waitTheEndPlay(function() {
setVolume(volumeinit, function () {
SetQueue(position.trackuri,function() {
if (statusbefore != 'STOPPED' && statusbefore != 'PAUSED_PLAYBACK') {
Play(function() {
console.log(''CallBack To Sonos ended - I put the music back on .. (radio)'');
return;
});
}
else {
console.log('CallBack To Sonos ended - I keep music paused .. (radio)');
return;
}
});
});
});
});
});
}
});
});
});
});
});
});
});
}
});
}