um utilitário de linha de comando de arquivo de sequência AKAI MPC 1000
Costumo usar meu MPC 1000 como reprodutor para faixas de apoio ou loops de bateria quando pratico música ou apenas quero algo para tocar rapidamente. Eu normalmente crio um loop de bateria na minha DAW preferida e depois exporto vários arquivos wav em velocidades diferentes. Eu então copiaria esses arquivos para o meu MPC e salvaria uma sequência para cada arquivo wav. Na próxima vez que eu quiser praticar ou improvisar, basta carregar rapidamente uma pasta de arquivos de sequência e wav e posso alternar facilmente entre várias velocidades.
Criar todas as sequências no próprio MPC é uma tarefa muito tediosa, por isso escrevi esta ferramenta. Agora só preciso criar uma "sequência de modelo" no MPC, copiá-la para o computador e criar vários arquivos (renomeados) a partir dela. Em seguida, deixei a ferramenta me ajudar a mostrar metainformações dos arquivos de sequência e realizar tarefas repetitivas, como substituir o nome do arquivo nas faixas de ÁUDIO ou substituir as sequências BPM.
Embora eu tenha escrito isso para arquivos de sequência criados a partir do MPC 1000 executando JJOS, presumo que a ferramenta também funcionaria com os arquivos do MPC 2500, acho que eles compartilham o mesmo formato. Talvez também o do MPC 500 funcionasse, não tenho certeza. Eu certamente apreciaria qualquer teste e feedback sobre o uso desses arquivos de modelos MPC.
Se você não quiser se preocupar em instalar o Python em seu sistema operacional e não estiver interessado em executar a versão de desenvolvimento mais recente, basta usar os executáveis independentes disponíveis desde a versão v1.2: https://github.com/JOJ0/ mpc1k-seq/releases/tag/v1.2
seq.exe
seq
(não tenho certeza se as versões mais recentes do MacOS funcionarão, informe quaisquer problemas) Para poder executar seq
de qualquer lugar do seu sistema, copie-o para um local pesquisado:
Use o Windows Explorer para copiar o arquivo seq.exe para c:windowssystem32
Observe que este é um truque sujo. Se você não quiser fazer isso ou não tiver privilégios para fazê-lo, no prompt de comando você pode simplesmente "cd" para o local onde o seq.exe está salvo e executá-lo a partir daí :-)
Certifique-se de residir no diretório onde o seq foi salvo. Seu usuário precisa ter privilégios de administrador. Sua senha será solicitada ao executar o seguinte comando:
sudo cp seq /usr/local/bin/
Por favor, basta seguir as etapas no capítulo seguinte!
pule este capítulo se você estiver usando os executáveis descritos acima
Primeiro de tudo, verifique se você já possui uma versão Python em seu sistema com python --version
Você precisa do Python 2.7.x
Clone o repositório do github e vá para o diretório.
git clone https://github.com/JOJ0/mpc1k-seq.git
cd mpc1k-seq
Baixe um instalador msi aqui
instale a ferramenta adicionando o diretório repo clonado à variável% path% do sistema,
ou apenas copie-o rapidamente para um caminho que já esteja no caminho de pesquisa do sistema
copy seq.py c:windowssystem32
O Mac OS X 10.11 "El Capitan" vem com Python 2.7.6 pré-instalado, que é a versão na qual o utilitário foi desenvolvido e com o qual é testado. OX X 10.8 tinha Python 2.6, que provavelmente também funcionaria. 10.9 e mais recentes têm 2.7.x, o que deve servir.
Se você não tiver o acima, instale o pacote 2.7 mais recente aqui ou use o homebrew para obtê-lo.
instale a ferramenta
cp seq.py /usr/local/bin/
Você provavelmente já tem uma versão do Python em execução! Verifique conforme descrito acima!
Algumas distribuições Linux modernas já usam Python 3.x por padrão, você teria que instalar um pacote python2
Sistemas baseados em Debian
apt install python2.7
Baseado em Redhat
yum install python27
e defina a primeira linha do script para usar esta versão python (por exemplo, #!/usr/bin/python2.7
)
finalmente, instale a ferramenta
cp seq.py /usr/local/bin/
Caso você esteja usando a versão de desenvolvimento, você terá que executar seq.py em vez de seq. Observe também que o seq.exe do Windows pode ser executado sem a terminação .exe. O executável do MacOS é chamado apenas de seq e não possui um final de arquivo
O utilitário vem como um utilitário de linha de comando no estilo UNIX e, como tal, mostra todos os seus recursos quando executado com as opções típicas --help ou -h:
seq -h
usage: seq [-h] [--search SEARCHTERM] [--replace REPLACETERM]
[--correct-wav] [--correct-wav-bpm] [--filter BPM_LIST]
[--correct-bpm] [--hex] [--verbose]
path
positional arguments:
path path of *.SEQ files to be processed
optional arguments:
-h, --help show this help message and exit
--search SEARCHTERM, -s SEARCHTERM
search for given string in file contents
--replace REPLACETERM, -r REPLACETERM
replace SEARCHTERM with REPLACETERM
--correct-wav, -w sets basename of .SEQ file to the place where
SEARCHTERM is found. Use this if your seq and wav
files are named identically
--correct-wav-bpm, -p
replace BPM in found SEARCHTERM with BPM found in
filename
--filter BPM_LIST, --bpm BPM_LIST, -b BPM_LIST
historically was used as a space seperated BPM list
but actually it is a simple filter: only filenames
containing one of the strings in the list, will be
processed
--correct-bpm, -c set BPM to the same as in filename
--correct-length, -l set the sequences looplength (bars) to the same as in
filename. Assumes value in filename is marked with
trailing "b" (eg 8b)
--hex, -x show hex values next to decimal and strings
--verbose, -v also show border markers and not yet studied header
information
apenas mostre meta informações de todos os arquivos seq no diretório atual
seq .
mostra informações de todos os arquivos seq que possuem 64 ou 512 no nome do arquivo (geralmente valores BPM)
seq -b "64 512" .
também exibe valores em hexadecimal
seq -b "64 512" -x .
procure por uma string
seq -b "64 512" -x -s "FunkBG" .
substitua a primeira ocorrência de SEARCHTERM por REPLACETERM (execute o script novamente para substituir a próxima instância de SEARCHTERM)
FIXME – “replacecount” pode ser configurável em versões futuras
seq -b "64 512" -x -s "FunkBG" -r "Blues01" .
Mostre todos os arquivos .SEQ no diretório atual ( .
) que possuem 80 no nome do arquivo ( -b "80"
ou --filter "80"
e pesquise o termo "FunkBG"
no arquivo
Geralmente isso é útil se quisermos pesquisar e substituir o nome de um arquivo wav em uma trilha de áudio, mas provavelmente também poderíamos usá-lo para substituir o nome de um "arquivo de programa" MPC (.PGM) em algum lugar na sequência (binária) arquivo.
Vamos dar uma olhada na linha de comando e sua saída:
seq -b "80" -s FunkBG .
* PATH used: .
* searching for "FunkBG" (after End of header)
* bpm_list (filter_list): ['80']
############### FunkBG_080_8bar.SEQ ################
4:20 version: MPC1000 SEQ 4.40
28:30 bars: 8
32:34 bpm: 80
################## End of header ###################
Found first occurence of SEARCHTERM at index 7168, it's 6 chars long
If SEARCHTERM is the START of a wav filename in an AUDIO track,
this would be the first half: "FunkBG_0"
and this would be the second half: "80_8bar"
** REPLACE OPTIONS: ********************************
** --replace simply replaces FunkBG with REPLACETERM.
** --correct-wav (-w) puts this files basename at found terms position,
** it would replace "FunkBG_0" with "FunkBG_0",
** and "80_8bar" with "80_8bar".
** --correct-wav-bpm (-p) just replaces the bpm part in the found term,
?? didn't find a possible bpm value in given term (FunkBG),
?? use underscores or dashes as seperating characters!
** it would replace "FunkBG" with "FunkBG".
** If this all looks like crap, don't do it! Existing files will be OVERWRITTEN!
A primeira seção da saída mostra metainformações salvas no cabeçalho dos arquivos, como versão, número de compassos e BPM da sequência.
Após o marcador "Fim do cabeçalho", vemos que nosso termo de pesquisa "FunkBG" foi encontrado e provavelmente é o início do nome de um arquivo wav em uma faixa de ÁUDIO.
Vamos supor que gostaríamos de substituir parte do nome dos arquivos wav configurados no arquivo seq. O nome de um arquivo wav estranhamente é salvo em dois pedaços de 8 bytes em lugares diferentes. O script está tentando nos ajudar a descobrir se encontrou apenas parte de um nome de arquivo wav ou algo mais (como um nome de arquivo pgm ou alguma outra string).
A seguir estão nossas possibilidades de substituir essa string:
--replace (-r)
é a forma mais simples de substituição, apenas coloca o REPLACETERM na posição onde encontrou o SEARCHTERM. Se REPLACETERM for maior que SEARCHTERM, ele substituirá a parte restante.
--correct-wav (-w)
é a opção a ser usada quando nossos arquivos wav têm nomes exatamente idênticos aos nossos arquivos wav (exceto o final do arquivo, é claro). Esta é a opção que mais uso. No caso do arquivo seq de exemplo do repositório github, os nomes dos arquivos wav e seq já são idênticos, portanto, esta opção atualmente não é muito útil.
--correct-wav-bpm (-p)
só faz sentido quando SEARCHTERM contém números que representam valores de BPM. Vou mostrar em outro exemplo.
Cada uma das opções indica exatamente o que substituiria, portanto, se estivermos satisfeitos com uma delas, apenas executaremos novamente o script e adicionaremos adicionalmente a opção de substituição à linha de comando.
Por exemplo, se escolhermos -r
como opção a ser usada, porque queremos simplesmente substituir "FunkBG" por "PunkBG", este seria o comando e sua saída resultante:
seq -b "80" -s FunkBG -r "PunkBG" .
* PATH used: .
* searching for "FunkBG" (after End of header)
* replace is enabled! REPLACETERM is "PunkBG"
* bpm_list (filter_list): ['80']
############### FunkBG_080_8bar.SEQ ################
4:20 version: MPC1000 SEQ 4.40
28:30 bars: 8
32:34 bpm: 80
################## End of header ###################
Found first occurence of SEARCHTERM at index 7168, it's 6 chars long
If SEARCHTERM is the START of a wav filename in an AUDIO track,
this would be the first half: "FunkBG_0"
and this would be the second half: "80_8bar"
!!! replacing FIRST occurence of "FunkBG" with "PunkBG",
!!! and overwriting ./FunkBG_080_8bar.SEQ ...
Se procurarmos novamente por FunkBG, certamente não o encontraremos mais:
seq -b "80" -s "FunkBG" .
* PATH used: .
* searching for "FunkBG" (after End of header)
* bpm_list (filter_list): ['80']
############### FunkBG_080_8bar.SEQ ################
4:20 version: MPC1000 SEQ 4.40
28:30 bars: 8
32:34 bpm: 80
################## End of header ###################
your SEARCHTERM "FunkBG" was not found!
Em vez disso, o punk seria encontrado e teríamos opções semelhantes às da nossa primeira pesquisa acima:
seq -b "80" -s "Punk" .
* PATH used: .
* searching for "Punk" (after End of header)
* bpm_list (filter_list): ['80']
############### FunkBG_080_8bar.SEQ ################
4:20 version: MPC1000 SEQ 4.40
28:30 bars: 8
32:34 bpm: 80
################## End of header ###################
Found first occurence of SEARCHTERM at index 7168, it's 4 chars long
If SEARCHTERM is the START of a wav filename in an AUDIO track,
this would be the first half: "PunkBG_0"
and this would be the second half: "80_8bar"
** REPLACE OPTIONS: ********************************
** --replace simply replaces Punk with REPLACETERM.
** --correct-wav (-w) puts this files basename at found terms position,
** it would replace "PunkBG_0" with "FunkBG_0",
** and "80_8bar" with "80_8bar".
** --correct-wav-bpm (-p) just replaces the bpm part in the found term,
?? didn't find a possible bpm value in given term (Punk),
?? use underscores or dashes as seperating characters!
** it would replace "Punk" with "Punk".
** If this all looks like crap, don't do it! Existing files will be OVERWRITTEN!
Este é o caso de uso para o qual escrevi este script. Vamos pegar o arquivo do exemplo acima, onde substituímos Funk por Punk, mas vamos copiá-los e renomeá- los. Você pode copiar/renomear como quiser, por exemplo, o iOS X Finder possui uma ótima ferramenta de renomeação em massa integrada. Eu faço isso diretamente na linha de comando agora, enquanto estamos nisso:
cp FunkBG_080_8bar.SEQ PunkBG_080_8bar.SEQ
cp FunkBG_080_8bar.SEQ PunkBG_090_8bar.SEQ
cp FunkBG_080_8bar.SEQ PunkBG_100_8bar.SEQ
Ok, agora gostaríamos de definir o nome dos arquivos wav em todos os 3 "arquivos de sequência Punk" para o mesmo nome do arquivo. Primeiro procuramos por Punk e vemos o que temos. Provavelmente existem outros arquivos seq nesta pasta, então selecionamos particularmente nossos 3 arquivos com a opção --filter (-b)
:
seq --filter Punk -s "PunkBG" .
* PATH used: .
* searching for "PunkBG" (after End of header)
* bpm_list (filter_list): ['Punk']
############### PunkBG_080_8bar.SEQ ################
4:20 version: MPC1000 SEQ 4.40
28:30 bars: 8
32:34 bpm: 80
################## End of header ###################
Found first occurence of SEARCHTERM at index 7168, it's 6 chars long
If SEARCHTERM is the START of a wav filename in an AUDIO track,
this would be the first half: "PunkBG_0"
and this would be the second half: "80_8bar"
** REPLACE OPTIONS: ********************************
** --replace simply replaces PunkBG with REPLACETERM.
** --correct-wav (-w) puts this files basename at found terms position,
** it would replace "PunkBG_0" with "PunkBG_0",
** and "80_8bar" with "80_8bar".
** --correct-wav-bpm (-p) just replaces the bpm part in the found term,
?? didn't find a possible bpm value in given term (PunkBG),
?? use underscores or dashes as seperating characters!
** it would replace "PunkBG" with "PunkBG".
** If this all looks like crap, don't do it! Existing files will be OVERWRITTEN!
############### PunkBG_090_8bar.SEQ ################
4:20 version: MPC1000 SEQ 4.40
28:30 bars: 8
32:34 bpm: 80
bpm in filename is different! correct with -c
################## End of header ###################
Found first occurence of SEARCHTERM at index 7168, it's 6 chars long
If SEARCHTERM is the START of a wav filename in an AUDIO track,
this would be the first half: "PunkBG_0"
and this would be the second half: "80_8bar"
** REPLACE OPTIONS: ********************************
** --replace simply replaces PunkBG with REPLACETERM.
** --correct-wav (-w) puts this files basename at found terms position,
** it would replace "PunkBG_0" with "PunkBG_0",
** and "80_8bar" with "90_8bar".
** --correct-wav-bpm (-p) just replaces the bpm part in the found term,
?? didn't find a possible bpm value in given term (PunkBG),
?? use underscores or dashes as seperating characters!
** it would replace "PunkBG" with "PunkBG".
** If this all looks like crap, don't do it! Existing files will be OVERWRITTEN!
############### PunkBG_100_8bar.SEQ ################
4:20 version: MPC1000 SEQ 4.40
28:30 bars: 8
32:34 bpm: 80
bpm in filename is different! correct with -c
################## End of header ###################
Found first occurence of SEARCHTERM at index 7168, it's 6 chars long
If SEARCHTERM is the START of a wav filename in an AUDIO track,
this would be the first half: "PunkBG_0"
and this would be the second half: "80_8bar"
** REPLACE OPTIONS: ********************************
** --replace simply replaces PunkBG with REPLACETERM.
** --correct-wav (-w) puts this files basename at found terms position,
** it would replace "PunkBG_0" with "PunkBG_1",
** and "80_8bar" with "00_8bar".
** --correct-wav-bpm (-p) just replaces the bpm part in the found term,
?? didn't find a possible bpm value in given term (PunkBG),
?? use underscores or dashes as seperating characters!
** it would replace "PunkBG" with "PunkBG".
** If this all looks like crap, don't do it! Existing files will be OVERWRITTEN!
Se examinarmos de perto a saída dos 3 arquivos, encontraremos essas possibilidades úteis
--correct-bpm (-c)
poderia corrigir o BPM da sequência nos arquivos 2 e 3 (as cópias)--correct-wav (-w)
pode substituir o nome do arquivo wav das faixas de ÁUDIO para que seja igual ao nome dos arquivos seq. Também nos arquivos 2 e 3 (as cópias) Se agora usarmos as opções -w
e -c
, obteremos a seguinte saída:
seq --filter Punk -s "PunkBG" -w -c
* PATH used: .
* searching for "PunkBG" (after End of header)
* bpm_list (filter_list): ['Punk']
* correct-bpm is enabled!
* correct-wav is enabled!
############### PunkBG_080_8bar.SEQ ################
4:20 version: MPC1000 SEQ 4.40
28:30 bars: 8
32:34 bpm: 80
################## End of header ###################
Found first occurence of SEARCHTERM at index 7168, it's 6 chars long
If SEARCHTERM is the START of a wav filename in an AUDIO track,
this would be the first half: "PunkBG_0"
and this would be the second half: "80_8bar"
-> found underscore seperated bpm value in given term: 80
!!! putting "PunkBG_0" where "PunkBG_0",
!!! putting "80_8bar" where "80_8bar",
!!! replacing bpm value,
!!! and overwriting ./PunkBG_080_8bar.SEQ ...
############### PunkBG_090_8bar.SEQ ################
4:20 version: MPC1000 SEQ 4.40
28:30 bars: 8
32:34 bpm: 80
bpm in filename is different! This will be fixed now!
################## End of header ###################
Found first occurence of SEARCHTERM at index 7168, it's 6 chars long
If SEARCHTERM is the START of a wav filename in an AUDIO track,
this would be the first half: "PunkBG_0"
and this would be the second half: "80_8bar"
-> found underscore seperated bpm value in given term: 90
!!! putting "PunkBG_0" where "PunkBG_0",
!!! putting "90_8bar" where "80_8bar",
!!! replacing bpm value,
!!! and overwriting ./PunkBG_090_8bar.SEQ ...
############### PunkBG_100_8bar.SEQ ################
4:20 version: MPC1000 SEQ 4.40
28:30 bars: 8
32:34 bpm: 80
bpm in filename is different! This will be fixed now!
################## End of header ###################
Found first occurence of SEARCHTERM at index 7168, it's 6 chars long
If SEARCHTERM is the START of a wav filename in an AUDIO track,
this would be the first half: "PunkBG_0"
and this would be the second half: "80_8bar"
-> found underscore seperated bpm value in given term: 100
!!! putting "PunkBG_1" where "PunkBG_0",
!!! putting "00_8bar" where "80_8bar",
!!! replacing bpm value,
!!! and overwriting ./PunkBG_100_8bar.SEQ ...
Uma última verificação nos mostra que o nome do arquivo wav e também o BPM foram corrigidos:
seq --filter Punk -s "PunkBG" .
* PATH used: .
* searching for "PunkBG" (after End of header)
* bpm_list (filter_list): ['Punk']
############### PunkBG_080_8bar.SEQ ################
4:20 version: MPC1000 SEQ 4.40
28:30 bars: 8
32:34 bpm: 80
################## End of header ###################
Found first occurence of SEARCHTERM at index 7168, it's 6 chars long
If SEARCHTERM is the START of a wav filename in an AUDIO track,
this would be the first half: "PunkBG_0"
and this would be the second half: "80_8bar"
** REPLACE OPTIONS: ********************************
** --replace simply replaces PunkBG with REPLACETERM.
** --correct-wav (-w) puts this files basename at found terms position,
** it would replace "PunkBG_0" with "PunkBG_0",
** and "80_8bar" with "80_8bar".
** --correct-wav-bpm (-p) just replaces the bpm part in the found term,
?? didn't find a possible bpm value in given term (PunkBG),
?? use underscores or dashes as seperating characters!
** it would replace "PunkBG" with "PunkBG".
** If this all looks like crap, don't do it! Existing files will be OVERWRITTEN!
############### PunkBG_090_8bar.SEQ ################
4:20 version: MPC1000 SEQ 4.40
28:30 bars: 8
32:34 bpm: 90
################## End of header ###################
Found first occurence of SEARCHTERM at index 7168, it's 6 chars long
If SEARCHTERM is the START of a wav filename in an AUDIO track,
this would be the first half: "PunkBG_0"
and this would be the second half: "90_8bar"
** REPLACE OPTIONS: ********************************
** --replace simply replaces PunkBG with REPLACETERM.
** --correct-wav (-w) puts this files basename at found terms position,
** it would replace "PunkBG_0" with "PunkBG_0",
** and "90_8bar" with "90_8bar".
** --correct-wav-bpm (-p) just replaces the bpm part in the found term,
?? didn't find a possible bpm value in given term (PunkBG),
?? use underscores or dashes as seperating characters!
** it would replace "PunkBG" with "PunkBG".
** If this all looks like crap, don't do it! Existing files will be OVERWRITTEN!
############### PunkBG_100_8bar.SEQ ################
4:20 version: MPC1000 SEQ 4.40
28:30 bars: 8
32:34 bpm: 100
################## End of header ###################
Found first occurence of SEARCHTERM at index 7168, it's 6 chars long
If SEARCHTERM is the START of a wav filename in an AUDIO track,
this would be the first half: "PunkBG_1"
and this would be the second half: "00_8bar"
** REPLACE OPTIONS: ********************************
** --replace simply replaces PunkBG with REPLACETERM.
** --correct-wav (-w) puts this files basename at found terms position,
** it would replace "PunkBG_1" with "PunkBG_1",
** and "00_8bar" with "00_8bar".
** --correct-wav-bpm (-p) just replaces the bpm part in the found term,
?? didn't find a possible bpm value in given term (PunkBG),
?? use underscores or dashes as seperating characters!
** it would replace "PunkBG" with "PunkBG".
** If this all looks like crap, don't do it! Existing files will be OVERWRITTEN!
FIXME... exemplo de como usar --correct-wav-bpm