2008-08-31 14 views
5

Je suis à la recherche d'un synthétiseur audio en Java, et je me demandais si quelqu'un avait des conseils ou de bonnes ressources pour écrire un tel programme. Je suis à la recherche d'informations sur la génération d'ondes sonores brutes, comment les produire sous une forme utilisable (en jouant sur des enceintes), ainsi que la théorie générale sur le sujet. Merci les gars.Débutant Synthé numérique

Répondre

6
  1. Ce problème est essentiellement sur les fonctions de cartographie à des tableaux de nombres. Un langage qui prend en charge les fonctions de première classe serait très utile ici.

  2. Découvrez http://www.harmony-central.com/Computer/Programming et http://www.developer.com/java/other/article.php/3071021 pour quelques informations liées à Java.

  3. Si vous ne connaissez pas les concepts de base de codage de données sonores, alors lisez http://en.wikipedia.org/wiki/Sampling_rate

  4. Le format WAVE canonique est très simple, voir http://www.lightlink.com/tjweber/StripWav/Canon.html. Un en-tête (premiers 44 octets) + les données d'onde. Vous n'avez besoin d'aucune bibliothèque pour l'implémenter.

en C/C++, la structure de données correspondant ressemblerait à quelque chose comme ceci:

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; 

Je ne suis pas sûr de Java. Je suppose que vous devrez remplacer "struct" par "class" et "void * data" par "char [] data" ou "short [] data" ou "int [] data", correspondant au nombre de bits par échantillon, tel que défini dans le champ bipsa.

Pour le remplir avec des données, vous pouvez utiliser quelque chose comme ça 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 
} 

Encore une fois, je ne suis pas sûr de Java, mais la conversion devrait être simple si vous convertissez le pointeur vide à un tableau correspondant au débit.

Ensuite, il suffit d'écrire la structure entière dans un fichier pour obtenir un fichier wave jouable.

2

Découvrez Frinika. C'est une station de travail musicale complète implémentée en Java (open source). À l'aide de l'API, vous pouvez exécuter des événements MIDI via le synthétiseur, lire la sortie audio brute et l'écrire dans un fichier WAV (voir le lien du code source ci-dessous).

Informations complémentaires:

2

Tout en étudiant pour mon diplôme, mon projet de thèse a été la création d'un synthétiseur modulaire basé sur Java, et l'Université à laquelle j'ai étudié a jugé bon de rendre mon rapport public:

A Software Based Modular Synthesiser in Java

+0

papier très utile, spécialement pour les bases. – leolobato

1

Je ne ne sais pas si cela aide, mais si vous pouvez utiliser le MIDI pour quoi que ce soit, vous devriez vérifier JFuge.

+1

C'est JFugue à http: //www.jfugue. –

+0

MIDI est comme le silex: il mérite le respect en raison de son service à l'humanité dans le passé lointain, mais ce n'est pas quelque chose que tout le monde devrait utiliser sérieusement aujourd'hui. – MusiGenesis

+2

@MusiGenesis - Êtes-vous sérieux? LOL – Krakkos