Pregunta

Busco para dibujar un pentagrama en un .NET (C #) formulario. Estoy utilizando Microsoft Visual C # 2010 Express. Me preguntaba si alguien sabía de código existente o existente libre de .NET bibliotecas que ayuda lata con eso. Estoy buscando en la elaboración tanto de los agudos y el personal clave de fa y la adición de una negra a algún lugar en el personal. Estoy haciendo un probador de aplicación del piano usando C # para mi hijo. Si el código que yo mismo, voy a proably simplemente reemplazar el método OnPaint. Pero pensé que iba a ver si alguien ha visto algo de código libre o biblioteca disponible para ayudarme a empezar.

¿Fue útil?

Solución

No se las primitivas requeridas para generar la salida musical en el conjunto de códigos Unicode (comenzando en U + 1D100). Por ejemplo, U + 1D11A es un personal de 5 líneas, U + 1D158 es una cabeza de nota cerrado.

http://www.unicode.org/charts/PDF/U1D100.pdf

.. entonces el problema se convierte en asegurarse de que tiene un tipo de letra con los glifos apropiados incluidos (y hacer frente a los problemas de la separación de las cosas correctamente, etc.)

Si usted está mirando para generar una salida impresa, usted debe buscar en Lilypond , que es un paquete de música notación que OSS utiliza un formato de archivo de texto para definir el contenido musical y luego genera una salida magnífica.

Otros consejos

Se podría hacer en un programa de edición de música escrita en C # hace unos años. Me parece un poco prometedor: Programa de edición Música

Este será un proyecto difícil. Final utiliza una fuente personalizada para las notas y otros símbolos. Eso podría ser una forma eficiente para que pueda empezar.

También te echa un vistazo a niffty . Es de código abierto y escrito en Java. Probablemente se podría traducir las partes importantes sobre, o conceptos de préstamo.

Editar: Esto puede también ser útil: http://www.c-sharpcorner.com/UploadFile/mgold/musicmaker09242005015433AM/musicmaker.aspx

Si se piensa en ello, el número de primitivas necesarias para la elaboración de notación musical es bastante pequeño, especialmente si usted no recibe demasiado elegante. Todo lo que necesita básicamente es:

  • líneas verticales (nota tallos)
  • Líneas horizontales (líneas del pentagrama)
  • Óvalos completo y se indica (que representan notas)
  • Sharp y Pisos ya están previstas para usted con # y b

Hay algunos símbolos más elegantes que he omitido tales como agudos, marcas clave de Fa, pero los que podían queso con T y B o encontrar una fuente más elegante que el trabajo de fuerza.

Muy simple código, la muestra para empezar:

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

public partial class MusicForm : Form
{
    public MusicForm()
    {
        InitializeComponent();
    }

    private int _staffHght = 15;
    private int _noteHght = 12;
    private int _noteWdth = 20;
    private Pen _notePen = new Pen(Color.Black, 2);
    private Brush _noteBrush = Brushes.Black;

    private void musicPanel_Paint(object sender, PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        g.SmoothingMode = SmoothingMode.HighQuality;

        // draw some staff lines
        for (int i = 1; i < 6; i++)
            g.DrawLine(Pens.Black, 0, i * _staffHght, musicPanel.Width, i * _staffHght);

        // draw four semi-random full and quarter notes
        g.DrawEllipse(_notePen, 10, 2 * _staffHght, _noteWdth, _noteHght);
        g.DrawEllipse(_notePen, 50, 4 * _staffHght, _noteWdth, _noteHght);

        g.FillEllipse(_noteBrush, 100, 2 * _staffHght, _noteWdth, _noteHght);
        g.FillEllipse(_noteBrush, 150, 4 * _staffHght, _noteWdth, _noteHght);
    }
}

Esta función pintura sería, por supuesto, tiene que ser mucho más dinámica: lleno de bucles en sus colecciones de primitivas ...

Si te gusta usar los símbolos musicales Unicode según lo expuesto en el 1D100.pdf en una aplicación personalizada C #. A continuación le ayudará a empezar:

Un comentarista anterior mencionó portar herramienta niffty de Java a C # para este propósito.

resulta que ya se ha hecho , funciona muy bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top