1 votes

Est-il possible de créer de véritables dossiers dynamiques (PAS une recherche sauvegardée de type "Smart Folder") ?

J'utilise une application qui charge le contenu d'un dossier d'échantillons audio pour mon usage. Cependant, les échantillons que je veux utiliser sont dispersés dans de nombreux dossiers sur mon ordinateur, et je ne veux pas les copier tous dans un seul dossier.

Les alias fonctionnent parfaitement, et j'ai pu créer des liens symboliques de tous les fichiers souhaités, les placer dans un seul dossier, et charger ce dossier. Excellente solution, sauf pour une chose.

Je vais ajouter au fil du temps d'autres fichiers qui répondent aux critères que j'utilise pour cette application. J'aimerais pouvoir utiliser un dossier dynamique qui serait essentiellement ce que sont les "Smart Folders", à l'exception d'un vrai dossier. Un "Smart Folder" Mac n'est pas vraiment un dossier, mais crée simplement un fichier "SavedSearch", qui est illisible sauf par le Finder, de sorte que mon application ne peut pas y accéder.

Est-il possible de créer un véritable dossier dynamique qui se met à jour au fur et à mesure que le système de fichiers change ? Ou peut-être que le fait d'être en temps réel serait trop contraignant, alors sur un calendrier ? Je pourrais peut-être concocter quelque chose dans Automator mais... Je ne sais pas, ça semble un peu lourd. J'aimerais savoir s'il y a un meilleur moyen !

0 votes

Une application conviviale ne nécessiterait pas cela : soit les liens vers les échantillons ou la bibliothèque d'échantillons sont rassemblés dans un fichier (ou dossier) de projet, soit - si nécessaire - les échantillons sont exportés/copiés vers un dossier spécifié par l'utilisateur à partir de l'application. Veuillez ajouter le nom de l'application !

0 votes

Il s'agit en fait d'un plugin appelé DrumFoldr, et je l'utilise dans le logiciel hôte Ableton Live. Il ne s'agit pas d'un problème de "convivialité". Ce plugin ajoute une fonction extrêmement utile à Ableton, car il n'est pas possible de charger un échantillonneur avec plus de 128 fichiers autrement. Cela n'a vraiment rien à voir avec le logiciel en question. J'ai besoin de dossiers vraiment dynamiques et actualisés et je demande si c'est possible et, si oui, comment.

0 votes

Par "convivial", je voulais dire : aller au-delà de la restrictions du système de fichiers hiérarchiques et opter pour une approche plus axée sur les bases de données. Cette approche est en partie déjà mise en œuvre dans MacOS avec l'API (Spotlight). Si l'application hôte (ou un plugin) n'a pas accès à cette API, on choisit généralement la méthode du "fichier de projet" ou du fichier/dossier (par exemple, "Collect for Output" (QuarkXPress)). Quels sont vos critères pour choisir un échantillon et comment les parcourir ? Vous pouvez toujours construire un service (Automator) : lier le(s) fichier(s) sonore(s) à un(des) dossier(s) spécifique(s).

2voto

klanomath Points 63400

J'ai trouvé une solution pour créer un dossier dynamique "soft link" :

