GarageBand
Jump to navigation
Jump to search
Garageband is Apple's consumer multitrack editor.
Garageband files are actually directories with a ".band" extenstion.
Structure of the ".band" directory
Old versions of GarageBand
The ".band" directory contained:
- projectData
- Media/ - a directory containing source aiffs.
Previous version (GarageBand v6? april 2014?)
The ".band" directory contained:
- projectData
- Contents/
- Contents/PkgInfo
- Media/
- Media/Images/
- Media/Recording/
- Output/
- Output/arrange_screenshot.tiff
- Output/metadata.plist
- Output/Output.aif
- Thumbs/
Version 10.0.3 (oct. 2014)
The ".band" directory contains:
- projectData
- Alternatives/
- Alternatives/000/
- Alternatives/000/Autosave/
- Alternatives/000/Autosave/.dummy
- Alternatives/000/DisplayState.plist
- Alternatives/000/MetaData.plist
- Alternatives/000/Previews/
- Alternatives/000/Previews/Output.aif
- Alternatives/000/ProjectData
- Alternatives/000/Undo Data.nosync/
- Alternatives/000/WindowImage.jpg
- Alternatives/000/Autosave/
- Alternatives/000/
- Contents/
- Contents/PkgInfo
- Media/
- Media/Audio Files/
- Media/Freeze Files.nosync/
- Output/
- Output/Output.aif
- Resources/
- Resources/ProjectInformation.plist
Structure of the "projectData" file
The "projectData" file is an xml file describing the project along with a large chunk of base64 encoded data within the tags.
Once base64 decoded, this data tag still contains some binary data with human readable strings which can be found from the Terminal with a command like:
cat "foo.band/projectData" \ | sed -n '/<data>/,/<\/data>/{//!p;}' \ | base64 -D \ | strings \ | less
These strings can be filtered out. For example, the following command gets (almost) only the names of the instruments used in the project:
cat "foo.band/projectData" \ | sed -n '/<data>/,/<\/data>/{//!p;}' \ | base64 -D \ | strings \ | awk ' /^ Inst 1$/{flag=1} /^ Inst 12$/{flag=0} flag { print }'
Samples
Samples can be found here: [1]