音声音楽スポンサーリンク今回はwavファイルから必要なデータを抜き出す処理を作ります。前回ウィンドウを作りました。グラフの領域は横が余白をのぞいて780ピクセルあります。ここに波形を表示したいと思います。問題はサンプルしている全てのデータを表示しきれないことです。サンプルレートが48000、長さが3秒なので14万以上のサンプル数、これを780ピクセルに表示するには間引きが必要です。3秒間全てを表示したいわけではなく波形を見たいので前後3周期で純分でしょう。これであれば2ピクセルごとに1サンプルを描画すれば良いでしょう。780ピクセルなので余裕をもって400サンプル取ります。今回は処理の流れのみ見ていきます。wavファイルの波形を表示させる(1)処理の説明インポートは以下の通りです。javax.sound.sampled.UnsupportedAudioFileException;次に前回作ったファイルを読み込む準備をします。File("/Users/myaccount/mywork/square_440.wav"));こちらで動かして見たところ読み込みフォーマットのうちBigEndienではなくLittleEndienになっていました。このため他の項目を変えずBigEndienにして開き直します。input_stream);サンプルサイズをバイトで取得します。8;データを保持する可変の配列を準備します。ArrayList<>();とりあえず400個のサンプリングを取るように取得サイズを決めておきます。400;サイズ通り取得できるようにwhile文を使います。//取得処理}ここから取得処理の詳細です。longに変換できるように8つのバイト配列を作ります。実際には2バイトしか読みませんが下段の処理で8個の配列が用意されていないと変換できません。byte[8];2バイト分を下二桁に読み込みます。sample_size);このままでは負の数字の処理がうまくいきません。00000001となり-32767になるのですがbyte配列の上6桁は未設定のため0になります。00000001となりlong値では32769という正の数字になってしまいます。long値で同じ値にするには以下のように上6桁のビット全てを立てます。00000001以下のような処理を追加します。}}これをlong値にして配列に追加すれば取得処理は終わりです。最後に取得したデータが正しいか確かめます。System.out.println(value);}結果は以下の通り、正しい値が取れました。調律の話(2)前回はピタゴラスの音律で音階を求めました。今回は平均律という音律を見ます。説明が必要ですがピタゴラスの音律は5度の関係の音同士は良好に和音を...記事を読むJavaのパッケージについて作っているシステムが大きくなりクラスの量が増えてくると雑然としてきます。前回繰り返しについて日常の例をあげて分類しました。繰り返しを実現するfor文の構造を前に見ました。今回は他の繰り返し構文であるwhile文とdo-while文の二つの構文を見てみましょう。w...記事を読むユーティリティの整理ここまでいくつかユーティリティクラスを作ってきたので一度整理します。パッケージはutilにしてmainメソッドも外しておきます。連想配列は通常の配列と同じように複数のインスタンスをまとめて管理できます。異なるのは通常の配列が順番によって管理しているのに対して連想配列は...記事を読むテキストファイルの読み込み今までターミナルまたはプロンプトと呼ばれる標準入出力を使って情報のやり取りをしました。今度はコンピューター上に置いたファイルから文字列を読ん...記事を読むJavaでの実装:平均律クラヴィーアBWV846プレリュードの一部プログラムで実装する対象の曲を調査します。調査することによって楽曲の構造を把握してどのように実装すればよいか検討することができます。...記事を読むJava複数のサイン波を同時に鳴らす(3)複数の音源を管理してミックスするTimeLineというクラスを作りました。ここではそれを使って実際の音を作ります。文字列の先頭から1文字ずつ切り出して出力してみましょう。ここでは「だるまさんがころんだ」を1文字ずつ切り出します。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。コメントデータの処理方法の詳細はこちらをご覧ください。外国語としてのJavaと音楽%d人のブロガーが「いいね」をつけました。