2008-08-31 13 views
5

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.Beginner Digital Synth

Respuesta

6
  1. Este problema es básicamente acerca de funciones de mapeo a arrays de números. Un lenguaje que admita funciones de primera clase sería muy útil aquí.

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

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

  4. El formato WAVE canónico es muy simple, ver 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 sería algo como esto:

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.

a llenarlo con los datos, se 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 
} 

Una vez más, no estoy seguro acerca de Java, pero la conversión debería ser sencillo si convierte el vacío triple a una matriz correspondiente a la tasa de bits.

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

2

Echa un vistazo Frinika. Es una estación de trabajo musical con todas las funciones implementada en Java (código abierto). Usando la API, puede ejecutar eventos midi a través del sintetizador, leer la salida de sonido sin formato y escribirla en un archivo WAV (consulte el enlace del código fuente a continuación).

Información adicional:

2

Mientras estudiaba para mi grado, mi proyecto de tesis fue la creación de un sintetizador modular basado en Java, y la Universidad a la que he estudiado tuvo a bien hacer mi informe a disposición del público:

A Software Based Modular Synthesiser in Java

+0

papel muy útil, especialmente para los conceptos básicos. – leolobato

1

yo no No sé si eso ayuda, pero si puede usar MIDI para cualquier cosa, debe consultar JFuge.

+1

Eso es JFugue en http: //www.jfugue.org –

+0

MIDI es como pedernal: merece respeto por su servicio a la humanidad en el pasado distante, pero hoy en día no es algo que nadie debería estar usando en serio. – MusiGenesis

+2

@MusiGenesis - ¿Hablas en serio? LOL – Krakkos

Cuestiones relacionadas