Préface :

  • $HOME est le résultat de la variable d'environnement HOME ici. Lorsque vous vous connectez en tant qu'utilisateur utilisateur_exemple , $HOME est alors le chemin d'accès au dossier personnel de utilisateur_exemple : /Users/exemple_user. Si $HOME apparaît dans le texte ci-dessous, vous devez le remplacer vous-même par /Users/votre_nom_d'utilisateur/ (par exemple, en sauvegardant l'agent de lancement). Si $HOME apparaît dans une case de code ci-dessous (par exemple dans le shell script), il sera automatiquement étendu à votre dossier personnel par le shell (bash) lors de l'exécution du script.
  • mdimport -A|sed $'s/\t\t/;/g;s/(null)//g'|tr -d \' présente un grand nombre d'attributs de métadonnées à choisir comme critères de recherche (par exemple, kMDItemAudioBitRate ou kMDItemDurationSeconds)
  • mdls /path/to/file liste tous les attributs de métadonnées d'un fichier choisi

Création d'un dossier de liens dynamiques :

  • Créez un shell script samples.sh dans $HOME/bin/sh/ avec le contenu suivant :

    #!/bin/bash
    
    # Define folders
    # Source folder (including files in subfolders)
    MusicSamples=$HOME/Music/Samples
    # Destination folder
    DrumFoldr=$HOME/Desktop/Samples
    
    # Remove orphaned soft links in the destination folder
    find $DrumFoldr -type l -exec sh -c 'for x; do [ -e "$x" ] || rm "$x"; done' _ {} +
    
    # Add soft links in destination folder depending on some criteria (here: BitRate and UserTag)
    for File in $(mdfind -onlyin $MusicSamples 'kMDItemAudioBitRate >= "44000"  && _kMDItemUserTags = "Sample"')
    do
        ln -s $File $DrumFoldr
    done
    
    # Remove soft links in the destination folder depending on some criteria (removing UserTag from original file)
    for File in $(mdfind -onlyin $MusicSamples '_kMDItemUserTags != "Sample"')
    do
        filename=$(basename "$File")
        rm $DrumFoldr/$filename
    done

    Dans le shell script définissez votre dossier musique contenant les fichiers échantillons (dans mon exemple c'est un dossier Samples dans le dossier Music) et le "DrumFoldr" contenant les soft links plus tard (dans mon exemple c'est un dossier Samples sur mon Desktop).

    Choisissez maintenant quelques critères de recherche Spotlight (dans mon exemple, j'ai choisi le débit binaire et une balise définie par l'utilisateur "Sample" - vous pouvez définir des balises utilisateur en faisant un clic droit sur un fichier > Balises... et en ajoutant une balise en écrivant simplement quelque chose. L'étiquette définie par l'utilisateur est ensuite disponible pour d'autres fichiers et dossiers.

    enter image description here

    Le shell script ci-dessus n'ajoutera que les fichiers ayant une fréquence d'échantillonnage de 44000 ou plus. y (c'est un et logique !) avec le tag utilisateur "Sample" comme lien souple vers le dossier DrumFoldr. Le dossier de destination sera donc no contient des liens vers des fichiers sans l'étiquette Sample mais avec une fréquence d'échantillonnage de 96k ou des fichiers avec l'étiquette Sample mais sans kMDItemAudioBitRate (comme des fichiers txt ou des pdfs). Il fait également un peu de nettoyage dans le dossier DrumFoldr.

    BTW : la durée de la musique peut être recherchée/déterminée en utilisant la clé kMDItemDurationSeconds : kMDItemDurationSeconds <= "2" .

  • Créez un fichier usr.samplesync.plist dans $HOME/Library/LaunchAgents (c'est-à-dire : /Users/<username>/Library/LaunchAgents/ ) avec le contenu :

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key>
        <string>usr.samplesync</string>
        <key>ProgramArguments</key>
        <array>
            <string>/bin/bash</string>
            <string>/Users/<username>/bin/sh/samples.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StartInterval</key>
        <integer>10</integer>
    </dict>
    </plist>

    Remplacer <username> par votre nom d'utilisateur abrégé. Le shell script sera exécuté toutes les 10 secondes. Vous pouvez augmenter l'intervalle en fonction de vos besoins et de votre environnement à des valeurs plus élevées (par exemple 60 = 1 minute ou 600 = 10 minutes).

  • Chargez l'agent de lancement avec :

    launchctl load $HOME/Library/LaunchAgents/usr.samplesync.plist

Si vous voulez enregistrer le shell script ailleurs, vous devez appliquer le chemin dans la plist en conséquence.


Mises en garde :

  • les fichiers d'échantillons originaux ne doit pas contiennent des espaces dans leurs chemins ou noms de fichiers (j'essaie de résoudre cette restriction plus tard)
  • les fichiers d'échantillons originaux ne doit pas être déplacé ou la suppression de l'étiquette de l'utilisateur ne supprimera pas le lien logiciel.

Des choses à améliorer :

  • ne pas créer de lien souple s'il en existe déjà un correct

0 votes

Wow très cool ! Pour ma part, je ne voudrais pas avoir besoin de l'étiquette, car c'est quelque chose que je devrais ajouter manuellement à chaque fois que je reçois de nouveaux échantillons. De plus, de nombreux échantillons auront des espaces dans leurs noms. Est-ce que j'ai bien compris qu'il s'agit en fait de créer des liens symboliques de tous les fichiers de mon dossier d'échantillons (de manière récursive ?), et de supprimer ceux qui ne répondent pas aux critères ? C'est un peu lourd parce que mon dossier "samples" contient aussi BEAUCOUP d'autres fichiers (patches de synthé, PDFs, dossiers imbriqués, etc.) donc cela va représenter une TONNE de création/suppression. Excellente réponse mais je ne suis pas sûr de pouvoir l'utiliser dans ma configuration actuelle.

0 votes

Rats, le script ne peut pas gérer mon lecteur ayant un espace dans le nom même s'il est échappé : MusicSamples=/Volumes/AUDIO_2TB/Audio\ Libraries/_Free/Audio/

0 votes

@JonathanvanClute J'ai essayé - ça ne devrait pas marcher ! J'ai également testé une construction de tableau qui a également échoué, je pense que je poserai plus tard une question ici concernant le problème.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X