Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#51 Le 14/03/2010, à 21:10

ametaireau

Re : [script] couper la pub dans SPOTIFY

Il est aussi possible de te créer un compte github, de forker le repo de prono ou de moi, et ensuite d'utiliser le script newadd !

Github propose ensuite de gérer automatiquement les nouvelles modifs depuis les divers forks.

Hors ligne

#52 Le 19/03/2010, à 15:15

pronoiaque

Re : [script] couper la pub dans SPOTIFY

p6s a écrit :

du coté des windoziens ils ont aussi leurs scripts, je vais pas faire la liste ici c'est hors-sujet mais il y en a quand meme un que j'aimerais mentionner pour son approche radicalement différente, et qui n'a pas besoin de connaitre les noms des pubs :
http://www.autohotkey.com/forum/viewtopic.php?p=322844

le but du jeu etant de couper le son au debut de chaque titre. et s'il se met en pause on sait que c'est une pub, hop magie. Bref utiliser la force de son adversaire big_smile

pubpatterns pourrait prendre une retraite bien méritée, on aurait besoin que de la variable tilt pour stocker le titre.
s'il change, on coupe le sifflet et on teste si bibi est en pause
si oui on peut reutiliser la boucle pour augmenter le volume par paliers qu'on a deja dans le script
si non on remet le volume initial jusqu'au prochain changement de titre.

bon ça c'est en français, mais je cause pas python tongue

Excellente idée !!
C'est même plus simple. j'vais essayer de largué mon code bash et refaire ça en python,
Et accessoirement, ça permettra d'autoupdate la liste pour l'ancienne version !
Merci p6s

Dernière modification par pronoiaque (Le 19/03/2010, à 15:17)


"la télé commande" -  AntiPubs Spotify

Hors ligne

#53 Le 27/03/2010, à 14:26

p6s

Re : [script] couper la pub dans SPOTIFY

pronoiaque a écrit :

Excellente idée !!
C'est même plus simple. j'vais essayer de largué mon code bash et refaire ça en python,
Et accessoirement, ça permettra d'autoupdate la liste pour l'ancienne version !
Merci p6s

De rien, et je croise les doigts pour la suite cool

Hors ligne

#54 Le 08/04/2010, à 19:01

p6s

Re : [script] couper la pub dans SPOTIFY

j'aime bien la biere blanche mais la pub Hoegaarden tous les 1/4 d'heure, ça va bien cool
a rajouter en liste donc :
Spotify - In Beve – Hoegaarden

Dernière modification par p6s (Le 08/04/2010, à 19:02)

Hors ligne

#55 Le 08/04/2010, à 20:15

pronoiaque

Re : [script] couper la pub dans SPOTIFY

