It happens every now and then that I need to know which Logic projects contain a certain audio file.
If you’re not afraid of the terminal, the following command will do that for you:
find . -type f -name "ProjectData" -exec grep -a "Your Audio Filename" {} +
The dot in this command is the starting directory for this search – when you first open the terminal it will open to the home folder of the user that you’re loggen in as.
If you want to be specific: only type “find” and a space and then drag and drop a folder from Finder into the terminal window, that will add the complete path to that folder as the search starting directory, then type (or copy/paste) the rest of the command and hit enter.
What’s happening under the hood?
Most of the files Logic uses are binary files that look like gibberish to humans. A standard search usually skips these because it can’t “read” the text inside. By using the -a flag with grep, we force the computer to treat that binary blob as plain text. This allows the command to scan through the code and pick out the human-readable filepaths and filenames hidden inside your project data without you ever having to open Logic.
So today I was pointed to ProducerAI and thought, ok, let’s do my regular test to see how this machine will create solo instrument lines. I will share the whole back and forth prompting session below but I just want to collect some general observations first.
The overall sound of the cello that was produced in this session is frankly quite outstanding. I mean there are aspects that I don’t like (the reverb for example I would dial down a bit) – there are rarely any pauses in the playing, which gets super tiresome… I wonder what would have happened with woodwind or brass instruments… infinite breath and such. Reminds me of my composition arranging teachers who always said that writing for strings has the big downside that they don’t have to breathe, so people tend to write these ongoing things that never stop and get boring quickly.
The other general observation is that the system very very soon started to just do its own thing and go down a rabbit hole that was getting further and further away from what I actually intended and wanted. I’ve noticed this in all kinds of creation (not just here with producerAI): the first try of these systems is usually kind of good but if you then try to modify that first result it gets horrible quickly. And from a user perspective this will get quite frustrating as you want to just shake that machine to make it wake up again and realize that it’s not “listening” to your instructions anymore. I guess starting over again and again is the way to go…
This producerAI system first “translated” my prompt into another prompt and I have to admit that I learned from these second prompts because those usually did have very precise descriptive terms and words that sometimes elude me as a non-native speaker. These generated prompts also sounded like it was understanding exactly what I wanted, but the result… well, judge for yourself. For me there might be the occasional fragment I could cut out of these to use in a sketch – but it probably will have to be recorded to make sense in a real piece the way I imagine it. Overall, at this point this system is almost useless as a tool for me to write.
We’ll see, this technology is in its infancy and perhaps they will get it better, but my hunch is, because all of these systems are designed to not offend the user, no art that is challenging will come out if this. Only bland regurgitation of mainstream pleasantness. Yuck.
Anyway, so here is the exchange:
Resulting audio:
Prompt 1: create a dramatic cello melody that has a fast part (like 3 or 4 notes) going into a held note – create 6 of those motives
Prompt 1 (producerAI version): dramatic solo cello melody, dark and intense, fast four-note staccato run leading into a long sustained vibrato note, cinematic and emotive, 110 bpm
Prompt 2: I was thinking more like dagadagadagadaaaaaaahhhhhdgadigidagadigiduuuhhhhhhh
Prompt 2 (producerAI veresion): solo cello, aggressive fast sextuplet runs followed by a heavy long held vibrato note, dramatic and rhythmic, dagadagadagadaaaaaaah, 120 bpm
Prompt 3: now create it in Ab minor
Prompt 3 (producerAI version): solo cello in Ab minor, fast rhythmic staccato bursts followed by a long intense held note, dagadagadagadaaaaaaah, 120 bpm, dark classical style
Prompt 4: No. you are moving away from dagadagadagadaaaaaaaahhhh – next phrase digidigidigduuuuuuhhhh…. next phrase etdc…
Prompt 4 (producerAI version): solo cello, sequence of dramatic phrases, fast staccato runs of 4-5 notes followed by a long held vibrato note, dagadagadagadaaaaaaaahhhh then digidigidigduuuuuuhhhh, dark Ab minor, aggressive classical, 120 bpm
Prompt 5: it’s all sounding very nice – but it is much too baroque and not really what I want. I imagined at 150bpm these very short 4 , 6 or note 16th runs that consist only of three notes into a note that is held for almost 2 measures.
Prompt 5 (producerAI version): aggressive solo cello, Ab minor, rapid 16th note bursts of three distinct notes followed by a massive two-measure held vibrato note, cinematic and high tension, 150 bpm
Prompt 6: that was all based on 8th notes in relation to 150 bpm – I was talking 16th notes and then a long held not (very little vibrato if at all!!!)
Prompt 6 (producerAI version): dramatic solo cello, 150 bpm, sharp 16th note runs, three note cells, leading into a two measure held note, zero vibrato, cold and mechanical, Ab minor, cinematic intensity
Prompt 7: Nothing I’m asking for is in here. I’m getting music that Bach would have written 300 hundred years ago. I’m not interested in that.
Prompt 7 (producerAI version): modern solo cello, Ab minor, industrial precision, fast 16th-note cells, 3 unique notes, slamming into a 2-measure dead-tone sustain, no vibrato, flat and intense, cinematic horror aesthetic, 150 bpm
Love this article. Can’t wait for the bubble to burst. Also: I need to be able to buy SSDs and memory again, so I’m hoping for a flood of used products on the market…
This is very useful if you don’t have a microphone available but need to quickly record a sketch into Logic for example. This is how to set up your iPhone as a microphone using your Mac’s built-in utilities, no third-party software needed:
Connect via cable: Use a charging cable (Lightning or USB-C) to physically connect your iPhone to your Mac.
Select “trust this computer” on the iPhone: Tap Trust on your iPhone when prompted, and enter your passcode.
Open Audio MIDI Setup: Locate and launch the application in the Utilities folder (/Applications/Utilities).
Open the “Audio Devices” window: If the window is not visible, navigate to Window > Audio Devices (or press Command + 1).
Click “enable” below the iPhone name in the sidebar.
Only in the folder you choose (not its subfolders)
Not require your password
Not touch system files
In order to run the following commands, the Terminal will have to have access to your storage devices. Read this blog post to learn how to enable Full Disk Access for Terminal.
Step-by-Step Instructions:
Open Terminal Press Command + Space, type Terminal, then press Return.
Type find, then a space. Don’t press Return yet.
Drag the folder into the Terminal window. This automatically inserts the correct file path — even if the path contains spaces or it’s on an external drive. For example, it might look like this: find /Volumes/My\ External\ Drive/Some\ Folder (You’ll see backslashes \ before spaces — that’s normal.)
Complete the command by adding this to the end: -maxdepth 1 -name .DS_Store -delete So the full command might look like: find /Volumes/My\ External\ Drive/Some\ Folder -maxdepth 1 -name .DS_Store -delete
Press Return. That’s it! If there’s a .DS_Store file in that folder, it will be deleted instantly. You won’t get a confirmation message — Terminal just does it.
Quick note about paths:
In the Terminal, spaces are used to separate parts of a command — like the command itself from the options and file or folder names. So if a folder is called My Folder, typing it without any special formatting (like My Folder) will confuse the Terminal into thinking you’re referring to two separate things (“My” and “Folder”). To fix this, you can escape the space with a backslash (\), like this: My\ Folder. This tells the Terminal, “treat the space as part of the name.” Another option is to wrap the entire path in quotes, like "My Folder", which also works. But important: don’t combine the two — a backslash inside quotes (like "My\ Folder") will not work and will actually break the command. Use either backslashes or quotes, but not both.
Examples:
Deleteing “.DS_Store” from the Desktop folder: find ~/Desktop -maxdepth 1 -name .DS_Store -delete
Deleteing “.DS_Store” from the Documents folder: find ~/Documents -maxdepth 1 -name .DS_Store -delete
This article explains how to enable Full Disk Access for the Terminal application on macOS (So You Can Safely Work with All Files Even Hidden or Protected Ones)
Why would you do this?
macOS protects certain files and folders (like Mail, Safari, external drives, and some hidden system folders) by default. If you run a command in Terminal and it doesnt seem to work or skips some files it might be because Terminal doesn’t have Full Disk Access. Giving Terminal Full Disk Access lets it do what you tell it to
Step-by-Step: How to Enable Full Disk Access for Terminal
Open System Settings Click the Apple menu in the top-left corner. Choose System Settings (or System Preferences on older macOS versions).
Go to Privacy & Security In the left-hand sidebar, scroll down and click Privacy & Security. On the right side, scroll down until you see Full Disk Access and click it.
Add Terminal to the list Click the + (plus) button at the bottom of the list. A file picker will appear. Press Command + Shift + G (or navigate manually). In the “Go to the folder” box, type: /System/Applications/Utilities/ Press Return, then select Terminal.app, and click Open. You’ll now see Terminal in the list, with the toggle turned on (or you’ll need to turn it on yourself).
Restart Terminal (just to be safe) Activate the Terminal app, the quit the Terminal app completely (press Command + Q while its focused). Then reopen it as normal.
Important Notes:
You only need to do this once. This does not give Terminal uncontrolled access to your Mac it just lets you, the user, tell Terminal to access protected folders if needed. Of course, still be very careful with commands when Full Disk Access is enabled Terminal can now read/write more files than before, especially commands you copy from pages on the internet!
Special security note example:
Copy-pasting curl commands from the internet can be extremely risky because they can download and run unknown code on your system sometimes with full permissions. For example, a popular and benign command to install Pi-hole looks like this:
curl -sSL https://install.pi-hole.net | bash
While this works and is safe if you trust the source (in this case the developers of pihole), you’re essentially letting a remote server run code on your computer without seeing what it is first. A malicious site could do the same but install malware, steal data, or damage your system.
Note: The | symbol (this is not the uppercase letter I as in Ian or the lower case “l” as in letter) is called a pipe, it takes the output of one command (in this case, the download from curl which is a script that handles the full installation of the pi-hole service!) and feeds it directly into another command (bash), which runs it. This is powerful but highly dangerous if misused.
Working with the new beta of the upcoming Zebra3 from u-he and doing a little sound design for it this sound happened and I liked it so much that this one patch can make a whole track…
Apple Logic Pro project bundles normally end in .logicx. If this extension is visible in Finder, it clutters the file name and looks odd when you are doing a quick Save As… during a session. The tiny helper below walks your project drives and toggles the hidden extension flag so that Logic’s bundle appears extension-less in Finder.
TL;DR – Drop the script somewhere on your drive, make it executable, then schedule it in LaunchControl to run every few minutes. Your projects will stay tidy automatically.
Why?
Logic’s default behaviour is to hide the extension for new projects, but there are plenty of ways for it to re-appear (cloning projects, copying between volumes, third-party utilities, expanding .zip archives etc.). Manually hiding the extension file-by-file quickly becomes a drag.
What the script does
Walks one or more directories (your project drives) up to eight folders deep.
Finds anything that matches *logicx (Logic project bundles).
Skips files that are locked (immutable flag set).
Runs the SetFile -a E command to mark the bundle’s extension as invisible.
That’s it.
Prerequisites
macOS (tested on Ventura & Sonoma)
Xcode Command Line Tools (provides the SetFile utility)
LaunchControl – the easiest way to schedule background jobs on macOS. (Technically optional, but strongly recommended.)
Installation / Setup
Install LaunchControl if you don’t have it yet.
Save the script below as hide_logic_extension.sh somewhere convenient (e.g. ~/Scripts). Adjust the DIRECTORIES array so it points at all your Logic project volumes.
Make it executable:
chmod +x hide_logic_extension.sh
Create a new Launch Agent in LaunchControl that calls the script every few minutes. (In LaunchControl ? New ? User Agent, point Program to the script and set a simple start interval, e.g. 300 s.)
If you prefer the command line, you can craft your own plist and load it via launchctl, but I’ve found the GUI to be far less brittle.
Script contents
#!/bin/zsh
# Path to SetFile – part of the Xcode CLT package
SETFILE="/usr/bin/SetFile"
# Directories to search – EDIT THIS
DIRECTORIES=(
"/Volumes/DRIVE-1"
"/Volumes/DRIVE-2"
)
for DIRECTORY in "${DIRECTORIES[@]}"; do
echo "Processing directory: $DIRECTORY"
# Find files matching *logicx (Logic project bundles)
find "$DIRECTORY" \
-not -path "*.Trashes" \
-not -path "*.DocumentRevisions-V100" \
-not -path "*.TemporaryItems" \
-maxdepth 8 \
-name "*logicx" | while read -r file; do
# Skip locked files/bundles
if ls -lO "$file" | grep -q 'uchg'; then
echo "Skipping locked file: $file"
else
"$SETFILE" -a E "$file" && \
echo "Modified: $file" || \
echo "Failed to modify: $file"
fi
done
done
LaunchControl settings
Below is a screenshot of a minimal configuration that runs the job every five minutes. (Replace with your own once you have the script in place.)
Many small macOS scripts and developer utilities rely on Apple’s Command-Line Tools for Xcode package. Among other things, it ships:
git, svn, and other version-control binaries
clang & friends for compiling C/C++/Obj-C
make, ld, strip, ar, nm, …
SetFile, PlistBuddy, and dozens of helper tools used in shell scripts
If you ever tried to run git on a fresh Mac and saw a dialog asking to “Install Command Line Developer Tools”, this is what macOS was talking about. Below are three quick ways to get them.
Time required: ? 2 – 3 minutes on a fast connection (700 MB download). No Apple-ID sign-in needed unless you prefer the full Xcode route.
1. One-liner in Terminal (fastest)
Open Terminal.app (? Space ? Terminal).
Run:xcode-select --install
A small dialog appears – click Install and accept the license.
That’s it. After the installer finishes you can verify with:
xcode-select -p # ? /Library/Developer/CommandLineTools
clang --version # should print Apple clang …
2. Via the full Xcode app (App Store)
Installing the full 20 GB Xcode bundle also drops the command-line tools on your system. Choose this path only if you plan to use the Xcode IDE.
Open the App Store and search for Xcode.
Click Get / Install (Apple-ID required).
Once Xcode finishes downloading, open it once so it can install its components.
Download the DMG that matches your macOS version, e.g. Command Line Tools for Xcode 15.3.
Mount the DMG and double-click the .pkg inside.
Accepting the license non-interactively
Scripting a fleet of Macs? After installation run:
sudo xcodebuild -license accept
This pre-accepts the license so build systems won’t hang waiting for T&C confirmation.
Uninstalling (rarely needed)
To remove the standalone tools:
sudo rm -rf /Library/Developer/CommandLineTools
Then reinstall with xcode-select --install whenever you need them again.
?? Do not delete if they live inside Xcode.app – use Launchpad or Finder->Applications to remove Xcode instead.
Troubleshooting
• “Command line tools are already installed, use Software Update to install updates.” – They’re present; run softwareupdate -l to check for newer versions. • xcode-select: error: command line tools are already installed, use Software Update to install – same as above. • git: command not found even after installing – Open a new Terminal window or run hash -r to refresh your shell’s path cache.
Wrap-up
You now have Apple’s developer toolkit on your Mac. Most of the scripts in this repo (including the Hide Logic Extension helper) will “just work” from here on.