音声音楽スポンサーリンク前回はドミソの和音を鳴らしました。このとき周波数は他から持ってきた数字をそのまま書いていました。今回はどの音でも自由に鳴らせるように周波数は自前で計算します。Java複数のサイン波を同時に鳴らす(3)平均律についてのおさらい平均律については依然に説明しました。調律の話(1)調律の話(2)平均律は1オクターブに12の音があると想定してその関係を、全ての比率を同じにしたものです。半音、つまり隣同士の音の比率はオクターブの比率2の12乗根(ルート12)になります。逆にいうと半音の比率xを12回かけると2になるような比率xが平均律での基本的な数字になります。音の高さには便宜的にドレミとかCDEとかハニホなど名前をつけていますがこのままではプログラムではなかなか使いにくいです。楽器間の通信の規格MIDIでは音の高さを数字で表しているのでこれを利用しましょう。真ん中のドが60オクターブ上になると12を足すオクターブ下になると12を引く12音の平均律は1オクターブに12音の半音の音程があるので1オクターブ上のドにいくには12半音移動し72になります。下のドは48ですしそのさらに下のドは36になります。MIDIの規格では音の高さに7ビットを当てています。0〜127までの数字が使えます。通常の楽器のなかで一番音域の広い楽器はピアノです。その一番低い音は真ん中のドから3オクターブ下の度から3半音降ったラでMIDIの番号では21です。上は4オクターブ上のドでMIDIの番号は108です。ピアノを触ったことのある人ならわかると思いますがあまり下の方の音や上の方の音は通常使いません。だいたい真ん中のドから上下2オクターブもあればほとんどの簡単な曲は弾けるものです。以前ラの音は440であることを話しましたがこれは真ん中のドから9半音上のラのことでMIDIで69になります。この音を基準として周波数を求めることにします。1半音上の場合は上記比率xを440にかけます。2半音上の場合には比率xの2乗を440にかけます。1音下の場合には比率xの-1乗を440にかける、つまり440を比率xで割ることになります。Javaで計算式を作るまず定数を決めておきます。69;ここでの定数を元に計算します。FREQUENCY_A;}例えば古楽では440Hzよりもっと低い音で調律していました。これは当時はステンレスの弦を作る技術はなく必然と張力の弱い弦を使っていたことからも推測できます。ドミソを計算するではドミソそれぞれの周波数を計算します。真ん中のドはMIDIで60、ミは4半音上で64、ソはさらに3半音上で67になります。System.out.println(getFreq(60));System.out.println(getFreq(64));System.out.println(getFreq(67));結果は以下の通りです。ミナ・ベルジェJava複数のサイン波を同時に鳴らす(3)Javaで「うなり」の音声ファイルを作成する関連記事クラスの継承について似たような機能を持っているけれど少しずつ違うクラスを作りたい、という時にはクラスの継承を考えます。継承とはあるクラスをもとに別のクラスを定義...記事を読むカンタータ『主よ、人の望みの喜びよ』を聴くおそらくバッハの一番有名なカンタータの曲は『主よ、人の望みの喜びよ』という合唱曲でしょう。今日はこの曲を聴きます。この曲はJ...記事を読むJavaとMIDI:曲の構造と表現の分離(2)前回フレース演奏のためのクラスを作ったのでこれを利用します。前回作ったPhraseEditorの継承...記事を読むタイムラインのオプティマイズ(2)前回TimeLineクラスを分離してモノラルでも利用できうる抽象クラスを作りましたのでそれを利用して楽器で「演奏された音」クラス、Playe...記事を読むユーティリティの整理ここまでいくつかユーティリティクラスを作ってきたので一度整理します。パッケージはutilにしてmainメソッドも外しておきます。wave「四角い波」といいます。図で見るとこのような形になります。音量は一定時間ごとに最大値と...記事を読むJavaによる録音:外部の音を録音する(1)録音に必要な技術は前に書いたもので揃いました。Javaでの簡単スレッド...記事を読むwavファイルの波形を表示させる(2)今回はwavファイルから必要なデータを抜き出す処理を作ります。前回ウィンドウを作りました。waveは正弦波とも呼ばれますが音の波として一番シンプルなものとされています。以前作った矩形波も複数の波長の異なるサイン波...記事を読むテキストファイルへの書き出し前回ファイルからの読み込みをしました。今度は書き出しをします。書き出しはPrintStreamというクラスを使います。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。コメントデータの処理方法の詳細はこちらをご覧ください。外国語としてのJavaと音楽%d人のブロガーが「いいね」をつけました。