pub added... enfin supprimée smile
Ma version python piétine, dsl :-(


"la télé commande" -  AntiPubs Spotify

Hors ligne

#56 Le 19/04/2010, à 19:11

antismap

Re : [script] couper la pub dans SPOTIFY

Le script ne marche pas chez moi, peut être parce que j'ai plusieurs cartes son.

17/11/2009: Choix possible entre différentes cartes son (-D hw:0 par défaut )

oui mais comment ?
Sinon si j'ai bien compris, il faut lancer spotify d'abord, puis le script. Chez moi il se lance, reste ouvert mais il ne fait rien.

Hors ligne

#57 Le 19/04/2010, à 19:27

Dededede4

Re : [script] couper la pub dans SPOTIFY

J'essaye le script ! smile

Ça coupe le son d'uniquement spotify ou le son de tout le système ?

Dernière modification par Dededede4 (Le 19/04/2010, à 19:28)


N'hésitez pas à me contacter sur jabber : dededede4(at)jabber.ubuntu-fr.org
Bill gate ? Il adore linux, d'ailleurs il est toujours habillé en pingouin.

Hors ligne

#58 Le 21/04/2010, à 22:09

p6s

Re : [script] couper la pub dans SPOTIFY

antismap a écrit :

Le script ne marche pas chez moi, peut être parce que j'ai plusieurs cartes son.

17/11/2009: Choix possible entre différentes cartes son (-D hw:0 par défaut )

oui mais comment ?
Sinon si j'ai bien compris, il faut lancer spotify d'abord, puis le script.

non vous lancez le script et c'est lui qui lance spotify.
et comme il recherche les pubs dans les noms des fenetres ouvertes, avoir l'explorateur ouvert sur le dossier spotify ou une page web ouverte sur un sujet spotify pendant qu'on fait tourner le bouzin , c'est quasiment s'assurer que ça ne marchera pas cool

Dededede4 a écrit :

J'essaye le script ! smile

Ça coupe le son d'uniquement spotify ou le son de tout le système ?

de tout le systeme il me semble ce qui certes peut etre chiant pour les gamers par exemple qui veulent laisser spotify en fond. derriere les explosions ou les bruits de moteur wink

Dernière modification par p6s (Le 21/04/2010, à 22:29)

Hors ligne

#59 Le 24/04/2010, à 13:07

antismap

Re : [script] couper la pub dans SPOTIFY

Chez moi le script ne lance pas Spotify. Quand je le lance, il se termine une demi seconde après sans rien faire.

Hors ligne

#60 Le 24/04/2010, à 13:37

pronoiaque

Re : [script] couper la pub dans SPOTIFY

C'est " normal "

Certain utilisateurs préfère lancer spotify normalement et le script à la main après.
Si tu veux lancer spotify automatiquement il faut enlever le commentaire (#) sur cette ligne :

env WINEPREFIX="/home/$user/.wine" wine 2>/dev/null "C:\Program Files\Spotify\spotify.exe"&

"la télé commande" -  AntiPubs Spotify

Hors ligne

#61 Le 28/04/2010, à 12:22

Turkal

Re : [script] couper la pub dans SPOTIFY

Tout d'abord merci pour ce script !

J'ai voulu intégrer une pub manuellement grâce à la commande que tu as donné en page 2 :

pronoiaque a écrit :

echo `cat spotify.pub`"|"`wmctrl -l | grep Spotify | cut -d" " -f 5-500` >> ~/spotify.pub

Le problème c'est que du coup dans mon ~/spotify.pub ce n'est pas seulement le nom de la nouvelle pub qui est recopié mais aussi tout ce qui était écrit avant.

Par exemple si mon spotify.pub est composé de :

Spotify – Spotify|Spotify - Spotify|Spotify - Sony Music

après avoir lancé la commande je me retrouve avec :

Spotify – Spotify|Spotify - Spotify|Spotify - Sony Music

Spotify – Spotify|Spotify - Spotify|Spotify - Sony Music|Spotify - E.Leclerc – E.Leclerc

Est-ce qu'il y a un moyen de modifier la commande pour que ça ne se produise pas ? Je n'ai pas réussi moi-même car j'avoue avoir du mal à comprendre son fonctionnement.

Sinon, tu peux rajouter ces deux pubs là :

Spotify - Digitick/SFR Prince – SFR Prince|Spotify - E.Leclerc – E.Leclerc

Hors ligne

#62 Le 28/04/2010, à 14:17

pronoiaque

Re : [script] couper la pub dans SPOTIFY

pub added... j'espere que ça ne plante pas avec le " \" dans le titre


"la télé commande" -  AntiPubs Spotify

Hors ligne

#63 Le 28/04/2010, à 20:41

p6s

Re : [script] couper la pub dans SPOTIFY

j'entends plus Prince en tous cas, je sais pas si c'est parce qu'ils ont déjà vendu toutes les places ou quoi, mais ça fait du bien quand ça s'arrête cool
Sinon ça marche aussi toujours avec le gros update de Spotify (0.4.3)
j'ai l'impression qu'il reste suffisamment de bugs pour qu'ils aient arrete les updates en masse (meme si la raison officielle nous vend une chanson différente...peu importe), d'ici quelques jours tout le monde l'aura de toute façon. Et pour les autres qu'ont pas envie d'attendre , c'est pas les sites (legaux) de telechargement qui manquent

le meilleur changement ? on peut jouer AUSSI ses fichiers mp3 en local...et donc se faire des playlists "mixtes" avec fichiers streamés/fichiers maison cool

le reste c'est des conneries pour facebookeux, mais il en faut pour tous les gouts tongue

ah et sinon ca marche po sous wine la lecture des fichiers en local...la team spotify ayant décidé que le driver wine pour les mp3 était trop instable, c'est bloqué d'office (ca renvoie une erreur de "decodage. peut pas jouer la ziq" ou quelque chose comme ça

qu'à cela ne tienne, certains ont déjà trouvé la parade sur getsatisfaction :
http://getsatisfaction.com/spotify/topics/spotify_under_wine_unable_to_playback_local_files

Dernière modification par p6s (Le 28/04/2010, à 20:43)

Hors ligne

#64 Le 02/05/2010, à 00:30

p6s

Re : [script] couper la pub dans SPOTIFY

le script ne semble plus adapté à lucid, snif cool
la detection marche toujours, mais c'est apres que ca coince :
.ca reste en pause tant qu'on le force pas à lire la pub
.apres la pub defile bien en silence...mais le morceau suivant reste avec le curseur de volume au minimum...
je sais pas si on peut arranger le coup juste en modifiant les seuils ou autre chose (c'est vrai que l'applet du volume a plus du tout la meme tete...)

Hors ligne

#65 Le 02/05/2010, à 10:50

p6s

Re : [script] couper la pub dans SPOTIFY

j'ai regardé ce qui se passait en tapant alsamixer dans le terminal, et j'ai vu un truc bizarre :

si on monte / descend le volume avec les fleches sur "Master", ca répond correctement

en revanche sur "PCM" , il fait un truc rigolo : baisser le volume marche dans la mesure où ça fait baisser le master, MAIS le compteur pcm proprement dit reste bloqué à 100. (pour etre précis, il se remet tout seul graphiquement à 100 (sans que ça change le volume master cette fois) des qu'on essaie de descendre en dessous de 97)

sanstitrejxj.png

Résultat quand on veut remonter le volume PCM, il ne peut pas puisqu'il considère qu'il est déjà au maximum. lol


je sais pas si c'est considéré comme un "bug lucid" ou autre chose, mais y'a un truc à décoincer là...
et ça me parait plus qu'une piste pour expliquer pourquoi le volume ne remonte plus apres les pubs sur lucid...
après quant à adapter le script (si nécessaire), je laisse ça aux gens compétents cool

Dernière modification par p6s (Le 02/05/2010, à 10:56)

Hors ligne

#66 Le 06/05/2010, à 18:34

p6s

Re : [script] couper la pub dans SPOTIFY

si ça interesse quelqu'un, j'ai essayé d'adapter le script python de la premiere page à la derniere version de spotify (0.4.3) qui a une certaine capacité d'autodefense par rapport aux scripts squeezeurs de volume cool


#!/usr/bin/env python

# -*- coding: utf-8 -*-
#
# Pour mettre automatiquement en sourdine les pubs audio de Spotify
#
# . URL : http://nils.hamerlinck.fr/spotify_mute_audio_ads.py
# . Adaptaté pour Spotify 0.4 (&au dela j'espere)
# . Version : 20010506
# . Tags : spotify, mute, ads, pub
# . Dépendances : python-wnck, python-alsaaudio


import codecs, locale, os, sys
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
import gtk
import wnck
import re
import alsaaudio
import time

RE_ADS = re.compile('Spotify - Spotify|Spotify - Sony Music|Spotify - Universal Music|Spotify - EMI|Spotify - Unicef|Spotify - In Beve|Spotify - Hoegaarden|Spotify - E.Leclerc')

mixer = alsaaudio.Mixer('Master')
muted = False
halfmute = False

def window_name_changed(window):
    global muted,halfmute

    name = window.get_name()
    print name, 

    
    if RE_ADS.search(name):  #Pub trouvée
        print 'AD'

        if not muted:
            mixer.setvolume(25)
            muted = True
            halfmute = False

    elif len(name) < 10:     # Fenetre Spotify Anti-script

         mixer.setvolume(50)
         muted = False
         halfmute = True
         time.sleep(1.6)    
        
    else:                    #Musique
        print
        if (muted or halfmute):
            mixer.setvolume(100)
            muted = False
            halfmute = False

 
def main():
    screen = wnck.screen_get_default()

    while gtk.events_pending():
        gtk.main_iteration()

    found = False
    for window in screen.get_windows():
        if window.has_name():
            name = window.get_name()
            if 'Spotify' in name:
                window.connect('name_changed', window_name_changed)
                found = True
                break

    if found:
        gtk.main()

    else:
        print 'Spotify not found.'

if __name__ == '__main__':
    main()

NOTES EN VRAC :

.faut lancer spotify AVANT le script

.et evidemment fermer toute autre fenetre ou apparaitrait le mot spotify pendant que ça tourne (explorateur de fichiers ou page web, y compris celle-ci), sinon il retrouve plus ses petits.

.j'ai lu mon premier tutorial python hier soir et je connais quasiment rien en programmation (heureusement que j'avais la base du premier script en page 1, j'ai juste du adapter la partie qui reagit aux titres dans la fenetre spotify), du coup c'est probablement serieusement ameliorable, au moins en syntaxe tongue

.j'ai fixé des volumes (pourcentages) directement, la méthode du "volume remonté par paliers" développée dans ce thread semblant serieusement compromise avec la nouvelle version de spotify.

.le gros morceau ici ce sont les seuils de pause (constatés sur mon systeme, j'espere que c'est pareil ailleurs...) :

- 25 % : c'est le seuil a partir duquel Spotify ne se met pas en pause sur les pubs. Ca a l'avantage d'etre encore quasi inaudible.
-50 % . Ca c'est la nouveauté avec le dernier spotify. Si vous mettez le volume au plancher precedent sur une pub, ça se met aussi en pause comme si vous le mettiez à zero. au niveau du titre de la fenetre, on voit que ca passe quasiment instantanement du message à juste "spotify" si on veut squeezer la pub.
il faut donc faire les choses en 2 temps maintenant : baisser au minimum possible sur cette "fenetre de blocage", puis baisser au vrai minimum quand on revient sur la pub.
Et ca va jongler comme ça entre la vraie pub et la fenetre de blocage pendant tout le spot.
Apres c'est juste une question de timing, pour qu'il ne reteste pas la page de blocage de suite et foute la smala, je suis obligé d'ajouter un Sleep

probleme : si le sleep est trop court, ça ne marche plus, et s'il est trop long, vous pouvez subir la pub ou le debut du morceau suivant a volume reduit sur le dernier intervalle.

enfin bref, une seconde de pub a mi-volume, c'est pas cher payé smile

Dernière modification par p6s (Le 06/05/2010, à 18:42)

Hors ligne

#67 Le 16/05/2010, à 01:25

lasl92260

Re : [script] couper la pub dans SPOTIFY

J'ai récemment rejeté un coup d'œil à ce script…
J'ai rencontré un problème avec ce dernier. En effet, c'est le volume PCM qui est contrôle, or pulseaudio (en config normale) empêche ce contrôle…
De plus le PCM me sert de limiteur de volume (toujours réglé à 30% au maximum afin de ne pas exploser les vitres de la maison quand je tourne la molette de mon clavier (qui gère le master))

L'idée m'est alors venue de modifier le script pour utiliser les fonctionnalités de pulseaudio plutôt que de luter contre sa gestion sauvage des contrôles de volume…
De plus cela simplifie le script car spotify ne détecte pas si le flux pulseaudio de wine est en sourdine… même plus besoin de modifier le volume et de vérifier si spotify ne s'est pas mis en pause (testé jusqu'à la version 4.3)

voilà donc une version draft du script (bash) avec les quelques modifications apportées…
Je ferai du trie dans tout ça demain, un peu d'optimisation, et je verrai aussi s'il n'y as pas un endroit plus approprié pour le mettre ligne.

#!/bin/bash
###
### Sous license GPL v2
### 
### Auteurs : 
### - pronoiaque at gmail dot com
### - aidos
### - alexis at spiral-project dot org
### Contributeurs:
### - lasl92260
###
### Variables et lancement de Spotify
###

declare -i volume
declare -i tagueule
declare -i debug
declare -i tempmessage

debug=1
tempmessage=""
tagueule=0
user=`whoami`


##################################################################"
### Est-ce que les packages necessaires sont installés ?
###

if [ ! -x /usr/bin/wmctrl ] ; then
        zenity --question --text "Le package <b>wmctrl</b> n'est pas detecté.\nVoulez-vous l'installer ?"
        if [ $? == "0" ] ; then
                gksudo aptitude install wmctrl
        fi
fi

if [ ! -x /usr/bin/amixer ] ; then
        zenity --question --text "Le package <b>alsa-utils</b> n'est pas detecté.\nVoulez-vous l'installer ?"
        if [ $? == "0" ] ; then
                gksudo aptitude install alsa-utils
        fi
fi

#env WINEPREFIX="/home/$user/.wine" wine 2>/dev/null "C:\Program Files\Spotify\spotify.exe"&


###################################
###  On récupère la liste des Pubs
###
### ( Merci de me signaler s'il manque des pubs, si possible avec leur titre )
###
if [ $1 ] ; then
  if [ $1 = "local" ] ; then
    pubpatterns=$(cat spotify.pub)
    else
	  pubpatterns=$(wget -O - "`echo $1`" 2>/dev/null)
  fi
  else
	pubpatterns=$(wget -O - http://github.com/pronoiaque/Spotify.sh/raw/master/spotify.pub 2>/dev/null)

fi

######################################## added function
########################################
### On crée une fonction qui récupère
### l'index du flux audio dans pulseaudio
### Note: cette fonction retourne une valeur, mais aucune variable $trucmuche
###	  il faut l'utiliser de la manière suivante «echo `get_pide`», c'est un choix
###	  cela évite de réutiliser par inadvertance un pa_sink_index trop vieux et démodé…
### ( Ne fonctionne qu'avec une seule instance de spotify bien sûr )
### ( et doit être appelé juste avant chaque utilisation car à chaque changement de musique, un nouveau flux est créé dans pulseaudio, on pourrait peut-être travailler en fonction de application.name, mais j'ai la flemme de relire le man(qui n'en est pas un (pulseaudio "help"))(jolies les parenthèses imbriquées))
###

function get_pide
{
local i
local ii
local pide
local pa_sink_index
pide=`pacmd list-sink-inputs | egrep "application\.name|application\.process\.id" | grep application\.process\.id | sed 's/.*application\.process\.id\ =\ "//' | sed 's/"//'`

for i in $pide
do
ii=`ps aux | grep $i | grep spotify`
if [ -n "$ii" ]; then
#echo $i;
pa_sink_index=`pacmd list-sink-inputs | egrep "index|application\.process\.id" | grep -B1 $i | grep index | sed 's/.*index: //'`
fi
done
echo "$pa_sink_index"
}



########################################
### On crée un fonction qui détecte le titre de la fenêtre Spotify
### et qui crée un "ads" non NULL si un pub est détectée
###

function grab_titre
{
	titre=$(echo `wmctrl -l | grep Spotify | cut -d" " -f 5-500`)
	ads=$(echo `echo $titre | grep -iE "$pubpatterns"`)
	
	if [ "$ads" = "" ] ; then
		ads=$(echo `echo $titre | grep "Spotify - Spotify"`)
	fi
}

########################################
### Fonction de debug
###

function debug
{
	if [ $debug = 1 ] ; then
		echo $1
	fi
}


######################################## deleted functions
###  à voir si on supprime totalement, on pourrait laisser le choix de simplement baisser le volume à 60% de ce qu'il était afin d'entendre quand même les pubs, mais pas si fort (surtout quand on écoute spotify à fond)
###  get_user_vol
###  put_user_vol
###  setvolume
### on remplace par les deux fonctions suivantes
### il faudra quand même vérifier s'il n'y a pas de conflit/bug avec earcandy (je l'ai installé une fois à l'UP 9.10 de paris)

function coupeleson
{
pacmd "set-sink-input-mute `get_pide` 1"
}

function remetleson
{
pacmd "set-sink-input-mute `get_pide` 0"
}


function ismuted
{
local muteoupas
muteoupas=`pacmd list-sink-inputs | egrep "index|muted" | grep -A1 \`get_pide\` | grep muted | sed 's/.*muted: //'`
	if [ $muteoupas = "yes" ] ; then
	muteoupas=1
	elif [ $muteoupas = "no" ] ; then
	muteoupas=0
	fi
echo "$muteoupas"
}


###################################################
### Début de la Boucle - temps que Spotify tourne
### !! non !! syntaxe : on ne dit pas “temps” mais “tant que Spotify tourne”
while [ ! "`ps x | grep spotify.exe | grep -v grep`"  = "" ] ;
  do

	###############################
	## Recuperation titre
	##
	grab_titre

##	##############################################################################
	### Si une pub en PLAY est detectée avec un volume fort
	### - On baisse le volume au mininum -> Mise en PAUSE
	### - Ajout d'un trigger (ferme) "tagueule"

	#if [ ! "$ads" = "" ] && [ ! "$titre" = "Spotify" ] && [ $volume -gt 7 ] ; then
	#	debug "pub en cours, on baisse le son parce qu'il est trop fort'"
	#	volume=1
	#	setvolume $volume
	#	sleep 0.4
	#	tagueule=1
	#	grab_titre
	#fi
	
	if [ ! "$ads" = "" ] && [ ! "$titre" = "Spotify" ] && [ `ismuted` = 0 ] ; then
		debug "pub en cours, on coupe le son parce qu'il est trop fort'"
		coupeleson
		tagueule=1
		grab_titre
	fi

##	#####################################################
	### Si Spotify est en PAUSE + trigger
	### - On augmente le volume jusqu`à la mise en PLAY
	###
	
	###inutile car il n'y a plus de mise en pause
	#while [ "$titre" = "Spotify" ] && [ $tagueule = 1 ] ;
	# do
	# 	debug "spotify est en pause, mais une pub est en cours, on monte un peu le son"
	#	volume=$((`echo $volume` + 1))
	#	setvolume $volume
	#	sleep 0.5
	#	grab_titre
	#done



##	## Si la pub est en PLAY à un volume reduit
	## - On la laisse tourner
	##
	#while [ ! "$ads" = "" ] && [ ! "$titre" = "Spotify" ] && [ $tagueule = 1 ] && [ $volume -le 7 ] ;
	# do
	# 	debug "la pub est en train de se lire"
	#	grab_titre
	#	sleep 0.5
	#done

	while [ ! "$ads" = "" ] && [ ! "$titre" = "Spotify" ] && [ $tagueule = 1 ] && [ `ismuted` = 1 ] ;
	 do
	 	debug "la pub est en train de se lire"
		grab_titre
		sleep 0.5
	done

##	###############################################
	## S'il n'y a plus de pub
	## - On remets le son

	#if [ "$ads" = "" ] && [ $tagueule = 1 ] ; then
	#	debug "la pub est terminée, on remets le son"
	#	put_user_vol
	#	tagueule=0
	#fi
	
	if [ "$ads" = "" ] && [ $tagueule = 1 ] ; then
		debug "la pub est terminée, on remets le son"
		remetleson
		tagueule=0
	fi

##	################################
	## Recuperation du Volume
	##
	#if [ $tagueule = 0 ] ; then
	#	get_user_vol
	#	volume=$VolPCM
	#fi

	sleep 0.2
done
exit 0

###On pourrait aussi envosager de ne modifier que le volume plutôt que de couper carrément avec la syntaxe suivante:
#volume_level=65536 #65536 = 100%
#pacmd "set-sink-input-volume get_pide $volume_level"

Hors ligne

#68 Le 16/05/2010, à 16:57

p6s

Re : [script] couper la pub dans SPOTIFY

joli smile
Ca marche pas mal. Meme si ca coupe pas le son assez "vite" , on a genre 1/5 de seconde de pub a a plein volume d'abord.
sinon le script me retourne ça à l'execution pendant une lecture de pub :

./coupulse.sh: line 145: [: = : opérateur unaire attendu
./coupulse.sh: line 147: [: = : opérateur unaire attendu
./coupulse.sh: line 179: [: = : opérateur unaire attendu
pub en cours, on coupe le son parce qu'il est trop fort'
Welcome to PulseAudio! Use "help" for usage information.
>>> >>> la pub est en train de se lire
(...)la pub est en train de se lire
la pub est terminée, on remet le son
Welcome to PulseAudio! Use "help" for usage information.
>>> >>>

je me demande si c'est pas ce "welcome to pulseaudio" justement qui fait qu'il ne réagit pas assez vite (ça veut dire qu'il relance le daemon pulse à chaque fois?)... et s'il y a un moyen de forcer pulse à arreter de refaire les présentations dans ce cas cool

Dernière modification par p6s (Le 16/05/2010, à 17:33)

Hors ligne

#69 Le 16/05/2010, à 22:21

lasl92260

Re : [script] couper la pub dans SPOTIFY

C'est peut-être le

sleep 0.2

qui se trouve à la fin de la boucle (il y était déjà, je ne l'ai pas rajouté) (en plus 0.2sec=1/5sec, ça correspondrait bien, mais je ne me rappelles plus comment c'était avant, la dernière fois que j'ai utilisé le script original c'était il y a un an, lorsqu'on m'avait prêté un PC portable pendant deux semaine afin que j'y installe ubuntu notamment)


Mais je pense que niveau optimisation ce qui fait perdre le plus de temps, c'est l'utilisation de l'index qui change à chaque fois… il faut donc faire plein de “grep” et de “sed”  avec des expressions régulières… je n'ai pas trouvé d'autre moyen plus direct de récupérer les infos sur ce que fait pulseaudio.
(Le welcome to pulseaudio est lié à l'utilisation de la commande “pacmd” qui se comporte un peu comme ftp et qui nous fourni une espèce d'invite de commande, je ne pense pas que ça fasse perdre en perfs, c'est juste moche)

J'ai réussi à en virer deux trois, mais je ne sais pas comment je pourrais benchmarker ce script pour voir où le temps est perdu, et puis je ne sais pas s'il existe des opérateurs de remplacement équivalents aux fonction du type “ereg_replace()” (en php) comme   “str_replace” qui ne prendrais pas en compte les expression régulières, juste une bête chaine de caractère et qui serait ainsi plus performant… (vu que les noms sont toujours les mêmes ou presque…)

Aprés, pour remplacer “sleep 0.2” je me demande s'il n'existerai pas une commande pour «attendre un évenement», genre un:

wait[ $truc = "machainedecaractères" ]

et qui ferai dormir le script comme un “sleep” jusq'à ce que la condition  “$truc = "machainedecaractères"” soit remplie.
Parce que si on vire ce sleep, la boucle tournera à fond et bouffera pas mal de perfs pour rien…

Edit: j'ai redirigé la sortie de pacmd vers /dev/null, c'est plus joli comme ça… voici une version un peu plus améliorée, je re-reggarderai pas les choses avant mardi soir…
et puis il reste toujours les erreurs du type

Usage: grep [OPTION]... MOTIF [FICHIER]...
Pour en savoir davantage, faites: « grep --help ».
xxxxxx: line 000: [: = : opérateur unaire attendu

j'essayerai de diagnostiquer ça mardi si j'ai le temps…

#!/bin/bash
###
### Sous license GPL v2
### 
### Auteurs : 
### - pronoiaque at gmail dot com
### - aidos
### - alexis at spiral-project dot org
### Contributeurs:
### - lasl92260
###
### Variables et lancement de Spotify
###

declare -i tagueule
declare -i debug

debug=1
tagueule=0
user=`whoami`


##################################################################"
### Est-ce que les packages necessaires sont installés ?
### (plus besoin de vérifier si alsa-utils est bien installé)
### (Il faudrait toutefois peut-être vérifier que pulseaudio est bien installé et utilisé)
###

if [ ! -x /usr/bin/wmctrl ] ; then
        zenity --question --text "Le package <b>wmctrl</b> n'est pas detecté.\nVoulez-vous l'installer ?"
        if [ $? == "0" ] ; then
                gksudo aptitude install wmctrl
        fi
fi

#env WINEPREFIX="/home/$user/.wine" wine 2>/dev/null "C:\Program Files\Spotify\spotify.exe"&


###################################
###  On récupère la liste des Pubs
###
### ( Merci de me signaler s'il manque des pubs, si possible avec leur titre )
###
if [ $1 ] ; then
  if [ $1 = "local" ] ; then
    pubpatterns=$(cat spotify.pub)
    else
	  pubpatterns=$(wget -O - "`echo $1`" 2>/dev/null)
  fi
  else
	pubpatterns=$(wget -O - http://github.com/pronoiaque/Spotify.sh/raw/master/spotify.pub 2>/dev/null)

fi

######################################## added function
########################################
### On crée une fonction qui récupère
### l'index du flux audio dans pulseaudio
### Note: cette fonction retourne une valeur, mais aucune variable $trucmuche
###	  il faut l'utiliser de la manière suivante «echo `get_pide`», c'est un choix
###	  cela évite de réutiliser par inadvertance un pa_sink_index trop vieux et démodé…
### ( Elle doit être appelé juste avant chaque utilisation car à chaque changement de musique, un nouveau flux est créé dans pulseaudio, on pourrait peut-être travailler en fonction de application.name, mais j'ai la flemme de relire le man(qui n'en est pas un (pulseaudio "help"))(jolies les parenthèses imbriquées))
### ( Ne fonctionne qu'avec une seule instance de spotify bien sûr )
###

function get_pide
{
local i
local ii
local pide
local pa_sink_index
#
pide=`pacmd list-sink-inputs | grep application\.process\.id | sed 's/.*\ "\([0-9]*\).*/\1/'`

for i in $pide
do
    ii=`ps aux | grep $i | grep spotify`
	if [ -n "$ii" ]; then
	pa_sink_index=`pacmd list-sink-inputs | egrep "index|application\.process\.id" | grep -B1 $i | grep index | sed 's/.*index: //'`
	fi
done

echo "$pa_sink_index"
}




########################################
### On crée un fonction qui détecte le titre de la fenêtre Spotify
### et qui crée un "ads" non NULL si un pub est détectée
###

function grab_titre
{
	titre=$(echo `wmctrl -l | grep Spotify | cut -d" " -f 5-500`)
	ads=$(echo `echo $titre | grep -iE "$pubpatterns"`)
	
	if [ "$ads" = "" ] ; then
		ads=$(echo `echo $titre | grep "Spotify - Spotify"`)
	fi
}

########################################
### Fonction de debug
###

function debug
{
	if [ $debug = 1 ] ; then
		echo $1
	fi
}


######################################## deleted functions
###  à voir si on supprime totalement, on pourrait laisser le choix de simplement baisser le volume à 60% de ce qu'il était afin d'entendre quand même les pubs, mais pas si fort (surtout quand on écoute spotify à fond)
###  get_user_vol
###  put_user_vol
###  setvolume
### on remplace par les deux fonctions suivantes
### il faudra quand même vérifier s'il n'y a pas de conflit/bug avec earcandy (je l'ai installé une fois à l'UP 9.10 de paris)

function coupeleson
{
pacmd "set-sink-input-mute `get_pide` 1" > /dev/null
}

function remetleson
{
pacmd "set-sink-input-mute `get_pide` 0" > /dev/null
}


function ismuted
{
local muteoupas
muteoupas=`pacmd list-sink-inputs | egrep "index|muted" | grep -A1 \`get_pide\` | grep muted | sed 's/.*muted: //'`
	if [ $muteoupas = "yes" ] ; then
	muteoupas=1
	elif [ $muteoupas = "no" ] ; then
	muteoupas=0
	fi
echo "$muteoupas"
}





###################################################
### Début de la Boucle - temps que Spotify tourne
### !! non !! syntaxe : on ne dit pas “temps” mais “tant que Spotify tourne”
while [ ! "`ps x | grep spotify.exe | grep -v grep`"  = "" ] ;
  do

	###############################
	## Recuperation titre
	##
	grab_titre

##	##############################################################################
	### Si une pub en PLAY est detectée et si elle n'est pas “muted”
	### - On coupe le son
	### - Ajout d'un trigger (ferme) "tagueule"

	if [ ! "$ads" = "" ] && [ ! "$titre" = "Spotify" ] && [ `ismuted` = 0 ] ; then
		debug "pub en cours, on coupe le son parce qu'il est trop fort'"
		coupeleson
		tagueule=1
		grab_titre
	fi

##	## Si la pub est en PLAY et est “muted”
	## - On la laisse tourner
	##


	while [ ! "$ads" = "" ] && [ ! "$titre" = "Spotify" ] && [ $tagueule = 1 ] && [ `ismuted` = 1 ] ;
	 do
	 	debug "la pub est en train de se lire"
		grab_titre
		sleep 0.5
	done

##	###############################################
	## S'il n'y a plus de pub
	## - On remets le son

	if [ "$ads" = "" ] && [ $tagueule = 1 ] ; then
		debug "la pub est terminée, on remets le son"
		remetleson
		tagueule=0
	fi

     sleep 0.2
done
exit 0

###On pourrait aussi envosager de ne modifier que le volume plutôt que de couper carrément avec la syntaxe suivante:
#volume_level=65536 #65536 = 100%
#pacmd "set-sink-input-volume get_pide $volume_level"

Dernière modification par lasl92260 (Le 16/05/2010, à 23:54)

Hors ligne

#70 Le 26/05/2010, à 21:35

Dmaille

Re : [script] couper la pub dans SPOTIFY

Une pub vient de troubler ma tranquilité : Darty | Darty est le coupable, lol !

Encore merci pour ce script et ces évolutions...

Hors ligne

#71 Le 01/06/2010, à 20:35

Skymil

Re : [script] couper la pub dans SPOTIFY

Hello,
Il y a un problème lorsqu'on utilise une liste locale. Cela vient du wget

pubpatterns=$(wget -O - "`echo $1`" 2>/dev/null)

mais je ne m'y connais pas assez pour le modifier. Toujours est-il que le script ne prend pas en compte la liste locale (et donc bloque toutes les musiques).

Hors ligne

#72 Le 02/06/2010, à 12:12

Jack_The_Red

Re : [script] couper la pub dans SPOTIFY

Chez moi les chansons marchent bien, et les pubs aussi sad
Le wget marche bien aussi.
À chaque pub, rien ne se passe du coté de spotify, mais j'ai plusieurs messages pour la même erreur en console. Comme dit précédemment, l'erreur est la suivante:

Usage: grep [OPTION]... MOTIF [FICHIER]...
Pour en savoir davantage, faites: « grep --help ».
/usr/bin/spotify.sh: line 139: [: = : opérateur unaire attendu
/usr/bin/spotify.sh: line 141: [: = : opérateur unaire attendu

Mais contrairement aux autres qui n'ont pas de son à ce moment, mon volume ne change pas, et ces trois lignes tournent en boucle dans ma console jusqu'à la fin de la pub.

Y a t-il un rapport avec ma carte son?

(pubs du moment:
Darty / Darty et SFR / SFR)

Hors ligne

#73 Le 07/07/2010, à 12:28

p6s

Re : [script] couper la pub dans SPOTIFY

pour ma part j'ajoute direct à la mano dans le script maintenant, je m'emmerde plus avec les listes en ligne.
Au dernier pointage inclus les pubs de la semaine ça donne :

Spotify - Beggars – MiA - Pre-order on iTunes|Spotify - Desigual – Kiss Tour|Spotify - Warner Home V – True Blood|Spotify - Nouvelles frontières – Promo été|Spotify - Warner Home Video – Blu Line|Spotify - Bouygues Telecom – Bouygues|Spotify - Renault – Clio Campus|Spotify - Renault – Renault|Spotify - Citroën – Citroën C1|Spotify - Citroën – Citroën C3|Spotify - Citroën – Citroën C4 Picasso|Spotify - Opel Cross – Opel Corsa|Spotify - Spotify|Spotify - Sony Music|Spotify - Universal Music|Spotify - EMI|Spotify - Unicef|Spotify - In Beve|Spotify - Hoegaarden|Spotify - Darty – Darty|Spotify - Siestes Electroniques – Siestes Electroniques


quand une nouvelle pub se pointe, ça ne prend que 2 secondes de copier/coller la ligne/l'intitutlé de la pub qui s'affiche dans le terminal...

Dernière modification par p6s (Le 07/07/2010, à 12:30)

Hors ligne

#74 Le 07/07/2010, à 13:27

pronoiaque

Re : [script] couper la pub dans SPOTIFY

Pubs commitées,
Ouais vraiment désolé, je maintiens plus la liste, j'utilise plus spotify, la honte smile


"la télé commande" -  AntiPubs Spotify

Hors ligne

#75 Le 18/11/2010, à 17:07

oreyoyo

Re : [script] couper la pub dans SPOTIFY

Bonjour,
Quelqu'un sous Maverick peut-il me dire si ce script (ou un équivalent sous Wine) fonctionne toujours ?
J'en ai essayé plusieurs depuis quelques jours mais en vain.
Merci d'avance
AML

Hors ligne