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:

ElementoO que guarda
<head bpm=...>BPM e volume mestre
<track type=...>0 = instrumento, 1 = beat/bassline, 2 = sample, 5 = automação
fxchCanal 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; zcat e gzip -c fazem a conversão nos dois sentidos
  • Correção de caminhos em massa com sed resolve em segundos o que a interface não faz
  • Um script de coleta de assets torna o projeto portátil
  • Versionar o .mmp no Git produz diffs legíveis nota a nota

Artigos relacionados

Referências🔗

  1. LMMS — repositório oficial no GitHub