Czy możliwe są prawdziwe foldery dynamiczne (NIE SavedSearch „Smart Folder”)?

1

Korzystam z aplikacji, która ładuje zawartość folderu próbek audio na mój użytek. Próbki, których chcę użyć, są jednak rozproszone w wielu folderach na moim komputerze i nie chcę ich najpierw kopiować do jednego folderu.

Aliasy działają dobrze, a ja mogłem utworzyć dowiązania symboliczne wszystkich pożądanych plików, umieścić je w jednym folderze i załadować ten folder. Doskonałe rozwiązanie, z wyjątkiem jednej rzeczy.

Z czasem będę dodawać kolejne pliki, które spełniają kryteria używane w tej aplikacji. Chciałbym móc korzystać z folderu dynamicznego, który zasadniczo byłby tym, czym są „inteligentne foldery”, z wyjątkiem prawdziwego folderu. „Inteligentny folder” na komputerze Mac wcale nie jest folderem, ale po prostu tworzy plik „SavedSearch”, który jest nieczytelny, z wyjątkiem Findera, więc moja aplikacja nie może go zobaczyć.

Czy można utworzyć prawdziwy folder dynamiczny, który będzie aktualizowany po zmianie systemu plików? A może bycie w czasie rzeczywistym byłoby zbyt dużym obciążeniem, więc zgodnie z harmonogramem? Widziałem może coś wymyślającego w Automatorze, ale ... nie wiem, brzmi trochę ciężko. Uwielbiam wiedzieć, czy jest lepszy sposób!

Jonathan van Clute
źródło
Aplikacja przyjazna dla użytkownika nie wymagałaby tego: łącza do próbek lub biblioteki próbek są gromadzone w pliku projektu (lub folderze) lub - w razie potrzeby - próbki są eksportowane / kopiowane do określonego przez użytkownika folderu z wnętrza aplikacji. Dodaj nazwę aplikacji!
klanomath
To właściwie wtyczka o nazwie DrumFoldr i używam jej w oprogramowaniu hosta Ableton Live. To nie jest kwestia „przyjazności dla użytkownika”. Ta wtyczka dodaje niezwykle przydatną funkcję do Abletona, ponieważ w przeciwnym razie nie jest możliwe załadowanie samplera z więcej niż 128 plikami. To naprawdę nie ma nic wspólnego z danym oprogramowaniem. Potrzebuję naprawdę dynamicznych, aktualizujących folderów i pytam, czy to możliwe, a jeśli tak, to w jaki sposób.
Jonathan van Clute
Przez „przyjazny dla użytkownika” miałem na myśli: wyjść poza ograniczenia hierarchicznego systemu plików i wybrać podejście oparte na bazie danych. Częściowo jest to już zaimplementowane w macOS z (Spotlight) -API. Jeśli aplikacja hosta (lub wtyczka) nie uzyskuje dostępu do tego interfejsu API, zwykle wybierana jest metoda „plik projektu” lub metoda oparta na pliku / folderze (np. „Zbieraj do wyjścia” (QuarkXPress)). Jakie są twoje kryteria wyboru próbki i jak je przeglądać? Zawsze możesz zbudować usługę (Automator): połącz pliki dźwiękowe z określonymi folderami.
klanomath
W Ableton Live mogę załadować automat perkusyjny z próbkami - do 128 z nich. To maksimum możliwe z założenia. Ale za pomocą wtyczki można załadować dowolny numer (w tym przypadku cały folder) i po prostu przewijać je pokrętłem podczas odtwarzania muzyki, dzięki czemu można usłyszeć różne próbki w kontekście. Wtyczka pozwala mi wybrać folder próbek, ale musi to być prawdziwy folder (lub alias), a nie plik SavedSearch. Chciałbym dynamiczny folder zawierający wszystkie pliki audio o długości poniżej 2 sekund, a „Inteligentny folder” nie będzie działać. Mam nadzieję, że to ma sens.
Jonathan van Clute
Mam to już dzięki ;-) (ponieważ odwiedziłem stronę ldmdesign i przeczytałem opis wtyczki). Wydaje się jednak, że liczba próbek jest ograniczona do 5000 pozycji / folderu.
klanomath

Odpowiedzi:

2

Znalazłem rozwiązanie, aby utworzyć dynamiczny folder „soft link”:

Przedmowa:

  • $ HOME jest wynikiem zmiennej środowiskowej HOME tutaj. Po zalogowaniu się jako użytkownik example_user , $ HOME jest to ścieżka do folderu domowego example_user : / Users / example_user. Jeśli $ HOME pojawia się w tekście poniżej, musisz go zastąpić / Users / twoja_nazwa_użytkownika / (np. Zapisanie agenta uruchamiania). Jeśli $ HOME pojawi się w polu kodu poniżej (np. W skrypcie powłoki), zostanie on automatycznie rozszerzony do twojego folderu domowego przez powłokę (bash) podczas wykonywania skryptu.
  • mdimport -A|sed $'s/\t\t/;/g;s/(null)//g'|tr -d \' pokazuje wiele atrybutów metadanych do wyboru jako kryteria wyszukiwania (np. kMDItemAudioBitRate lub kMDItemDurationSeconds)
  • mdls /path/to/file wyświetla wszystkie atrybuty metadanych wybranego pliku

