MediaMonkey-Bewertungen via Bluetooth

Veröffentliche deine funktionierenden Skripte und Funktionen

Moderator: jNizM

User avatar
Gerdi
Posts: 185
Joined: 03 Aug 2015, 18:48
Location: Germany
Contact:

MediaMonkey-Bewertungen via Bluetooth

24 Jan 2016, 17:55

Code: Select all

; dieses Skript wurde geschrieben um mit einem Bose Soundlink Mini II Lautsprecher
; mit der mittleren Taste in MediaMonkey Bewertungen via Bluetooth vorzunehmen.
; Es sollte aber auch mit anderen Bluetooth Geräten bzw. Tastaturen, welche die (virtuellen) Tasten
; 	Media_Prev
; bzw.
;	Media_Next
; unterstützen funktionieren.

; Voraussetzung:
; Das Gerät ist verbunden und kann {Media_Prev} senden. (3-mal kurz hintereinander die mittlere Bose-Taste drücken 
; im Folgenden mit Media_Prev abgekürzt.)
; Benutzung:
; Während ein Song läuft, wird mit Media_Prev die Bewertung angehoben.
; Wenn der Song schon eine Bewertung hat wird beim ersten mal nur die Bewertung ge-Beept. 
; 1 Beep enstpricht einem halben *
; Media_Next Beept die aktuelle Song-Bewertung, wechselt zum nächsten und Beept dann diesen.

MM := ComObjCreate("SongsDB.SDBApplication") ; anlegen/bekannt machen des Com-Objektes

Media_Prev::						; warten auf Hotkey
DiesesRating:=MM.Player.CurrentSong.Rating	; Bewertung des aktuellen Songs holen
DieserPfad:=MM.Player.CurrentSong.Path		; Pfad des aktuellen Songs holen
If(DiesesRating=-1 or (LastRating=DiesesRating and DieserPfad=LastPfad))	; Ist Bewertung noch frei?
{
	If(DiesesRating=-1)
		NeuesRating:=0				; wer die Bewertung 0-Sterne weglassen möchte kann hier NeuesRating:=10 einsetzen.
	else
		NeuesRating:=DiesesRating+10			; Neue Bewertung berechnen
	if(NeuesRating>100)				; und wieder von vorne	### eingefuegt 25.01.2016 ###
; Empfehlung fuer absichtliches Ueberrunden: Song fuers Bewerten anhalten (mittlere Bose-Taste 1-mal Druecken).
		NeuesRating:=0				; hier kann auch -1 fuer "Unbekannt" eingesetzt werden. ### eingefuegt 25.01.2016 ###
	MM.Player.CurrentSong.Rating:=NeuesRating	; Neue Bewertung zwischenspeichern
	MM.Player.CurrentSong.WriteTags			; Neue Bewertung schreiben
	sleep 1000
	DiesesRating:=MM.Player.CurrentSong.Rating	; jetztige Bewertung des aktuellen Songs holen
	LastRating:=DiesesRating
	LastPfad:=DieserPfad
}
else
{
	LastRating:=DiesesRating
	LastPfad:=DieserPfad
}
sleep 1000
gosub BewertungRueckmelden
return

; (2-mal kurz hintereinander die mittlere Bose-Taste drücken)  ; dieses Unterprogramm ist optional
Media_Next::							; warten auf Hotkey
DiesesRating:=MM.Player.CurrentSong.Rating	; Bewertung des aktuellen Songs holen
DieserPfad:=MM.Player.CurrentSong.Path		; Pfad des aktuellen Songs holen
LastPfad:=DieserPfad						; Pfad merken
gosub BewertungRueckmelden
sleep 500
MM.Player.Next							; Nächster Song
gosub BewertungRueckmelden
LastRating:=
return

BewertungRueckmelden:
DiesesRating:=MM.Player.CurrentSong.Rating	; Bewertung des aktuellen Songs holen
If(DiesesRating=0)						; 0-Bewertung rückmelden
	SoundBeep ,250,900

