online synthesizer

synthesizer - online - Principiante Digital Synth



synth music (4)

Estoy buscando escribir un sintetizador de audio en Java, y me preguntaba si alguien tiene algún consejo o buenos recursos para escribir dicho programa. Estoy buscando información sobre la generación de ondas de sonido en bruto, cómo darles salida en una forma utilizable (reproducción a través de altavoces), así como la teoría general sobre el tema. Gracias chicos.



Mientras estudiaba para obtener mi título, mi proyecto de disertación fue la creación de un sintetizador modular basado en Java, y la Universidad en la que estudié vio la posibilidad de poner mi informe a disposición del público:

Un sintetizador modular basado en software en Java


No sé si eso ayuda, pero si puedes usar MIDI para cualquier cosa, deberías consultar JFuge .


  1. Este problema básicamente se trata de asignar funciones a matrices de números. Un lenguaje que admita funciones de primera clase sería muy útil aquí.

  2. Consulte http://www.harmony-central.com/Computer/Programming y http://www.developer.com/java/other/article.php/3071021 para obtener información relacionada con Java.

  3. Si no conoce los conceptos básicos de la codificación de datos de sonido, lea http://en.wikipedia.org/wiki/Sampling_rate

  4. El formato canónico de WAVE es muy simple, consulte http://www.lightlink.com/tjweber/StripWav/Canon.html . Un encabezado (primeros 44 bytes) + datos de onda. No necesita ninguna biblioteca para implementar eso.

En C / C ++, la estructura de datos correspondiente se vería así:

typedef struct _WAVstruct { char headertag[4]; unsigned int remnantlength; char fileid[4]; char fmtchunktag[4]; unsigned int fmtlength; unsigned short fmttag; unsigned short channels; unsigned int samplerate; unsigned int bypse; unsigned short ba; unsigned short bipsa; char datatag[4]; unsigned int datalength; void* data; //<--- that''s where the raw sound-data goes }* WAVstruct;

No estoy seguro acerca de Java. Supongo que tendrás que sustituir "struct" por "class" y "void * data" con "char [] data" o "short [] data" o "int [] data", correspondiente al número de bits por muestra, como se define en el campo bipsa.

Para completarlo con datos, usaría algo así en C / C ++:

int data2WAVstruct(unsigned short channels, unsigned short bipsa, unsigned int samplerate, unsigned int datalength, void* data, WAVstruct result) { result->headertag[0] = ''R''; result->headertag[1] = ''I''; result->headertag[2] = ''F''; result->headertag[3] = ''F''; result->remnantlength = 44 + datalength - 8; result->fileid[0] = ''W''; result->fileid[1] = ''A''; result->fileid[2] = ''V''; result->fileid[3] = ''E''; result->fmtchunktag[0] = ''f''; result->fmtchunktag[1] = ''m''; result->fmtchunktag[2] = ''t''; result->fmtchunktag[3] = '' ''; result->fmtlength = 0x00000010; result->fmttag = 1; result->channels = channels; result->samplerate = samplerate; result->bipsa = bipsa; result->ba = channels*bipsa / 8; result->bypse = samplerate*result->ba; result->datatag[0] = ''d''; result->datatag[1] = ''a''; result->datatag[2] = ''t''; result->datatag[3] = ''a''; result->datalength = datalength; result->data = data; // <--- that''s were the data comes in return 0; // an error code, not implemented, yet ...; in Java: return result }

De nuevo, no estoy seguro acerca de Java pero la conversión debería ser simple si convierte el puntero void a una matriz correspondiente a la tasa de bits.

Luego, simplemente escriba la estructura completa en un archivo para obtener un archivo de onda reproducible.