Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Aktuelle Version: 12.7 (23.11.2017)
Alles zum Thema Directory Opus
Sasa
Berater
Beiträge: 478
Registriert: 6. Nov 2006 13:20

Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Sasa » 13. Sep 2016 11:45

Hi,

ich möchte mittels "find" als Button eine Playlist erstellen und diese direkt in Aimp abspielen lassen. Die Playlist mittels Filter-Preset erstellen und als Button ausführen lassen ist kein Thema, aber wie mache ich das ohne Preset (bsp. nach Genre "Pop")?

Nächste Frage ist: Wie kann ich die Playlist dann noch mal eine temporäre Datei umleiten (mit {allfilepath%} und vielen Liedern kommt eine Fehlermeldung, das die Zeile zu lang wäre)?

Edit: Ersteres ist gelöst, detaillierte Filter gehen vorerst nur per Preset. Fehlt nur noch eine schöne Lösung für die Übergabe an den Player...

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Kundal » 13. Sep 2016 21:25

Sieht für mich nach einem Fall für Tbone's geniales Script SelectEx aus.
Hier ein Beispiel, bei dem im Pfad D:\Meine Musik\Pop 60 Minuten Musik mit dem Genre Pop per Zufall ausgewählt, in die Sammlung PopCollection kopiert und sofort mit Aimp abgespielt wird. Dazu werden die Pfade in die Datei C:\Temp\PopCollection.m3u kopiert, die Aimp dann abspielt.
Das Script wird einfach in einen Button kopiert (Skriptfunktion; Skripttyp JScript). Natürlich musst du die genannten Pfade und Namen im Script an deine Gegebenheiten anpassen.

Code: Alles auswählen

var cmd = DOpus.Create.Command
var jsFilter = ""+
          "if (item.metadata == 'audio'){ "+
                  "var genre = new String(item.metadata.audio['mp3genre']);"+
                  "if (genre.indexOf('Pop')!=-1) return false; /*do not filter*/"+
          "}";
		  cmd.RunCommand('Delete coll://PopCollection REMOVECOLLECTION=auto QUIET')
          cmd.RunCommand('SelectEx RANDOM '+
						'PATH="'+DOpus.FSUtil.Resolve('/mymusic')+'" RECURSE JSFILTER="'+jsFilter+'" '+
		  				'ITEMCOUNT=99 '+
						'JSBREAK="try{totalDuration;}catch(e){totalDuration=0;} if ((totalDuration+item.metadata.audio.mp3songlength)>60*60) return true; totalDuration+=item.metadata.audio.mp3songlength;" '+
						'COPYTOCOLL=PopCollection '+
						'TOFILE="'+DOpus.FSUtil.Resolve('/temp\\PopCollection.m3u')+'" '+
						'COMMANDS=Go coll://PopCollection')
		  cmd.RunCommand('Set MANUALSORT=on COLUMNSADD=mp3songlength SORTBY=+keywords(0)')
          cmd.RunCommand('"/programfilesx86\\AIMP\\AIMP.exe" /ADD_PLAY "/temp\\PopCollection.m3u"')
PS:Zum Anpassen des Buttons an deine Bedürfnisse ist Tbone sicherlich der kompetentere Ansprechpartner als ich.

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Kundal » 13. Sep 2016 22:04

Hier noch ein Beispiel, das bis zu 1000 Stücke aus den 80er Jahren rekursiv im Ordner D:\MeineMusik\Pop in die Sammlung kopiert und abspielt. Die Dateien werden in der Sammlung nach der Spalte mp3year sortiert.

Code: Alles auswählen

var cmd = DOpus.Create.Command
var jsFilter = ""+
          "if (item.metadata == 'audio'){ "+
                  "var genre = new String(item.metadata.audio['mp3year']);"+
                  "if (genre.indexOf('198')!=-1) return false; /*do not filter*/"+
          "}";
		  cmd.RunCommand('Delete coll://PopCollection REMOVECOLLECTION=auto QUIET')
          cmd.RunCommand('SelectEx LINEAR '+
						'PATH="'+DOpus.FSUtil.Resolve('/mymusic')+'" RECURSE JSFILTER="'+jsFilter+'" '+
		  				'ITEMCOUNT=1000 '+
		  				'COPYTOCOLL=PopCollection '+
						'TOFILE="'+DOpus.FSUtil.Resolve('/temp\\PopCollection.m3u')+'" '+
						'COMMANDS=Go coll://PopCollection')
		  cmd.RunCommand('Set SORTBY=+mp3year(0)')
          cmd.RunCommand('"/programfilesx86\\AIMP\\AIMP.exe" /ADD_PLAY "/temp\\PopCollection.m3u"')

Sasa
Berater
Beiträge: 478
Registriert: 6. Nov 2006 13:20

Re: Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Sasa » 14. Sep 2016 10:02

Das Letztere ist cool! Vielen Dank.

SelectEx nutze ich auch, aber nur die Zufallsfunktion bei Auswahl. Hätte ich ja auch mal drauf kommen können...

