[Java8] PSGぽい音を出す。
JavaでPSGぽい音を出すサンプルです。タイトルでJava8って書いてるけど、古いのでもいけると思います。(どのバージョンから出来るのかは確認してない)
package jp.hemohemo.testaudio;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
public class TestAudio {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int SAMPLING_RATE = 44100; // 44.1kHz(CDと同じ)
// オーディオフォーマットを準備
AudioFormat format = new AudioFormat(
SAMPLING_RATE, // サンプリング周波数
16, // 16ビット
2, // ステレオ
true, // 符号
true // ビッグエンディアン
);
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
SourceDataLine line;
try {
// データラインを取得
line = (SourceDataLine)AudioSystem.getLine(info);
// ラインを開く
line.open();
} catch (LineUnavailableException ex) {
Logger.getLogger(TestAudio.class.getName()).log(Level.SEVERE, null, ex);
return;
}
// 1秒間の波形データを準備
int freq = 440; // ラ(A)の周波数(440Hz)
int vol = 2000; // 音量
byte[] datas = new byte[SAMPLING_RATE * 2 * 2]; // ステレオ、16ビットなので * 2 * 2なる
int val;
for(int i = 0; i < SAMPLING_RATE; i++) {
int tmp = (int)(2 * i * freq / SAMPLING_RATE);
if(tmp % 2 == 0) {
val = vol;
} else {
val = -vol;
}
// 左チャンネル
datas[i * 2 * 2 + 0] = (byte)((val >> 8) & 0xff);
datas[i * 2 * 2 + 1] = (byte)(val & 0xff);
// 右チャンネル
datas[i * 2 * 2 + 2] = (byte)((val >> 8) & 0xff);
datas[i * 2 * 2 + 3] = (byte)(val & 0xff);
}
line.start();
// 波形データを書き込む
line.write(datas, 0, datas.length);
// 鳴り終わるのを待つ
line.drain();
line.stop();
line.close();
}
}
まっ、見ればわかると思いますが、最初のほうでCDと同等の音質でデータラインを取得して、そこに440Hzの矩形波のデータを用意して書き込んでる。このfreqの値を変えると音程が変更でき、volを変更すると音量が変わる。
和音の出し方は別の音程の波形データを加算するだけでOK。ただし、オーバーフローしないようにしないといけない。
« NetBeansで日本語を入力すると落ちる - Така блог | トップページ | C# そのスレッド本当に必要ですか? - Qiita »
「プログラミング」カテゴリの記事
- Wii UでBASIC言語のプログラミングができる『プチコンBIG』が12月14日配信開始 - ファミ通.com(2016.12.07)
- プログラミング関係は別ブログに~(2015.04.21)
- Amazon.co.jp: 関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間: 岡部健: 本(2015.04.13)
- α版のリリースから1年4カ月、「Node.js Tools for Visual Studio」v1.0が正式版に - 窓の杜(2015.03.26)
- Nodeビギナーズブック » Node.jsチュートリアル » Node.js 教程(2015.03.13)
「Javaプログラミング」カテゴリの記事
- [Java8] PSGぽい音を出す。(2014.09.17)
- NetBeansで日本語を入力すると落ちる - Така блог(2014.09.13)
- [Java8] JavaFX、マルチタッチ(2014.08.16)
- [Java8] JavaFX、ファイルのドラッグ&ドロップ(2014.08.06)
- [Java8] JavaFX、とりあえずリストビュー(2014.08.05)
この記事へのコメントは終了しました。
« NetBeansで日本語を入力すると落ちる - Така блог | トップページ | C# そのスレッド本当に必要ですか? - Qiita »


コメント