2017-03-01 13 views
-3

Javaでは、特定の周波数と長さのノートをオーディオに追加する関数を作成する必要があります。私は倍音として周波数を、ミリ秒単位で音符の長さを持っています。フレーム、バイト、およびintの長さをミリ秒単位で調べる方法

フル機能の説明:

This method takes one AudioInputStream and adds the sound of a certain pure frequency to the FRONT of it, lasting a certain length of time. So the method takes two additional parameters: frequency and noteLengthInMilliseconds. The amplitude of the additional sound should be 64*256.

しかし、私はフレーム内だけでなく、バ​​イト、int型で、ノートの長さを見つける必要があります。

また、(java.sound.sampledパッケージを使用して)サンプルのデータ配列としてノートを作成する方法に関するアドバイスは役に立ちます。

FRAME &サンプルレート:44100.0hz
ENCODING:

+0

どのような種類のフレームですか? PCMフレーム?サンプルレートとは何ですか?そして、 "Bytes and Ints"と同様に "あなたはどういう意味ですか?" – Brad

+0

PCM_SIGNEDエンコーディング、44,100.0 Hzサンプルレート – Markeazy

答えて

1

をPCM_SIGNEDあなたのフレームレートとサンプルレートが同一であるので、あなたはPCMフレームを参照していると仮定しましょう。 PCMフレームはチャネルごとに1つのサンプルです。オーディオチャンネルが1つしかない場合(サンプルあたり16ビット)、2バイトごとに1つのフレームが得られます。 16ビット/サンプルのステレオオーディオを使用する場合、4バイトごとに1フレームが得られます。

長さを調べるには、サンプルレートを取り出して分けます。私は、44.1 kHzのサンプル・レートを持っていると私はノートが下期も続くしたい場合:

44,100 * 0.5 = 22,050 samples (22,050 frames) 

そこからは音声が16ビットであり、かつ唯一のチャンネルがあることがわかっている場合:

は、
22,050 * 2 (bytes per channel) * 1 (channels) = 44,100 bytes 
+0

したがって、長さがミリ秒で、サンプルレートが44の場合は、2チャンネルの場合、私は単純にします: '(44,100 * noteLengthInSeconds)* 2(チャンネルあたりのバイト数)* 2(チャンネル)'? – Markeazy

+0

はい。ミリ秒を秒単位に変換することを忘れないでください。 – Brad

1

フレームの長さはAudioFormatの情報に依存して、単純な計算です。具体的には、プロパティ "frameRate"を調べます。フレームあたりのバイト数はframeSizeプロパティでカバーされます。

オーディオデータの配列を作成するには、いくつかの手順が必要です。純粋なトーンの値は、Math.sin関数を実行することによって作成できます。 Math.PI * 2は1つの完全なサイクルに相当します(これはすでに分かっていますが、これは非常に基本的なものです)ので、各ステップのインクリメントをどのくらい小さくするかを分けてください。

Math.sin関数の結果は、あなたが割り当てに合ったデータ範囲には、この番号を変換する必要があります-1と1の間の二重です。これは、オーディオ値に係数を掛けることによって行われます。たとえば、32767を掛けると、Shortまたは16ビットの符号付きの範囲が得られます。

バイトからバイトへの変換は、ビッグエンディアンまたはリトルエンディアンの場合は部分的に異なります。また、複数のトラックがあるかどうかを管理する必要があります(たとえば、ステレオが一般的です)。これらのすべてのステップは、他のStackoverflowの記事でカバーされています。あなたがそれをしたら、それは既存のオーディオと組み合わせた方法、データアレイと何

は、あなたがオーディオとして出力またはエクスポートに新しいwavファイルを作成しようとしているかどうかに部分的に依存しています。 JavaチュートリアルのAudio Trailには、再生、ファイルの保存、ファイルフォーマットとフォーマット変換に関する良いセクションがあります(この記事を読むことを強くお勧めします)。

関連する問題