2011-11-09 30 views
15

Estoy intentando construir un piano virtual en C# y quiero crear una escala de notas musicales desde cero.Cómo crear un sonido desde cero C#

Sé que puedo simplemente encontrar o crear un grupo de archivos .wav, 1 para cada nota, pero esto creará demasiado espacio en el disco duro del usuario y no será muy intuitivo para mí en el futuro.

Entonces, hay una manera de crear un sonido adecuado, por ejemplo, B flat, en C# sin usar un archivo .wav, todo en código thorugh C#, y si no, ¿hay alguna manera de hacerlo en otro idioma? C++.

Gracias, he tratado de hacerlo lo más claro posible.

+2

+1 por una buena pregunta - Sé que es posible pero no tengo la menor idea de cómo hacerlo :) ¡Buena suerte! –

+0

+1 aunque los archivos '.wav' no ocupan mucho espacio, debe haber una manera de hacerlo sin ellos – Dani

+1

[Wikipedia] (http://en.wikipedia.org/wiki/Note#Note_frequency_.28hertz.29) entrada sobre cómo convertir notas musicales a una frecuencia que puedes conectar a tus generadores de sonido. – user786653

Respuesta

7

creo que esto parece que debería empezar:

http://blogs.msdn.com/b/dawate/archive/2009/06/24/intro-to-audio-programming-part-3-synthesizing-simple-wave-audio-using-c.aspx

EDIT: debo añadir sonidos que genera electricidad sin .wav muestras y emulando un piano están en conflicto entre sí.

Si desea obtener un sonido de piano "real", es mejor trabajar con muestras (mantenerlas en la memoria si no desea mantenerlas en el sistema de archivos). Si solo quieres una forma simple de emitir notas precisas (que no se parecen en nada a un piano real), ¡hacerlo por programa es el camino a seguir!

+0

Gracias, parece lo que necesito. ¡Tengo un largo camino por delante! –

+0

+1 Sobre todo para que tu nombre sea un homenaje a una de mis piezas de música favoritas ... –

+0

@Dommer Gracias, uno de los míos también. ¡Asumiendo que te estás refiriendo a su más famosa _Toccata_ por supuesto! – Widor

0

Es posible que desee echar un vistazo a MIDI.

Hay un windows API que podría envolver en C++, luego exponer una interfaz administrada que puede consumir en C#.

0

Quizás usar una biblioteca MIDI podría ayudar? No me interesa, pero si no quieres usar archivos de audio, es lo único que se me viene a la mente. Hay una pregunta al respecto here.

0

Here encontrará un artículo que incluye una fuente sobre cómo crear sonido de piano desde cero para al menos un valor de Octava de notas musicales (es extensible).

4

Si desea emular un piano específicamente, solo tiene dos opciones, una de las cuales es usar muestras y la otra es physical modelling. El modelado físico requiere un conocimiento bastante avanzado de DSP (filtrado, convolución, etc.) y un piano sería un instrumento difícil de abordar, pero lo han hecho Pianoteq

En cuanto a las muestras, para crear un Si el piano está cerca de una analogía convincente, lo ideal sería que requiriera más de una muestra por nota para diferentes velocidades con fundidos cruzados entre ellas, pero probablemente pueda usar una muestra en un rango limitado de notas para reducir el número total de muestras.

Cuestiones relacionadas