Графика для кроссплатформенного программного обеспечения для создания музыки на C++

Отредактировано, см. Ниже

Мне нужна библиотека для отображения графики нотной записи в программном обеспечении для создания музыки. Это будет Sibelius-подобный: в основном пользователь создает ноты, а приложение отправляет миди-вывод.

Я не ищу библиотеку для отображения нотной записи, так как по разным причинам я должен реализовать ее сам. Кроме того, библиотека, которую я ищу, должна быть кроссплатформенной (должна работать как минимум в Windows и Linux).

Графика будет векторной или отрисована с помощью таких функций, как "линия (точка1, точка2);"

(Прежде чем продолжить, позвольте мне сказать, что я новичок в C++, и большая часть моего опыта связана с интерпретируемыми языками - в основном PureData и Processing)

Теперь к вопросу:

  1. Я нашел Синдер. Вы думаете, Cinder подходит для этой задачи? Если нет, вы можете пропустить 2 и 3.
  2. У меня нет опыта работы с OpenGL. Я не мог понять, использует ли Cinder исключительно OpenGL или использует его только по требованию. Я сомневаюсь, что при использовании библиотек OpenGL мое приложение сможет работать только на компьютерах с выделенными видеокартами?
  3. У Cinder нет возможности создавать GUI, такие как Qt или GTK+. Можно ли интегрировать Cinder в другое окно, созданное Qt/GTK+/SDL/etc? Я хочу что-то вроде Sibelius, где у вас есть обычный графический интерфейс (кнопки, меню и т. Д.), Встроенный в графическое окно нотации.
  4. Если Cinder не является хорошим вариантом, что вы могли бы порекомендовать для этого конкретного приложения? OpenCV? SDL? SFML?

РЕДАКТИРОВАТЬ:

Я вижу, это было помечено как не по теме. Извините, я новичок здесь. Я видел несколько постов с просьбой дать такую ​​рекомендацию, поэтому я подумал, что все в порядке. Ну, я постараюсь быть объективным и прямым

Вопрос:

Мне нужно рисовать графику музыкальной нотации, но я не хочу иметь дело с вещами низкого уровня (такими как Cinder, SDL, SFML, Ati-Grain). Итак, какие другие технологии доступны? То есть какие есть другие варианты?

1 ответ

Решение

То, что вы описываете, - это МНОГО работы и что-то невозможное для человека с ограниченным опытом программирования, такого как вы. C++ не является ни простым языком, ни языком, который прощает... речь идет не только о изучении синтаксиса (как в случае обработки или аналогичных языков с автоматической сборкой мусора) - это также об управлении памятью и другими ресурсами, инвариантами и т. Д. - оставляя Помимо сложностей компоновки, компиляции и т. д., в свою очередь, это предварительные условия, чтобы вы имели полное представление о том, как компьютеры работают на более низком уровне.

В любом случае, я постараюсь ответить на ваши вопросы:

  1. Вы можете сделать это с помощью Cinder - это, вероятно, будет означать необходимость заново изобретать колесо - но вы можете сделать это. Я бы не сказал, однако, что шлак действительно подходит для такой задачи. Это предназначено для ускоренной 2D/3D компьютерной графики. То, что вы хотите, это какая-то более общая библиотека GUI (может быть, QT?). Что касается поддержки midi, вам, вероятно, придется все равно полагаться на какую-то другую библиотеку.

  2. Большинство компьютеров в наши дни поддерживают OpenGL. Опять же, вам не нужен openGL для того, что вы хотите сделать.

  3. Да, вы можете сделать это в теории - но это будет нелегко, и в этом нет необходимости для того, что вы хотите сделать.

  4. OpenCV определенно НЕТ. Это для обработки изображений - т.е. растровой графики - вам нужна векторная графика. Не говоря уже о том, что Highgui в OpenCV очень медленно работает с некоторыми вещами, так что вам все равно придется использовать какую-то другую библиотеку для рендеринга. У меня нет опыта работы с другими библиотеками. Мое предложение будет заключаться в том, чтобы либо использовать какой-то интерпретируемый язык, такой как python, luaAV или, может быть, SuperCollider (который, кстати, имеет встроенную поддержку midi), который гораздо проще, чем C++, либо искать какую-нибудь альтернативную нотацию музыки с открытым исходным кодом. (если есть) -> вы всегда можете создать что-то свое на основе существующей кодовой базы - изобретать колесо не нужно...

Другие вопросы по тегам