Editando o XML do Projeto
Manipular arquivos .mmp por linha de comando para tarefas em massa.
O que você vai aprender
- Descomprimir, inspecionar e recomprimir projetos do LMMS
- Corrigir caminhos de samples em massa
- Versionar projetos com Git de forma útil
Antes de começar
- Familiaridade com linha de comando
- Entender que `.mmpz` é XML comprimido
Editando o XML do Projeto🔗
Duração estimada: 40 minutos
O formato aberto do LMMS permite operações que a interface não oferece. Esta é a parte do guia que trata o projeto como dado, não como documento.
Faça backup antes de qualquer edição manual. Um XML malformado impede o projeto de abrir, e o LMMS não oferece recuperação. Trabalhe sempre sobre uma cópia.
Descomprimir e recomprimir🔗
O .mmpz é XML comprimido com zlib no formato gzip:
# descomprimir
zcat projeto.mmpz > projeto.mmp
# ou
gunzip -c projeto.mmpz > projeto.mmp
# recomprimir
gzip -c projeto.mmp > projeto-novo.mmpz
O LMMS abre .mmp diretamente, então você pode simplesmente trabalhar no descomprimido.
A estrutura do arquivo🔗
<?xml version="1.0"?>
<!DOCTYPE lmms-project>
<lmms-project version="1.0" type="song" creator="LMMS">
<head bpm="128" mastervol="100" masterpitch="0"/>
<song>
<trackcontainer type="song">
<track type="0" name="Lead" muted="0">
<instrumenttrack pan="0" vol="100" fxch="1">
<instrument name="tripleoscillator">
<tripleoscillator vol0="33" ... />
</instrument>
<eldata fwet="0" fcut="14000" ... />
</instrumenttrack>
<pattern name="..." pos="0" len="192">
<note key="60" pos="0" len="48" vol="100" pan="0"/>
</pattern>
</track>
</trackcontainer>
</song>
</lmms-project>
Pontos úteis:
| Elemento | O que guarda |
|---|---|
<head bpm=...> | BPM e volume mestre |
<track type=...> | 0 = instrumento, 1 = beat/bassline, 2 = sample, 5 = automação |
fxch | Canal do FX Mixer da trilha |
<note key=...> | Nota MIDI, posição em ticks, duração, velocity |
src= | Caminho de sample |
Tarefa 1: encontrar todos os samples🔗
zcat projeto.mmpz | grep -o 'src="[^"]*"' | sort -u
Útil antes de arquivar ou compartilhar um projeto.
Tarefa 2: corrigir caminhos em massa🔗
Quando a biblioteca de samples muda de lugar:
zcat projeto.mmpz > tmp.mmp
sed -i 's|/home/antigo/samples/|/home/novo/samples/|g' tmp.mmp
gzip -c tmp.mmp > projeto-corrigido.mmpz
rm tmp.mmp
Isso resolve em segundos o que na interface levaria uma hora de recarregamentos manuais.
Tarefa 3: script de coleta de assets🔗
O LMMS não tem “collect all assets”. Um script resolve:
#!/bin/bash
# coleta-assets.sh — copia todos os samples de um projeto para uma pasta
set -euo pipefail
PROJ="$1"
DEST="${2:-assets}"
mkdir -p "$DEST"
zcat "$PROJ" > /tmp/proj.mmp
grep -o 'src="[^"]*"' /tmp/proj.mmp | sed 's/src="//; s/"$//' | sort -u |
while read -r sample; do
[ -f "$sample" ] || { echo "AUSENTE: $sample" >&2; continue; }
cp -n "$sample" "$DEST/"
# reescreve o caminho para a pasta local
esc_old=$(printf '%s' "$sample" | sed 's/[|&]/\\&/g')
base=$(basename "$sample")
sed -i "s|$esc_old|$DEST/$base|g" /tmp/proj.mmp
done
gzip -c /tmp/proj.mmp > "${PROJ%.mmpz}-portatil.mmpz"
echo "Gerado: ${PROJ%.mmpz}-portatil.mmpz"Tarefa 4: versionar com Git🔗
Comprimidos não geram diffs legíveis. A solução é versionar o .mmp:
# .gitattributes — tratar .mmp como texto
echo '*.mmp diff' >> .gitattributes
# fluxo de trabalho
zcat faixa.mmpz > faixa.mmp
git add faixa.mmp
git commit -m "arranjo: adiciona seção de break"
Agora git diff mostra exatamente quais notas e parâmetros mudaram entre versões.
Um git diff de projeto do LMMS é surpreendentemente legível. Você vê literalmente <note key="60" pos="0" len="48"/> aparecendo e sumindo. Para quem trabalha em colaboração ou quer entender o que mudou desde ontem, isso não tem substituto na interface.
Tarefa 5: extrair informações🔗
# BPM do projeto
zcat projeto.mmpz | grep -o 'bpm="[0-9]*"' | head -1
# contar trilhas de instrumento
zcat projeto.mmpz | grep -c '<instrumenttrack'
# listar instrumentos usados
zcat projeto.mmpz | grep -o '<instrument name="[^"]*"' | sort | uniq -c
Erros comuns
- Editar sem backup e produzir XML inválido
- Recomprimir com um algoritmo diferente de gzip
- Editar valores de parâmetro sem conhecer o intervalo válido
Você aprendeu
.mmpzé XML gzipado;zcategzip -cfazem a conversão nos dois sentidos- Correção de caminhos em massa com
sedresolve em segundos o que a interface não faz - Um script de coleta de assets torna o projeto portátil
- Versionar o
.mmpno Git produz diffs legíveis nota a nota