Theremin DS

Buenas.

Pues os quería presentar este proyecto, que realmente no estoy realizando yo, sino un amigo, pero que me he dicho ¡Que carajo! ésto hay que compartirlo.

Se trata, en base, de un soft muy sencillo para intentar usar la pantalla tactil como controlador de un instrumento, en este caso una especie de Theremin, que a efectos practicos no deja de ser un sintetizador, para entendernos. Actualmente el proyecto se podría decir que está en fase alpha. Sólo reproduce un tono puro ajustando la frecuencia a donde pulsemos, aun asi creo que en prevision de futuro (si tira para alante) a mas de un musico del foro le puede terminar interesando.

¿Los problemas? muchos. Realmente la información al respecto del sonido para DS se le antoja escasa al programador. El último avance realizado ha sido gracias a la libreria de Hermes (gracias!). Se aceptan sugerencias, evidentemente, dado que sus habilidades como programador tampoco es que sean para tirar cobetes (aunque yo le quiero y le respeto igual).

Bueno, dejo el ficherín por si a alguien le interesa y le apetece trastear un poco. El código, por si es de interes, ya se lo pediré.


[EDIT]


Versión 1.2
Me parece una idea cojonuda

No tengo ni idea de programacion pero lo unico que hay que controlar es el volumen y el tono de la nota

A ver si la cosa acaba bien, esta tarde intentare trastear con el a ver que saco ;-)

Gracias
como músico y despues de haber visto varios proyectos de este tipo creo q no va a servir de mucho.
no dudo d la capacidad de programación de nadie ni nada x el estilo, lo q pasa es q xa esto la táctil tiene una limitación muy grande y es q solo se puede pulsar en un sitio a la vez.

he pensado q se le podría añadir la armonía a través de los botones y serviría en plan acompañamiento. un ejemplo:

tocando en este punto se obtiene la nota do. pues pulsando do+boton a suena do mayor, tocando do+botón b suena do menor, con do+y do séptima etc. añadir la armonía es fácil, xa un acorde mayor tiene q sonar la frecuencia base, el doble de ésta y el doble de la anterior y todos los acordes llevan relaciones de ese tipo.
en el fondo acabo de proponer algo q sí q tiene posibilidades ^^

si no, sólo se me ocurren movidas experimentales tipo electroplankton,
Hola, gentes de la scene.

Antes de nada, gracias a los que hacen posible esto de la scene. Los catetos como yo que tenemos cuatro nociones de programación nos aprovechamos cual sanguijuelas de vuestros conocimientos (léase, de vuestras librerías), que lo sepáis.

Pues si, el "amigo que lo está haciendo" soy yo. ¡En buena hora me dejé convencer! Nomentero tiene una gran capacidad de persuasión. En fin, como siempre, lo que empieza pareciendo algo sencillo termina por desbordarte. Más o menos así me encuentro.

Weno, menos rollo y al grano.

El proyecto en cuestión es un theremin. Ya sabéis, ese cacharro electrónico con dos antenas que la gente toca moviendo las manos alrededor, y que suena como por arte de magia a película de ciencia ficción de los 50. Bueno, pues esto pretende ser algo parecido, pero para la DS.

La idea básica ya la comentaba nomentero: es un oscilador (en principio, senoidal) al que cambiamos la frecuencia al tocar la pantalla táctil en sentido horizontal.

Como soy nuevo en eso de la scene y mis dotes programantes están un poco olvidadas, he empezado a hacerlo con las PALibs.

El tema de capturar la posición del Stylus en la pantalla táctil es facil, ya hay una función que lo hace. Otra historia ha sido convertir esto a frecuencia, pero vamos, esto está controlado.

La idea inicial era sintetizar el sonido desde su origen. Esto implica tener los datos de la señal del oscilador en una variable y pasársela al sistema de sonido de la DS. Por desgracia, no hay ninguna función que haga eso (o por lo menos yo no la he encontrado) ni con las PALib, ni con las eSound, ni con las libnds. Todo lo que hay son funciones para reproducir ficheros (raw o mod), y en principio esto es algo que quería evitar (ahora veréis por qué).

De todas formas, de momento no me ha quedado más remedio, así que me he creado una señal senoidal con un editor de audio y la he pasado a raw. Lo he incorporado al programa con la función PA_PlaySound de las PAlibs, y he loopeado el fichero. Realmente no cambio la frecuencia fundamental del sonido contenido en el fichero, sino la frecuencia de reproducción del mismo, que es la calculada antes a partir de la posición del Stylus. Es una triquiñuela un poco cutre, vale, pero de momento funciona.