Zur Info: DO kann nicht nach "Year" filtern, sondern nur das "Veröffentlichungsdatum". Leo wußte nicht, dass es zwei versch. Tags gibt und fügt aber "Year" auch noch in die Filter ein. Bin etwas verwundert, dass das keiner bisher moniert hat, denn ich keinen kenne, der nicht "Year" als Tag nutzt.

Sasa
Berater
Beiträge: 478
Registriert: 6. Nov 2006 13:20

Re: Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Sasa » 14. Sep 2016 10:59

So, habe den Script jetzt an meine Bedürfnisse angepasst und würde den jetzt gerne auch für Genre nutzen. Hier meine Frage - weil ich nicht so fit darin bin - wie kann ich mehrere Genres (z.B. "Pop" und "Electronic") selektieren lassen?

Der Vorteil ist, dass ich mit dem Button keine Filter speichern muss und die Genre-Filter dann rausschmeißen kann :-).

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Kundal » 14. Sep 2016 19:28

wie kann ich mehrere Genres (z.B. "Pop" und "Electronic") selektieren lassen?
Probier mal den:

Code: Alles auswählen

var cmd = DOpus.Create.Command
var jsFilter = ""+
          "if (item.metadata == 'audio'){ "+
                  "var genre = new String(item.metadata.audio['mp3genre']);"+
                  "if (genre.indexOf('Pop') || ('Electric') !=-1) return false;"+
          "}";
        cmd.RunCommand('Delete coll://PopElectricColl REMOVECOLLECTION=auto QUIET')
          cmd.RunCommand('SelectEx LINEAR '+
                  'PATH="'+DOpus.FSUtil.Resolve('/mymusic')+'" RECURSE JSFILTER="'+jsFilter+'" '+
                    'ITEMCOUNT=1000 '+
                    'COPYTOCOLL=PopElectricColl'+
                  'TOFILE="'+DOpus.FSUtil.Resolve('/temp\\PopElectricColl.m3u')+'" '+
                  'COMMANDS=Go coll://PopElectricColl')
        cmd.RunCommand('Set SORTBY=+mp3genre(0)')
          cmd.RunCommand('"/programfilesx86\\AIMP\\AIMP.exe" /ADD_PLAY "/temp\\PopElectricColl.m3u"')

Sasa
Berater
Beiträge: 478
Registriert: 6. Nov 2006 13:20

Re: Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Sasa » 14. Sep 2016 21:23

Eigentlich ganz einfach und nachvollziehbar, von der Pike auf würde ich das aber nie allein hinkriegen bzw. die Zeit zum Lernen ist einfach nicht da :-)

Danke, probiere ich morgen in Ruhe aus.

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Kundal » 14. Sep 2016 21:51

Das hat mich eine Google-Suche (jscript or) bei der ich das mit den || Pipe-Zeichen gefunden habe und ca. 20 Minuten Try & Error für die richtige Syntax gekostet. Hat sich gelohnt, ich habe wieder was dazu gelernt und dir gefällt's. :D

Sasa
Berater
Beiträge: 478
Registriert: 6. Nov 2006 13:20

Re: Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Sasa » 14. Sep 2016 22:26

Doch heute noch dran gesetzt...

Also, wenn ich nur ein Genre abfrage, geht es. Lass ich den Code unverändert mit "||", nimmt er alle Lieder in die Liste auf (ich habe den Count auf 1000 durch 100 Prozent ersetzt).

Und was mir noch fehlt (ist das Letzte :-)), nach allen Lieder älter als 1979 zu suchen. Das sind bei mir alle "Oldies"!

Supergeil, so kann ich bei Änderungen immer schnell div. Playlisten updaten. Aimp aktualisiert m.W. nämlich nicht automatisch seine Datenbank bzw. kann keine autom. Playlisten wie eben diese hier erstellen.

Ich höre zu 50% via Smartphone über die DS-Audio-App (Synology NAS) und die kann mehr als jeder Player auf dem PC. Die DS indexiert autom. festgelegte Ordner, aktualisiert autom. Playlisten wie diese hier... funzt einfach. Nur gibt es keinen Player auf dem PC, der DLNA/UPNP supported, ohne dass man gleich ein Center wie Kodi einrichten muss. Die Syno ist im DO/Explorer komplett drin mit Playlisten und allem, aber kein Player kann die Dateien öffnen... ich muss mal den Amiga 3000 aus dem Keller holen, der braucht wahrscheinlich nur einen Datatype und dann funzt das :lol:.

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Kundal » 15. Sep 2016 00:06