Beeps:=Round(DiesesRating/10)
Loop % Beeps							; Bewertung rückmelden
{
	SoundBeep,1000,400
	sleep 500
}
return
Viel Spass
Gerdi
Win 10 Home (x64) and Win 11 Pro N
https://github.com/Grrdi/ZackZackOrdner/archive/master.zip --> get folders on the quick
User avatar
Gerdi
Posts: 185
Joined: 03 Aug 2015, 18:48
Location: Germany
Contact:

Re: MediaMonkey-Bewertungen via Bluetooth

31 Jan 2016, 15:14

Habe noch ein paar Kleinigkeiten zugefuegt:
- aktuelle Song Bewertung absenken
- zum vorigen Song
- Logfile
- Fehlerbehandlung
- Hilfe

Code: Select all

; dieses Skript wurde geschrieben um mit einem Bose Soundlink Mini II Lautsprecher
; mit der mittleren Taste in MediaMonkey Bewertungen via Bluetooth vorzunehmen.
; Es sollte aber auch mit anderen Bluetooth Geraeten bzw. Tastaturen, welche die (virtuellen) Tasten
; 	Media_Prev
; bzw.
;	Media_Next
; unterstuetzen funktionieren.
; https://autohotkey.com/boards/viewtopic.php?f=10&t=13327		Gerdi
HilfeText=
(
Skript Hilfe

Voraussetzung:	MediaMonkey ist installiert, das Geraet ist verbunden 
und kann die Taste {Media_Prev} senden. (3-mal kurz hintereinander die mittlere Bose-Taste druecken.)
---------------------------------
. . .	Bewertung anheben
---------------------------------
Benutzung:
Waehrend ein Song laeuft, wird mit {Media_Prev} die Bewertung angehoben.
Wenn der Song schon eine Bewertung hat wird beim ersten mal nur die Bewertung ge-beept. 
1 Beep enstpricht einem halben *
{Media_Next} beept die aktuelle Song-Bewertung, wechselt (der Standart-
Funktionalitaet entsprechend) zum naechsten  und beept dann diesen.
---------------------------------
. .	zum naechsten Song
--------------------------------- 
Eine Umkehrung der Tastenfuktion kann erreicht werden, wenn zuegig die jeweils andere Taste folgt.
Uebertragen auf die mittlere Bose-Taste heist das in symbolisierter Schreibweise:
---------------------------------
. . .   . .	Bewertung absenken		(Tipp: Leere Bewertung wird zu *****)
. .   . . .	zum vorigen Song
---------------------------------
PS. die Standart-Funktionalitaet Pause / Start wurde nicht angeruehrt
---------------------------------
.	Pause / Start		(empfohlen bei hohen Bewertungen.)
--------------------------------- 

Diese Hilfe kann jederzeit uebers Tray-Menue geoeffnet werden.
)
#Persistent
FehlerLog:=false					; bei true erfolgen mehr Logeintraege
WarteAufTastenOption:=2000			; wer die 2.-Funktionalitaet der Tasten nicht hinbekommt kann mit diesem Parameter spielen
; WarteAufTastenOptionPrev:=0		; Zeile Aktivieren, um schneller zum naechsten Song zu springen (zurueckspringen wird dabei deaktiviert)
; WarteAufTastenOptionBewertungMinus:=0	; Zeile Aktivieren, um schneller Bewertungen anzuheben (absenken wird dabei deaktiviert)
LastMedeiaNextTime:=0
DieseMedeiaPrevTime:=0
DieseMedeiaNextTime:=0
LastMedeiaNextTime:=0
if(WarteAufTastenOptionPrev="")
	WarteAufTastenOptionPrev:=WarteAufTastenOption	; fuer 2.-Funktionalitaet der Tasten
if(WarteAufTastenOptionBewertungMinus="")
	WarteAufTastenOptionBewertungMinus:=WarteAufTastenOption	; fuer 2.-Funktionalitaet der Tasten
LogPath= %A_ScriptDir%\BewertungenViaMediaPrev.txt	; Pfad des Logfiles
IfWinNotExist,ahk_class TFMainWindow	
{									; MM ggf. nachstarten (kann mit Éinfuehrung des Befehls unten MM.ShutdownAfterDisconnect:=false entfallen)
	IfExist %LogPath%
	{
		FileReadLine,MmPath,%LogPath%,1	; MM-Start-Pfad aus erster Zeile des Logfiles holen
		IfExist %MmPath%
		{
			run, %MmPath%			; MM-Start
			sleep 15000
		}
	}
}
Try
{
MM := ComObjCreate("SongsDB.SDBApplication") ; anlegen/bekannt machen des Com-Objektes ; startet auch falls notwendig Media Monkey
; MM.ShutdownAfterDisconnect 
MmVersion:=MM.VersionString			; MediaMonkey-Version lesen
MM.ShutdownAfterDisconnect:=false	; Skriptende zieht MM nicht mit herunter. Naeheres siehe http://www.mediamonkey.com/wiki/index.php/Scripting_Tips_%26_Tricks#Interaction_with_MediaMonkey_from_outside
}
catch,e
	gosub MmNichtErreicht			; Fehlerbehandlung
IfNotExist %LogPath%				; Erststart
{
	LogUeberschrift:=true
	sleep 10000
	try
		MmPath:=MM.ApplicationPath "MediaMonkey.exe"
	catch,e
		gosub MmNichtErreicht		; Fehlerbehandlung
	FileAppend, %MmPath%`r`n,%LogPath% ; 1. Zeile des Logs wird auch fuer MM-Start verwendet.
	gosub SkriptHilfe				; anzeigen der Hilfe
}
FileAppend, %A_Now%	Skript-Start:	%A_ScriptFullPath%	MM-Version=%MmVersion%	AHK-Version=%A_AhkVersion%	Skript-Version=31.01.2016`r`n,%LogPath% ; Logfile-Eintrag
if LogUeberschrift
	FileAppend,`r`nWann	Rating	vor	nach	Pfad `r`n`r`n,%LogPath%	 ; Logfile-Eintrag
; TrayMenue
Menu, tray, add  ; Creates a separator line.
Menu, tray, add, Song-Details, ExplorerSelect  ; Tray-Menue Eintrag
Menu, tray, add, Log oeffnen, LogOeffnen  	; Tray-Menue Eintrag
Menu, tray, add, Skript-Hilfe, SkriptHilfe  	; Tray-Menue Eintrag
OnExit, ExitSub
return
; ----------------------------------- Ende Hauptprogramm -------------------------------
ExplorerSelect:						; fuer Menu Song-Infos
try DieserPfad:=MM.Player.CurrentSong.Path		; Pfad des aktuellen Songs holen 
catch,e
	gosub MMverbinden
; http://www.mediamonkey.com/wiki/index.php/SDBPlayer#ISDBPlayer_objects
Run, properties %DieserPfad%	; Datei-Eigenschaften oeffnen
sleep 400
WinWaitActive,ahk_class #32770,,5
IfWinActive,ahk_class #32770,Allgemein
	ControlSend,ahk_parent,{Ctrl Down}{tab}{Ctrl up},ahk_class #32770
sleep 200 ; fuer elegantere Loesung den Reiter Detail zu oeffnen waere ich dankbar.
IfWinActive,ahk_class #32770,Sicherheit
	ControlSend,ahk_parent,{Ctrl Down}{tab}{Ctrl up},ahk_class #32770
