Ищу язык музыкального программирования высокого уровня

Я ищу язык программирования высокого уровня. Я немного погуглил и нашел несколько примеров (некоторые приведены здесь http://users.soe.ucsc.edu/~sasha/proj/musicpaper.pdf ), но не нашел того, что мне нужно.

Ключевая особенность, которую я ищу, заключается в том, что язык позволит мне создавать музыку на основе некоторого входного материала (мелодии), а затем позволяет мне указать остальную часть произведения как серию преобразований исходного входного материала. Типы преобразований, которые я ищу, - это фрагментация (укажите подмножество оригинала), транспозиция (изменение высоты тона), увеличение и уменьшение (изменение продолжительности), инверсия (изменение направления интервалов), ретроградность (изменение порядка).

Что-то подобное существует?

ОБНОВЛЕНИЕ: сейчас я пытаюсь использовать music21 ( http://web.mit.edu/music21/ ). Это, вероятно, позволит мне сделать это, но, вероятно, не таким образом, чтобы его было просто редактировать или читать.

Я использую С++ на Win32. Это не инструмент, это проект, который вы делаете с его помощью. Это довольно слабо определенный проект, который вы получили до сих пор... И давайте посмотрим правде в глаза. Люди делают музыку намного лучше, чем компьютеры. И когда-нибудь будет.
@StephenHazel Я не прошу компьютерную программу, которая генерирует для меня музыку. Я прошу компьютерную программу, которая позволит мне выразить композицию как серию преобразований на основе моего ввода. Ваш пример С++ не имеет смысла. Предположим, я попросил бы программу, которая позволяет мне извлекать подстроки на основе текстового шаблона, тогда вы, конечно же, порекомендуете мне какую-нибудь библиотеку регулярных выражений? Что ж, тогда я прошу язык, который позволит мне создавать музыку на основе ряда четко определенных манипуляций с входной музыкой.

Ответы (12)

Помимо Haskore, который уже упоминается в статье, на которую вы ссылаетесь, и упомянутых другими, есть SuperCollider и Pure Data .

Я абсолютно понимаю ваш вопрос. Я сам искал такую ​​высокоуровневую вещь. Вот мои личные мысли по этому поводу:

Ничего хорошего я не нашел и пришел к выводу, что готовых общепринятых абстракций там нет. Вероятно, это потому, что все согласны с тем, что такое задержка, пилообразный фильтр или фильтр Баттерворта, но не существует общепринятого метода написания музыки.

Так что лучше всего найти язык с достаточными «абстрактными способностями», чтобы вы могли писать свои собственные абстракции. Нет никаких сомнений в том, что Haskell такой зверь, но его трудно (хотя и полезно) изучать.

В настоящее время я играю с Суперколлайдером, чтобы добраться туда. Я только начал несколько дней назад, так что я не знаю, как далеко это заведет меня. Меньшее, что он мне даст, это освобождение от MIDI. Я могу управлять звуком так, как хочу. Даже если вы (как вы говорите) заинтересованы только в написании преобразований нотной последовательности, вы можете быстро перерасти этот подход, потому что все это будет звучать одинаково. Тогда вы можете захотеть иметь больше контроля над инструментами, чем позволяет вам Midi. По крайней мере, это то, где я сейчас.

Но есть также OSC-Bindings для Haskell, так что я могу использовать Supercollider для синтеза звука и Haskell для синтеза композиции. Я также размышляю над синтезом игроков, который будет между ними двумя.

Мартин, спасибо! Я проверю продукты, которые вы упомянули. Как вы сказали, я начинаю верить, что в настоящее время нет ничего, что соответствовало бы моему требованию. В настоящее время я пытаюсь создать его с помощью JMusic или JFugue (так как мне удобно с java). Тем не менее, я обязательно рассмотрю ваше предложение для Haskell.

См. этот вопрос SO . Я не уверен, что это именно то, что вам нужно, но это может помочь.

Поскольку я просто связываю другой вопрос, я обычно помещаю это как комментарий. Однако у меня нет прав комментирования на этом сайте (пока).

Спасибо! Что ж, на этот вопрос наверняка есть много ответов, гораздо больше примеров, чем в статье, на которую я ссылаюсь. Пока не уверен, есть ли там то, что я ищу, но выглядит многообещающе. Спасибо еще раз!

Вас может заинтересовать язык программирования CHucK.

https://www.coursera.org/course/chuck101

Можете ли вы добавить немного больше информации об этом языке?
Спасибо. Когда я впервые составил этот вопрос, я наткнулся на CHucK, прежде чем опубликовать его. Я немного поиграл с этим, я думаю, что это круто, но это слишком низкий уровень для того, что я имею в виду. Например, в CHUCK у меня нет ни метра, ни гаммы, ни даже нот. Только синтезаторы и время. Так что Чак на один или два уровня ниже того, что мне действительно нужно.

Доступ к программному обеспечению для отслеживания может быть другим подходом. Вы можете рассматривать нотацию трекера как язык программирования, а трекер-плейер — как компилятор/интерпретатор.

Существует множество музыкальных модулей (песен), которые вы можете загружать и воспроизводить. Они делятся все время.

Вы можете использовать готовое программное обеспечение трекера для редактирования «входной музыки» (например, OpenMPT ).

Существует множество библиотек с открытым исходным кодом, позволяющих воспроизводить музыку в этом формате, например: http://xmp.sourceforge.net . Таким образом, передача исходного кода проигрывателю может помочь вам манипулировать аспектами песни с помощью ваших программ.

Именно так многие компьютерные игры воспроизводили музыку (особенно старые, аркадные игры, в которых память была ограничена и не могла позволить существовать полным образцам данных финальных песен).

Многие проигрыватели модулей трекера уже позволяют грубо управлять песней; отключить звук инструмента, поменять местами инструменты, отключить звук трека, изменить темп, перейти к позиции песни. Игры уже могут выполнять грубое управление песней в реальном времени синхронно с внутриигровыми событиями (переход к той же позиции паттерна в другом наборе паттернов или включение каналов, когда игровой персонаж использует усиление непобедимости, или в конце игры). -уровень бой против большого босса).

Многие редакторы трекеров также имеют открытый исходный код ( MilkyTracker , OpenMPT) и будут иметь функции для транспонирования частей песни (поскольку они являются сочетаниями клавиш в приложении), а также для воспроизведения песен (поскольку редакторы песен также воспроизводят песни).

Надеюсь, это может дать вам некоторые идеи. Несмотря на то, что это не традиционный язык программирования.

Можно считать , что Lilypond подходит под эту форму: хотя он больше ориентирован на набор музыки, он может выводить MIDI-представление партитуры. Тем не менее, я обнаружил, что с точки зрения базового использования нелегко добиться выразительных эффектов в миди-выходе. Кроме того, он не имеет возможности реального времени. Я упоминаю его в первую очередь потому, что он может дать идеи (или код) для реализации высокоуровневого интерфейса, если вы в конечном итоге развернете свою собственную систему.

Попробуйте OpenMusic , визуальный язык программирования для символической музыки. Поначалу это немного пугает, но учебник должен помочь вам довольно быстро.

Я не уверен, что они включают в себя все функции, которые вам нужны. Но библиотека java jmusic довольно обширна, я думаю, это будет ваш лучший шанс.

В противном случае другими вариантами были бы JFugue, music21 (python) или визуальный язык программирования CSound от ircam, также очень обширный.

Эдуард упоминает OpenMusic, чем-то похожий, и потомком PatchWork является PWGL ( http://www2.siba.fi/PWGL/ ). Глядя на то, что вам нужно от языка, это может быть полезно, особенно «ограничивает» часть PWGL. Кривая обучения крутая (LISP), но стоит вашего времени. Несколько отличных внешних библиотек для управления ритмом. удачи

Я думаю , что в Overtone есть то, что вы ищете, и даже больше. Это библиотека Clojure, которая действует как мощный интерфейс для SuperCollider. Может потребоваться некоторое время, чтобы научиться его использовать (особенно если вы новичок в Clojure), но как только вы это сделаете, он станет достаточно мощным и гибким. Вы можете делать такие вещи, как определить мелодию как последовательность интервалов шкалы, а затем комбинировать ее с любой конкретной шкалой и последовательностью значений длительности нот, что дает вам большую свободу для экспериментов с вариациями на тему. Это стоит проверить, даже если вы не знакомы с Clojure!

FWIW, я работаю над разработкой своего собственного интерфейса для Overtone (я знаю, это будет интерфейс для интерфейса), который позволит вам использовать многое из того, на что он способен, но с использованием гораздо более простого синтаксиса, нацеленного больше к музыкантам/композиторам, чем к программистам. На данный момент это нигде не используется, но, надеюсь, когда-нибудь в ближайшем будущем. А пока я от всей души рекомендую Overtone :)

Похоже, вы хотите сделать что-то похожее на Эндрю Соренсена, и это потрясающе. Он использует язык под названием Extempore , похожий на Lisp с небольшим количеством C, который позволяет вам определять и воспроизводить вещи в реальном времени. Вы можете увидеть это в действии в этом видео , где он исполняет часть живого кодирования.

Я полагаю, вы можете построить что-то поверх этого, просто еще несколько структур, таких как гаммы, чтобы вы могли манипулировать гаммами вместо того, чтобы постоянно работать непосредственно с полутонами.
наверное можно. Но я ищу то, что уже имеет это. Из того, что я видел до сих пор, music21 ближе всего к тому, что я ищу.

Несколько лет назад я играл с языком под названием KeyKit. Он представляет музыку как фразовые объекты и имеет концепции нот, аккордов, а также множество функций для управления и создания музыки как с помощью кодирования, так и с помощью встроенных упрощенных графических контроллеров. Я думаю, что язык достаточно прост для изучения. Я думаю, что парень, который создал его, до сих пор использует его, и вы даже можете получить от него ответы на вопросы:

http://nosuch.com/keykit/

Кстати, мне интересно, нашли ли вы то, что искали. Мне также интересно узнать, что еще есть, что хорошо работает для символической/алгоритмической композиции музыки.

Возможно, вы ищете Opusmodus . Язык программирования Common Lisp. Он поставляется с огромной библиотекой функций, специфичных для сочинения, а также OMN (обозначение Opusmodus), который позволяет преобразовывать выходные данные ваших функций как в партитуру, так и во внутренний или внешний MIDI-плеер. И последнее, но не менее важное: он имеет средства Live Coding и может экспортировать в форматы MIDI и MusicXML.