утилита командной строки файла последовательности AKAI MPC 1000
Я часто использую свой MPC 1000 в качестве проигрывателя для минусовок или барабанных петель, когда занимаюсь музыкой или просто хочу быстро что-нибудь поджемовать. Обычно я создаю барабанную петлю в выбранной мной DAW, а затем экспортирую несколько wav-файлов с разной скоростью. Затем я копировал эти файлы на свой MPC и сохранял по одной последовательности для каждого wav-файла. В следующий раз, когда я захочу потренироваться или джемовать, мне просто нужно быстро загрузить папку с секвенсорами и WAV-файлами, и я смогу легко переключаться между несколькими скоростями.
Создание всех последовательностей на MPC — очень утомительная задача, поэтому я написал этот инструмент. Теперь мне просто нужно создать одну «последовательность шаблонов» на MPC, скопировать ее на компьютер и создать из нее несколько (переименованных) файлов. Затем я позволил этому инструменту помочь мне отображать метаинформацию файлов секвенций и выполнять повторяющиеся задачи, такие как замена имени файла на аудиодорожках или замена BPM секвенций.
Хотя я написал его для файлов последовательностей, созданных на MPC 1000 под управлением JJOS, я предполагаю, что этот инструмент будет работать и с файлами MPC 2500, я думаю, что они имеют один и тот же формат. Возможно, подойдет и тот, что от MPC 500, но в этом я не уверен. Я, конечно, буду признателен за любое тестирование и отзывы об использовании этих файлов моделей MPC.
Если вы не хотите заморачиваться с установкой Python в своей ОС и не заинтересованы в запуске последней разрабатываемой версии, просто используйте автономные исполняемые файлы, доступные с версии 1.2: https://github.com/JOJ0/ mpc1k-seq/релизы/тег/v1.2
seq.exe
seq
загрузки (не уверен, будут ли работать новые версии MacOS, сообщайте о любых проблемах) Чтобы иметь возможность выполнить seq
из любого места вашей системы, скопируйте его в место, которое ищется:
С помощью проводника Windows скопируйте файл seq.exe в c:windowssystem32.
Обратите внимание, что это грязный хак. Если вы не хотите этого делать или у вас нет на это прав, в командной строке вы всегда можете просто «cd» перейти к месту, где сохранен seq.exe, и запустить его оттуда :-)
Убедитесь, что вы находитесь в каталоге, в котором сохранен seq. Ваш пользователь должен иметь права администратора. Вам будет предложено ввести пароль при выполнении следующей команды:
sudo cp seq /usr/local/bin/
Пожалуйста, просто следуйте инструкциям в следующей главе!
пропустите эту главу, если вы используете исполняемые файлы, как описано выше.
Прежде всего проверьте, есть ли у вас уже версия Python в вашей системе с помощью python --version
Вам нужен Python 2.7.x
Клонируйте репозиторий github и перейдите в каталог.
git clone https://github.com/JOJ0/mpc1k-seq.git
cd mpc1k-seq
Загрузите установщик MSI здесь
установите инструмент, добавив клонированный каталог репо в системную переменную %path%,
или просто быстро и грязно скопируйте его в путь, который уже есть в пути поиска системы.
copy seq.py c:windowssystem32
Mac OS X 10.11 «El Capitan» поставляется с предустановленным Python 2.7.6 — версией, на которой была разработана и протестирована утилита. В OX X 10.8 был Python 2.6, который, вероятно, тоже будет работать. Все версии 10.9 и новее имеют версию 2.7.x, и этого должно быть достаточно.
Если у вас нет вышеуказанного пакета, установите последнюю версию пакета 2.7 отсюда или используйте доморощенный пакет, чтобы получить его.
установить инструмент
cp seq.py /usr/local/bin/
Скорее всего, у вас уже есть работающая версия Python! Проверьте, как описано выше!
Некоторые современные дистрибутивы Linux уже используют Python 3.x по умолчанию, вам придется установить пакет python2.
Системы на базе Debian
apt install python2.7
на основе Redhat
yum install python27
и установите первую строку сценария для использования этой версии Python (например, #!/usr/bin/python2.7
)
наконец, установите инструмент
cp seq.py /usr/local/bin/
Если вы используете версию для разработки, вам придется выполнить seq.py вместо seq. Также обратите внимание, что Windows seq.exe может выполняться без окончания .exe. Исполняемый файл MacOS называется просто seq и не имеет окончания файла.
Утилита представляет собой утилиту командной строки в стиле UNIX и поэтому показывает все свои возможности при запуске с типичными параметрами --help или -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
просто покажите метаинформацию всех файлов seq в текущем каталоге
seq .
показать информацию обо всех файлах seq, имена которых содержат цифры 64 или 512 (обычно значения BPM)
seq -b "64 512" .
также отображать значения в шестнадцатеричном формате
seq -b "64 512" -x .
поиск строки
seq -b "64 512" -x -s "FunkBG" .
замените первое появление SEARCHTERM на REPLACETERM (запустите сценарий еще раз, чтобы заменить следующий экземпляр SEARCHTERM)
FIXME — «replacecount» можно будет настроить в будущих выпусках.
seq -b "64 512" -x -s "FunkBG" -r "Blues01" .
Показать все файлы .SEQ в текущем каталоге ( .
), у которых в имени файла есть цифра 80 ( -b "80"
или --filter "80"
и выполнить поиск по термину "FunkBG"
в файле.
Обычно это полезно, если мы хотим найти и заменить имя WAV-файла в звуковой дорожке, но мы, вероятно, также могли бы использовать его для замены имени «программного файла» MPC (.PGM) где-нибудь в (двоичной) последовательности. файл.
Давайте посмотрим на командную строку и ее вывод:
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!
Первый раздел вывода показывает нам метаинформацию, сохраненную в заголовке файла, такую как версия, количество тактов и BPM последовательности.
После маркера «Конец заголовка» мы видим, что наш поисковый запрос «FunkBG» был найден и, скорее всего, это начало имени wav-файла на АУДИО-дорожке.
Предположим, мы хотели бы заменить часть имени wav-файла, настроенного в файле seq. Имя wav-файла странным образом сохраняется в двух 8-байтовых фрагментах в разных местах. Скрипт пытается помочь нам выяснить, нашел ли он только часть имени wav-файла или что-то еще (например, имя файла pgm или какую-то другую строку).
Далее приведены наши возможности замены этой строки:
--replace (-r)
— это самая простая форма замены, она просто помещает REPLACETERM в позицию, где он нашел SEARCHTERM. Если REPLACETERM длиннее SEARCHTERM, оставшаяся часть будет перезаписана.
--correct-wav (-w)
— это опция, которую можно использовать, когда наши wav-файлы имеют точно такие же имена, как и наши wav-файлы (за исключением, конечно, окончания файла). Это вариант, который я использую чаще всего. В случае примера seq-файла из репозитория github имена файлов wav и seq уже одинаковы, поэтому эта опция в настоящее время не очень полезна.
--correct-wav-bpm (-p)
имеет смысл только тогда, когда SEARCHTERM содержит числа, представляющие значения BPM. Я покажу это на другом примере.
В каждом из параметров точно указано, что они будут заменять, поэтому, если нас устраивает один из них, мы просто перезапускаем сценарий и дополнительно добавляем параметр замены в командную строку.
Например, если мы выбрали опцию -r
, поскольку хотим просто заменить «FunkBG» на «PunkBG», это будет команда и ее результат:
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 ...
Если мы сейчас снова поищем FunkBG, мы его точно больше не найдём:
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!
Вместо этого будет найден панк, и у нас будут те же варианты, что и при первом поиске выше:
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!
Именно для этого случая я и написал этот сценарий. Давайте возьмем файл из приведенного выше примера, где мы заменили Funk на Punk, но скопируем и переименуем его. Вы можете копировать/переименовывать как угодно, например, в iOS X Finder есть хороший встроенный инструмент массового переименования. Сейчас я делаю это прямо в командной строке, пока мы этим занимаемся:
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
Хорошо, теперь мы хотели бы установить имя wav-файла во всех трех «файлах панк-секвенций» таким же, как имя файла. Сначала ищем Панка и смотрим, что имеем. Вероятно, в этой папке есть и другие файлы seq, поэтому мы специально выбираем наши 3 файла с опцией --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!
Если мы внимательно изучим вывод трех файлов, мы обнаружим эти полезные возможности.
--correct-bpm (-c)
может исправить BPM последовательности в файлах 2 и 3 (копиях)--correct-wav (-w)
может заменить имя wav-файла аудиодорожек, чтобы оно было равно имени последовательного файла. Также в файлах 2 и 3 (копии) Если бы мы теперь использовали опции -w
и -c
, мы получили бы следующий результат:
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 ...
Последняя проверка показывает нам, что имя файла WAV, а также BPM были исправлены:
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... пример использования --correct-wav-bpm