run, explorer.exe /select`,"%DieserPfad%"	; Explorer mit selektiertem Song oeffnen
return 
LogOeffnen:		; Anzeigen der Logdatei
IfExist %LogPath%
	run, %LogPath%
else
	MsgBox Der Log wurde entfernt.
return
SkriptHilfe:	; Anzeigen der Hilfe
MsgBox %HilfeText%
return
Media_Prev::						; warten auf Hotkey
LShift & RShift::					; Alternative direkt am PC
; <TastenWunsch ermitteln>
DieseMedeiaPrevTime:=A_TickCount
if FehlerLog
	FileAppend, % A_Now "	" A_LineNumber "	DieseMedeiaPrevTime  ->	" DieseMedeiaPrevTime "`r`n",%LogPath%
if(FirstButton="")
{
	FirstButton=Media_Prev
	if FehlerLog
		FileAppend, % A_Now "	" A_LineNumber "	FirstButton  ->	" FirstButton "`r`n",%LogPath%
}
else if(FirstButton="Media_Next")
{
	if FehlerLog
		FileAppend, % A_Now "	" A_LineNumber+1 "	return  ->	" "`r`n",%LogPath%
	return
}
sleep WarteAufTastenOptionBewertungMinus
if(A_TickCount-DieseMedeiaNextTime<2000 and FirstButton="Media_Prev")
{	; TastenWunsch Bewertung absenken
; </TastenWunsch ermitteln>
	if FehlerLog
		FileAppend, % A_Now "	" A_LineNumber "	BewertungsAdd  ->	" BewertungsAdd "`r`n",%LogPath%
	BewertungsAdd:=-10
	SoundBeep,3000,500
}
else
	BewertungsAdd:=10	; Bewertung anheben
try
{
	DiesesRating:=MM.Player.CurrentSong.Rating	; Bewertung des aktuellen Songs holen
	DieserPfad:=MM.Player.CurrentSong.Path		; Pfad des aktuellen Songs holen
}
catch,e
	gosub MMverbinden
If(DiesesRating=-1 or (LastRating=DiesesRating and DieserPfad=LastPfad))	; Ist Bewertung noch frei?
{
	If(DiesesRating=-1 and BewertungsAdd=10)
		NeuesRating:=0
	else If(DiesesRating=-1 and BewertungsAdd=-10)
		NeuesRating:=100
	else If(DiesesRating=0 and BewertungsAdd=-10)
		NeuesRating:=-1
	else
		NeuesRating:=DiesesRating+BewertungsAdd			; Neue Bewertung berechnen
	if(NeuesRating>100)				; und wieder von vorne
; Empfehlung fuer absichtliches Ueberrunden: Song fuers Bewerten anhalten (mittlere Bose-Taste 1-mal Druecken).
		NeuesRating:=0				; hier kann auch -1 fuer "Unbekannt" eingesetzt werden.
	if(NeuesRating<-1)				; sollte nur bei nicht durch 10 teilbaren Bewertungen vorkommen
		NeuesRating:=100
	try
	{
		MM.Player.CurrentSong.Rating:=NeuesRating	; Neue Bewertung zwischenspeichern
		MM.Player.CurrentSong.WriteTags			; Neue Bewertung schreiben
	}
	catch,e
		gosub MmNichtErreicht	; Fehlerbehandlung
	FileAppend, % A_Now "	" DiesesRating " ->	" NeuesRating  "	" DieserPfad "`r`n",%LogPath%	; Logeintrag
	sleep 1000
	try
		DiesesRating:=MM.Player.CurrentSong.Rating	; jetztige Bewertung des aktuellen Songs holen
	catch,e
		gosub MmNichtErreicht	; Fehlerbehandlung
	LastRating:=DiesesRating
	LastPfad:=DieserPfad
}
else
{
	try
		LastRating:=MM.Player.CurrentSong.Rating
	catch,e
		gosub MmNichtErreicht
	LastPfad:=DieserPfad
}
sleep 1000
gosub BewertungRueckmelden
FirstButton=
if FehlerLog
	FileAppend, % A_Now "	" A_LineNumber "	FirstButton  ->	" FirstButton "`r`n",%LogPath%
return

; (2-mal kurz hintereinander die mittlere Bose-Taste druecken) 
Media_Next::							; warten auf Hotkey
; <TastenWunsch ermitteln>
DieseMedeiaNextTime:=A_TickCount
if FehlerLog
	FileAppend, % A_Now "	" A_LineNumber "	DieseMedeiaNextTime  ->	" DieseMedeiaNextTime "`r`n",%LogPath%
if(FirstButton="")
{
	FirstButton=Media_Next
	if FehlerLog
		FileAppend, % A_Now "	" A_LineNumber "	FirstButton  ->	" FirstButton "`r`n",%LogPath%
}
else if(FirstButton="Media_Prev")
{
	if FehlerLog
		FileAppend, % A_Now "	" A_LineNumber+1 "	return  ->	" "`r`n",%LogPath%
	return
}
sleep WarteAufTastenOptionPrev
if(A_TickCount-DieseMedeiaPrevTime<2000 and FirstButton="Media_Next")
{	; </TastenWunsch ermitteln>
	try
		LastPfad:=MM.Player.CurrentSong.Path
	catch,e
		gosub MMverbinden
	SoundBeep,5000,400
	if FehlerLog
		FileAppend, % A_Now "	" A_LineNumber "	MM.Player.Previous  ->	" "`r`n",%LogPath%
	try
	{
		MM.Player.Previous
		sleep 1000
		if(LastPfad=MM.Player.CurrentSong.Path)
			MM.Player.Previous
		sleep 900
		DiesesRating:=MM.Player.CurrentSong.Rating
	}
	catch,e
		gosub MmNichtErreicht
	gosub BewertungRueckmelden
	FirstButton=
	if FehlerLog
		FileAppend, % A_Now "	" A_LineNumber "	FirstButton  ->	" FirstButton "`r`n",%LogPath%
	return
}
try
{
	DiesesRating:=MM.Player.CurrentSong.Rating	; Bewertung des aktuellen Songs holen
	DieserPfad:=MM.Player.CurrentSong.Path		; Pfad des aktuellen Songs holen
}
	catch,e
	{
		gosub MMverbinden
		return
	}
LastPfad:=DieserPfad						; Pfad merken
gosub BewertungRueckmelden
sleep 500
try
	MM.Player.Next							; Naechster Song
catch,e
	gosub MmNichtErreicht
gosub BewertungRueckmelden
LastRating:=
LastMedeiaNextTime:=A_TickCount
FirstButton=
if FehlerLog
	FileAppend, % A_Now "	" A_LineNumber "	FirstButton  ->	" FirstButton "`r`n",%LogPath%
return
BewertungRueckmelden:
try
	DiesesRating:=MM.Player.CurrentSong.Rating	; Bewertung des aktuellen Songs holen
If(DiesesRating=0)						; 0-Bewertung rueckmelden
	SoundBeep ,250,900
Beeps:=Round(DiesesRating/10)
Loop % Beeps							; Bewertung rueckmelden
{
	SoundBeep,1000,400
	sleep 500
}
return
MMverbinden:
Try
{
	MM := ComObjCreate("SongsDB.SDBApplication") ; anlegen/bekannt machen des Com-Objektes ; startet auch falls notwendig Media Monkey
	sleep 9000
	MmVersion:=MM.VersionString					; MediaMonkey-Version lesen
	MM.ShutdownAfterDisconnect:=false
}
catch,e
	gosub MmNichtErreicht
return
MmNichtErreicht:
MsgBox % "Skript-Ende`r`n`r`nMediaMonkey konnte nicht vom Skript angesprochen werden!`r`nDetails: Zeile" e.line "	" e.message "	" e.extra
gosub ExitSub
return
ExitSub:
MM:=""			; Com-Object bei Skriptende freigeben
ExitApp
Ueber eine kurze Rueckmeldung, wenn das Skript genutzt wird (eventuell auch mit Bluetooth Kopfhoerer), wuerde ich mich freuen.
Gerdi
Win 10 Home (x64) and Win 11 Pro N
https://github.com/Grrdi/ZackZackOrdner/archive/master.zip --> get folders on the quick

Return to “Skripte und Funktionen”

Who is online

Users browsing this forum: No registered users and 46 guests