私はJavaでオーディオシンセサイザーを書きたいと思っています。誰かがこのようなプログラムを書くためのアドバイスや優れたリソースを持っているのだろうかと思っていました。私は生の音波を生成する方法、それらを使用可能な形式(スピーカーで再生する)に出力する方法、トピックに関する一般的な理論を探しています。みんなありがとう。初心者向けデジタルシンセ
答えて
この問題は、数字の配列へのマッピング関数についての基本的です。ファーストクラスの関数をサポートする言語は、ここで本当に便利です。
は、いくつかのJava関連の情報のため http://www.harmony-central.com/Computer/Programmingと http://www.developer.com/java/other/article.php/3071021をチェックしてください。その後、
サウンドデータを符号化の基本的な概念がわからない場合は、正規のWAVE形式は非常に単純であるhttp://en.wikipedia.org/wiki/Sampling_rate
を読んで、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ファイルを取得します。
チェックアウトFrinika。これは、Java(オープンソース)で実装されたフル機能の音楽ワークステーションです。 APIを使用すると、シンセサイザーでMIDIイベントを実行し、生のサウンド出力を読み込み、WAVファイルに書き込むことができます(下記のソースコードのリンクを参照)。
追加情報:
私の学位のために勉強している間、私の論文プロジェクトは、Javaベースのモジュラー・シンセサイザーの作成だった、と私は勉強している時に大学が私のレポートは公に利用可能にするために適合見た:私はいけない
それが役に立つかどうかは分かりますが、何かのためにMIDIを使用できる場合は、JFugeをチェックしてください。
http://www.jfugueのJFugueです。組織 –
MIDIは、フリント・ニッピングのようなものです。遠い過去に人類へのサービスのために敬意を表しますが、今日誰かが真剣に使用するべきものではありません。 – MusiGenesis
@MusiGenesis - あなたは本当ですか?笑 – Krakkos
- 1. Android間アクティビティシグナリング(初心者向け質問)
- 2. F#言語 - 初心者向けのヒント
- 3. 初心者向けios開発
- 4. Wordpress Tablesorter初心者向けのZebraストライププラグイン
- 5. 初心者向けのJava UI開発
- 6. 初心者向けのC++プロジェクト
- 7. 初心者向けのDjangoとweb2py
- 8. Linuxカーネル開発初心者向けエディタ
- 9. Android NDKチュートリアル/初心者向けガイド。
- 10. C++初心者/中級者向けのプロジェクトですか?
- 11. BDDの初心者向けの素材ですか?
- 12. WindowsでLibsodiumを錆める方法(初心者向けガイド)
- 13. 一般的なマルチスレッドミスiPhone初心者向け
- 14. FacebookのデモアプリがiOS初心者向けのiOS
- 15. 初心者向けにffmpeg-PHPをインストールするには?
- 16. 初心者初心者アヤックスへのヒント
- 17. オーバーライドロジック:初心者
- 18. C#初心者
- 19. MonoDroid - 初心者
- 20. 初心者ガイドハスケル?
- 21. 初心者XSD
- 22. MVC2 /初心者
- 23. プログラミングパラダイム初心者
- 24. アンドロイドブルートゥースチャット初心者
- 25. ハスケル初心者
- 26. 初心者:serializers.serialize
- 27. 初心者PHP:
- 28. MonoDroid - 初心者
- 29. 初心者:サービス
- 30. Windowsのスレッド用の初心者向けのチュートリアルはありますか? C++
非常に有用な紙、特に基本用。 – leolobato