Puh, das waren jetzt doch 2 Stunden Try & Error bis alle Klammern richtig saßen. Ist sicher nicht die eleganteste Lösung (Tbone kann's besser :D ) aber ich bekomme damit alle Songs aus den 40er bis 70er Jahren mit Genre Pop oder Electric:

Code: Alles auswählen

var cmd = DOpus.Create.Command
var jsFilter = ""+
   "if (item.metadata == 'audio'){ "+
      "var year = new String(item.metadata.audio['mp3year']);"+
      "var genre = new String(item.metadata.audio['mp3genre']);"+
            "if (((genre.indexOf('Pop')!=-1)"+
            "||(genre.indexOf('Electric')!=-1)) &&"+
            "((year.indexOf('194')!=-1)"+
            "||(year.indexOf('195')!=-1)"+
            "||(year.indexOf('196')!=-1)"+
            "||(year.indexOf('197')!=-1)))"+
            "return false;"+
            "}";
   cmd.RunCommand('Delete coll://Oldies REMOVECOLLECTION=auto QUIET')
   cmd.RunCommand('SelectEx LINEAR '+
               'PATH="'+DOpus.FSUtil.Resolve('/mymusic')+'" RECURSE JSFILTER="'+jsFilter+'" '+
                    'ITEMCOUNTPERC=100 '+
                    'COPYTOCOLL=Oldies '+
               'TOFILE="'+DOpus.FSUtil.Resolve('/temp\\Oldies.m3u')+'" '+
               'COMMANDS=Go coll://Oldies')
   cmd.RunCommand('Set SORTBY=+mp3year(0)')
   cmd.RunCommand('"/programfilesx86\\AIMP\\AIMP.exe" /ADD_PLAY "/temp\\Oldies.m3u"')

Sasa
Berater
Beiträge: 478
Registriert: 6. Nov 2006 13:20

Re: Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Sasa » 15. Sep 2016 09:41

Du hast jetzt Jahr und Genre in eins gepackt, aber mir ist es gelungen, das aufzutrennen (die Klammern sind echt nervig) :-).

Danke nochmal!

TBone hat mir übrigens im RC noch netterweise geholfen, einen DO-Alias in SelectEx aufzulösen, falls es Dich interessiert, die TOFILE-Zeile sieht jetzt so aus:

Code: Alles auswählen

'TOFILE="'+DOpus.FSUtil.Resolve('/Media\\Musik\\Playlisten\\Pop.m3u')+'" '+

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Kundal » 15. Sep 2016 10:41

TBone hat mir übrigens im RC noch netterweise geholfen, einen DO-Alias in SelectEx aufzulösen
Ja das hatte ich gesehen, aber nicht umgesetzt.
Ich habe die Alias-Auflösung jetzt in allen hier von mir vorgestellten Schaltercodes für PATH und TOFILE eingebaut. Die Schalter durchsuchen jetzt /mymusic und speichern die Playlist in /temp. Macht die Schalter für jeden anwendbar ohne Pfade korrigiern zu müssen.

Sasa
Berater
Beiträge: 478
Registriert: 6. Nov 2006 13:20

Re: Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Sasa » 15. Sep 2016 10:51

Wobei %Temp% da besser ist (und auch ohne die Auflösung funzt), weil das ein windowseigener Alias ist. Ich habe es nur deshalb geändert, weil ich die Playlisten jetzt sep. speichere und bei Änderungen manuell in Aimp schiebe. Bei direkter Übergabe speichert der die Liste jedes Mal als neue Playlist ab.
Zuletzt geändert von Sasa am 15. Sep 2016 11:02, insgesamt 2-mal geändert.

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Kundal » 15. Sep 2016 10:59

Hier noch mal eine verbesserte Variante, um nach Songs älter als 1980 zu suchen. Durch konvertieren des Strings in ein Integer kann man mit den Zahlen rechnen:

Code: Alles auswählen

var cmd = DOpus.Create.Command
var jsFilter = ""+
   "if (item.metadata == 'audio'){ "+
      "var year = new String(item.metadata.audio['mp3year']);"+
	  "var int = parseInt(year);"+
            "if (int < 1980) return false;"+
            "}";
   cmd.RunCommand('Delete coll://Oldies REMOVECOLLECTION=auto QUIET')
   cmd.RunCommand('SelectEx LINEAR '+
               'PATH="'+DOpus.FSUtil.Resolve('/mymusic')+'" RECURSE JSFILTER="'+jsFilter+'" '+
                    'ITEMCOUNTPERC=100 '+
                    'COPYTOCOLL=Oldies '+
               'TOFILE="'+DOpus.FSUtil.Resolve('/temp\\Oldies.m3u')+'" '+
               'COMMANDS=Go coll://Oldies')
   cmd.RunCommand('Set SORTBY=+mp3year(0)')
   cmd.RunCommand('"/programfilesx86\\AIMP\\AIMP.exe" /ADD_PLAY "/temp\\Oldies.m3u"')

Sasa
Berater
Beiträge: 478
Registriert: 6. Nov 2006 13:20

Re: Find: Ergebnis direkt an App weitergeben und CMD ohne Preset

Beitrag von Sasa » 15. Sep 2016 11:02

Mäh, wollte Dich nicht nochmal mit "älter als" belästigen (RC), danke! Jetzt bin ich für alle Fälle gerüstet. Solltest die Examples im RC online stellen ("nach Jahrzehnt", "nach Genres" und "älter als").

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast