2008-08-31 11 views
5

私はJavaでオーディオシンセサイザーを書きたいと思っています。誰かがこのようなプログラムを書くためのアドバイスや優れたリソースを持っているのだろうかと思っていました。私は生の音波を生成する方法、それらを使用可能な形式(スピーカーで再生する)に出力する方法、トピックに関する一般的な理論を探しています。みんなありがとう。初心者向けデジタルシンセ

答えて

6
  1. この問題は、数字の配列へのマッピング関数についての基本的です。ファーストクラスの関数をサポートする言語は、ここで本当に便利です。

  2. は、いくつかのJava関連の情報のため http://www.harmony-central.com/Computer/Programminghttp://www.developer.com/java/other/article.php/3071021をチェックしてください。その後、

  3. サウンドデータを符号化の基本的な概念がわからない場合は、正規のWAVE形式は非常に単純であるhttp://en.wikipedia.org/wiki/Sampling_rate

  4. を読んで、http://www.lightlink.com/tjweber/StripWav/Canon.htmlを参照してください。ヘッダー(最初の44バイト)+ウェーブ・データ。それを実装するライブラリは必要ありません。 C/C++、対応するデータ構造で

次のようなものになります。私は、Javaについてはよく分からない

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; 

を。私は、 "構造体"を "クラス"と "void *データ"を "char [] data"または "short [] data"または "int [] data"に置き換えなければならないと思います。サンプル、フィールドbipsaで定義されています。データとそれを埋めるために

、あなたが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 
} 

繰り返しますが、私は、Javaについてはよく分からないが、あなたがvoidポインタを変換する場合、変換は簡単でなければなりませんビットレートに対応する配列に変換する。

次に、構造全体をファイルに書き込んで、再生可能なwaveファイルを取得します。

2

チェックアウトFrinika。これは、Java(オープンソース)で実装されたフル機能の音楽ワークステーションです。 APIを使用すると、シンセサイザーでMIDIイベントを実行し、生のサウンド出力を読み込み、WAVファイルに書き込むことができます(下記のソースコードのリンクを参照)。

追加情報:

2

私の学位のために勉強している間、私の論文プロジェクトは、Javaベースのモジュラー・シ​​ンセサイザーの作成だった、と私は勉強している時に大学が私のレポートは公に利用可能にするために適合見た:私はいけない

A Software Based Modular Synthesiser in Java

+0

非常に有用な紙、特に基本用。 – leolobato

1

それが役に立つかどうかは分かりますが、何かのためにMIDIを使用できる場合は、JFugeをチェックしてください。

+1

http://www.jfugueのJFugueです。組織 –

+0

MIDIは、フリント・ニッピングのようなものです。遠い過去に人類へのサービスのために敬意を表しますが、今日誰かが真剣に使用するべきものではありません。 – MusiGenesis

+2

@MusiGenesis - あなたは本当ですか?笑 – Krakkos