Tworzenie dynamicznego folderu z linkami:

  • Utwórz skrypt powłoki sample.sh w $ HOME / bin / sh / o następującej treści:

    #!/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
    

    W skrypcie powłoki zdefiniuj folder muzyczny zawierający przykładowe pliki (w moim przykładzie jest to folder Samples w folderze Music), a „DrumFoldr” zawierający później miękkie linki (w moim przykładzie jest to folder Samples na moim pulpicie).

    Teraz wybierz kryteria wyszukiwania Spotlight (w moim przykładzie wybrałem szybkość transmisji i znacznik zdefiniowany przez użytkownika „Próbka” - możesz zdefiniować znaczniki użytkownika, klikając prawym przyciskiem myszy plik> Znaczniki ... i dodając znacznik, pisząc coś. Tag zdefiniowany przez użytkownika jest następnie dostępny dla innych plików i folderów.

    wprowadź opis zdjęcia tutaj

    Powyższy skrypt powłoki doda tylko pliki o częstotliwości próbkowania 44000 lub wyższej i (jest to logiczne i!) Ze znacznikiem użytkownika „Próbka” jako miękkim linkiem do folderu DrumFoldr. Zatem folder docelowy nie będzie zawierał łączy do plików bez znacznika Sample, ale z częstotliwością próbkowania 96k lub plików ze znacznikiem Sample, ale bez kMDItemAudioBitRate (np. Plików txt lub pdf). Dokonuje również czyszczenia w folderze DrumFoldr.

    BTW: długość muzyka mogą być przeszukiwane / określana za pomocą klawisza kMDItemDurationSeconds: kMDItemDurationSeconds <= "2".

  • Utwórz plik usr.samplesync.plist w $ HOME / Library / LaunchAgents (czyli:) /Users/<username>/Library/LaunchAgents/z zawartością:

    <?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>
    

    Zastąp <username>krótką nazwą użytkownika. Skrypt powłoki będzie wykonywany co 10 sekund. Możesz zwiększyć interwał w zależności od potrzeb i środowiska do wyższych wartości (np. 60 = 1 minuta lub 600 = 10 minut)

  • Załaduj agenta uruchamiania:

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

Jeśli chcesz zapisać skrypt powłoki gdzie indziej, musisz odpowiednio zastosować ścieżkę na liście.


Ostrzeżenia:

  • oryginalne pliki przykładowe nie mogą zawierać spacji w ścieżkach ani nazwach plików (próbuję rozwiązać to ograniczenie później)
  • oryginalne pliki przykładowe nie mogą być przenoszone, ponieważ usunięcie znacznika użytkownika nie usunie miękkiego linku

Rzeczy do poprawy:

  • nie twórz miękkiego linku, jeśli poprawny już istnieje
klanomath
źródło
Wow, bardzo fajne !! Dla siebie nie chciałbym wymagania dotyczące tagów, ponieważ musiałbym to dodawać ręcznie za każdym razem, gdy mam więcej próbek. Również wiele próbek będzie miało spacje w nazwach. Czy mam rację, że faktycznie tworzy to dowiązania symboliczne każdego pliku w całym folderze próbek (rekurencyjnie?) I usuwa te, które nie spełniają kryteriów? Jest to trochę ciężkie, ponieważ mój folder „próbek” zawiera również wiele innych plików (łatki syntezatora, pliki PDF, foldery zagnieżdżone itp.), Więc będzie to MASA tworzenia / usuwania. Świetna odpowiedź, ale nie jestem pewien, czy mógłbym jej użyć w mojej bieżącej konfiguracji.
Jonathan van Clute
Szczury, skrypt nie poradzi sobie z tym, że mój dysk ma spację w nazwie, mimo że uciekł: MusicSamples=/Volumes/AUDIO_2TB/Audio\ Libraries/_Free/Audio/
Jonathan van Clute,
@JathanathanvanClute Próbowałem - nie powinno działać! Przetestowałem również konstrukcję macierzy, która również zawiodła, myślę, że później zadam pytanie dotyczące problemu.
klanomath
Wow ciekawe ... działa, ponieważ tworzy kilka plików, a nawet usuwa te, w których brakuje znacznika (w moim przypadku jest to wszystko), ale to, co tworzy, jest złe i nawet nie jest poprawne w ogóle. Bardzo dziwne. Oto mój obecny kod: https://pastebin.com/FQ3uT8XF
Jonathan van Clute
OK Wyciągnąłem spacje z równania jako test, a skrypt działa dobrze, powstałe dowiązania symboliczne są poprawne i użyteczne. Jest to tylko potwierdzenie, że obsługa spacji w ścieżkach wydaje się być jedynym problemem.
Jonathan van Clute,