Problema: al llamar a un fichero, abrirlo, leerlo y cerrarlo, se tarda un tiempo. Esto se traduce en que el sonido se entrecorte cuando el loop vuelve a iniciarse, dejando un corte de unos 80 ms.

Ver Dibujo1
http://img110.imageshack.us/img110/9870/dibujo1pv4.jpg

Dibujo2
http://img81.imageshack.us/img81/1791/dibujo2pa1.jpg

(Como podéis ver, la señal senoidal sale deformada. Supongo que se debe a que la frecuencia de muestreo de la DS tampoco es que sea la caña. Tengo alguna idea para solucionarlo, aunque por otro lado así la señal es más rica en armónicos, y si se filtra, el efecto puede molar... ya se verá). Ver Dibujo3.

http://img59.imageshack.us/img59/15/dibujo3lk9.jpg

Una posible solución para esto sería modificar la propia función PA_PlaySound: al fin y al cabo, la función abre un fichero, pasa el contenido a una variable, pasa estos datos al sistema de sonido, y luego cierra el fichero. La idea sería acceder directamente a esa variable, saltándonos el resto de los pasos. Para eso, necesito el código fuente de esa función, y sorpresa, no lo encuentro.

Otro problema: el valor de la frecuencia del sonido que se reproduce no es la que debería ser. Es inferior. El porqué no lo tengo muy claro. Tiene que ver con la frecuencia de reproducción, la frecuencia del sample y la longitud del sample que hay que pasarle a la función PA_PlaySound. Cuando sepa cómo se relacionan estas tres variables me sentiré más realizado y feliz. Hasta entonces, la frustración me corroe. Intentaré corregirlo ajustando la frecuencia de reproducción (aunque el hecho de que el ajuste sea lineal, es algo que está por ver)

Weno, hasta aquí la sección de problemas. Ahora viene la sección de futuras ideas si estos problemas se solucionan (jojo):

- Menú para elegir la forma de onda del oscilador.
- Indicador de la nota que estás tocando.
- Efectos: filtro (necesito un algoritmo de FFT??), reverb, delay.
- Interfaz gráfica decente, por diox.

En fin, de momento así están las cosas. Si os cuento todo este rollo es porque, además de compartir la idea, ni que decir tiene que cualquier sugerencia para ir solucionando los problemas que os he comentado será más que bienvenida ;) Por si acaso, aquí os dejo dos preguntas que me vendría muy bien saber:

- Dónde encuentro el código fuente de PA_PalySound?
- Cuál es la frecuencia de muestreo de los DAC de la NDS?

Chaoooo

^_^V
Eraser_Head escribió:como músico y despues de haber visto varios proyectos de este tipo creo q no va a servir de mucho.
no dudo d la capacidad de programación de nadie ni nada x el estilo, lo q pasa es q xa esto la táctil tiene una limitación muy grande y es q solo se puede pulsar en un sitio a la vez.

he pensado q se le podría añadir la armonía a través de los botones y serviría en plan acompañamiento. un ejemplo:

tocando en este punto se obtiene la nota do. pues pulsando do+boton a suena do mayor, tocando do+botón b suena do menor, con do+y do séptima etc. añadir la armonía es fácil, xa un acorde mayor tiene q sonar la frecuencia base, el doble de ésta y el doble de la anterior y todos los acordes llevan relaciones de ese tipo.
en el fondo acabo de proponer algo q sí q tiene posibilidades ^^

si no, sólo se me ocurren movidas experimentales tipo electroplankton,


Hombre, es que la idea en principio es precisamente una especie de Theremin DS y un theremin es... pues eso, monofónico. Respecto a la utilidad que pueda tener, evidentemente no vas a hacer unos colchones de la hostia (para eso ya existen otros medios mucho mas sencillos y economicos que la propia DS). Pero los sintetizadores monofónicos no son carentes de utilidad, ni mucho menos. No porque se pueda tocar una sola tecla, deja de ser musical o util (ya me diras si no una flauta, yo diria que tienen su utilidad y solo dan una nota al mismo tiempo).

Aún asi esta muy verde aun, y habrá que ver lo que da de si (mas que el soft, mi colegui, aqui arriba, y sus dotes programativas ^_^)


Un saludo, gentes!
Hola.

Pues como dos semanas después, aqui tenemos otra (aunque imperfecta y muy verde todavía) versión del engendro este, que con un poco de suerte se convertirá en un pequeño sinte.

http://www.box.net/public/3li9pnv0pa

En esta versión he incluido:

- Menú para elegir la forma de onda: senoidal, tiangular, cuadrada, diente de sierra, ruido blanco y ruido rosa.

- Ataque y release. De momento están fijos. Vale, esto es muy cutre, pero la idea es poner una ruedecita para poder cambiarlo.

- Mejor calidad del sonido en general, ya que he conseguido usar una frecuencia de muestreo mayor. Eso si, sique estando a 8 bits, lo cual es un coñazo, porque se oye el ruido de cuantificación.

Ahora mismo estoy trabajando en la interfaz gráfica. De momento todo es un desastre y se me cuelga al cargar los gráficos, pero lo coseguiré! Confío en que mi amigo diseñador y mamporrero en sus ratos libres, el Capitan Tostadilla, me eche una mano y se curre unos buenos gráficos.

Por lo demás, cuando esto funcione, tengo planeadas varias ampliaciones, como por elemplo poner varios osciladoes a la vez y meter efectos.

Weno, ni que decir tiene que cualquier ayuda (sobre todo si me aclara por que se cuelga al cargar los puñeteros sprites) será más que bienvenida.

Espero vuestros comentarios.

Saludos majetes.

^_^V
no deja descargar el archivo sin registrarte??

ein?
Prueba el enlace que he puesto en el post principal, a ver si ese tira.


Saaaludossss..


El Nomen
Tio.... muy buena idea!!!!

Y dos cojones, por estar ahi peleando con la DS!! Desde aqui os mando todo el apoyo del globo!!

Aun no he probado el programita y no tengo claras alguans cosas..... por preguntar que no quede.. jejeje

Sigues usando ondas pregrabadas?

Seria una diferencia abismal el poder trabajar con funciones matematicas, asi segun posicion o movimiento del stylus poder deformar la segnal!! [babas]

Que output usa el programa? Solo los altavoces de la DS? Los cascos?
Seria otro puntazo generar segnales midi con el programita y controlar otros dispositivos con el thereminDS!!![babas]

Bueno... y uniendo ambos conceptos.....Porque no ponerle un modo MIDIcontroller? Hay por ahi un proyecto que, modificando un passkey, hacen de la DS un interface Midi!


http://collinmeyermusic.com/dev/index.html


Bueno, no se si puedo hexar una mano en algo... sea como sea aqui me tienes dispuesto a ayudar!!! (aunque sea con ideas absurdas :) )

Salud compadre!!!!!!!
Elija el que elija no se oye nada... ¿?


Editado:

Lo he vuelto a copiar y por alguna extraña razón, ahora sí que se escucha.

Está bastante bién, me gustan estas cositas musicales :-)

Soy totalmente profano en el tema de este del There, pero parece que se echa en falta una especie de teclado ó algo para utilizarlo como referencia para las notas... creo que no vendría mal... y sí, si se implementa sonido a 16 bits ya será una delicia...

Por curiosidad, ¿lo estás haciendo con libnds o te estás apañando con la PAlib?

¡Buén trabajo y ánimo con el proyecto que se ve que promete!
Hola

Gracias por los ánimos.

Wonder_boy, de momento estoy tirando con las PA_lLib. Se que las libnds son más potentes, así que en cuanto consiga más menos la interfaz gráfica me meteré con ellas, para solucionar lo de la síntesis de la onda a tiempo real. Por ahora, todo va por samples loopeados.

En cuanto a lo del sonido a16 bits... se puede? Por lo que se, lo máximo que pilla son 8 bits...

Weno, pues eso, que gracias. Seguid aportando ideas,es una buena forma de que esto tire palante.

Por si alguien le da el tabardillo y me quiere echar una mano, aquí va el código fuente:

Adioses.

^_^V

PD: El link aa la rom ya está corregido. Es un ZIP y no hace falta registrarse ni nada.

Adjuntos

yujuuu :) me mola mogollon el programa este XD
Kaitain escribió:En cuanto a lo del sonido a16 bits... se puede? Por lo que se, lo máximo que pilla son 8 bits...
Pues suponía que sí (por el mero hecho de que soporta tal calidad la DS), pero vamos que si tu ya has investigao el tema y has visto que no... :-(
12 respuestas