| |
|
|
|
| |
 |
サウンド編 |
 |
|
| ◆Java
サウンドAPI |
| JavaのサウンドAPIを使用すると簡単に音楽を再生したり録音したりすることができてしまいます。 |
| ◆ここでの環境 |
| OS |
Windows 2000 |
| J2SE SDK |
1.4.0 |
|
|
|
| ◆Java実行環境の構築 |
| アプリケーション編を参考にしてJava実行環境を構築してください。 |
| 再生 |
| ここでは音楽ファイルを再生する簡単なアプリケーションを作りたいと思います。 |
| ◆Javaソースコード |
| HelloWorldSound.java(ここからダウンロード) |
import java.io.File;
import javax.sound.sampled.*;
public class HelloWorldSound {
private static final int EXTERNAL_BUFFER_SIZE = 128000;
public static void main(String[] args) {
try {
// Fileクラスのインスタンスを生成
File soundFile = new File("hello.wav");
// オーディオ入力ストリームを取得します
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(soundFile);
// オーディオ形式を取得します
AudioFormat audioFormat = audioInputStream.getFormat();
// データラインの情報オブジェクトを生成します
DataLine.Info info = new DataLine.Info(SourceDataLine.class,audioFormat);
// 指定されたデータライン情報に一致するラインを取得します
SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
// 指定されたオーディオ形式でラインを開きます
line.open(audioFormat);
// ラインでのデータ入出力を可能にします
line.start();
int nBytesRead = 0;
byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];
while (nBytesRead != -1) {
// オーディオストリームからデータを読み込みます
nBytesRead = audioInputStream.read(abData, 0, abData.length);
if (nBytesRead >= 0) {
// オーディオデータをミキサーに書き込みます
int nBytesWritten = line.write(abData, 0, nBytesRead);
}
}
// ラインからキューに入っているデータを排出します
line.drain();
// ラインを閉じます
line.close();
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
} |
|
|
| ◆再生するファイルの用意 |
プログラムの中で指定した音楽ファイルを用意しなければなりません。一応、サンプルを用意しておくのでダウンロードしてプログラムの中で指定したパスに置いてください。上のソースのままの場合は実行するクラスファイルと同じフォルダに入れてください。
hello.wav |
| ◆コンパイルと実行 |
| コマンドプロンプト |
| C:\作業フォルダ\JavaHello>javac
HelloWorldSound.java
C:\作業フォルダ\JavaHello>java HelloWorldSound
C:\作業フォルダ\JavaHello> |
|
| おおおおお!音が聞こえたぞ!!!! |
| |
| 録音 |
| 次にマイクから入力した音を録音するアプリケーションを作ります。このアプリケーションはマルチスレッドです。新たに作成したスレッドは録音する処理を行い、メインスレッドはユーザーから終了のためにキーが押されるのを監視します。スレッドに関してはスレッド編を参考にしてください。 |
| ◆Javaソースコード |
| HelloWorldRecorder.java(ここからダウンロード) |
import java.io.IOException;
import java.io.File;
import javax.sound.sampled.*;
public class HelloWorldRecorder extends Thread {
private TargetDataLine m_line;
private AudioFileFormat.Type m_targetType;
private AudioInputStream m_audioInputStream;
private File m_outputFile;
private boolean m_bRecording;
/**
* コンストラクタ
**/
public HelloWorldRecorder(TargetDataLine line,
AudioFileFormat.Type targetType,
File file) {
m_line = line;
m_audioInputStream = new AudioInputStream(line);
m_targetType = targetType;
m_outputFile = file;
}
/**
* 録音を開始します
*/
public void startRecording() {
m_line.start();
super.start();
}
/**
* 録音を停止します
*/
public void stopRecording() {
m_line.stop();
m_line.close();
m_bRecording = false;
}
public void run() {
try {
AudioSystem.write(m_audioInputStream,m_targetType,m_outputFile);
System.out.println("録音が終了しました");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
// Fileクラスのインスタンスを生成
File outputFile = new File("hello.wav");
// 44.1 kHz, 16 bit, ステレオの設定でオーディオ形式を生成します
AudioFormat audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
44100.0F,
16,
2,
4,
44100.0F,
false);
// データラインの情報オブジェクトを生成します
DataLine.Info info = new DataLine.Info(TargetDataLine.class, audioFormat);
// 指定されたデータライン情報に一致するラインを取得します
TargetDataLine targetDataLine = (TargetDataLine) AudioSystem.getLine(info);
// 指定されたオーディオ形式でラインを開きます
targetDataLine.open(audioFormat);
// 書き込むオーディオファイルの種類を設定します
AudioFileFormat.Type targetType = AudioFileFormat.Type.WAVE;
// 録音するインスタンスを生成
HelloWorldRecorder recorder =
new HelloWorldRecorder(targetDataLine,targetType,outputFile);
System.out.println("ENTERキーを押すと録音を開始します");
byte[] b = new byte[2];
System.in.read(b);
// 録音を開始します
recorder.startRecording();
System.out.println("録音中...");
System.out.println("ENTERキーを押すと録音を停止します");
System.in.read(b);
recorder.stopRecording();
System.out.println("録音を停止しました");
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
} |
|
|
| ◆コンパイルと実行 |
| コマンドプロンプト |
| C:\作業フォルダ\JavaHello>javac
HelloWorldRecorder.java
C:\作業フォルダ\JavaHello>java HelloWorldRecorder
ENTERキーを押すと録音を開始します
録音中...
ENTERキーを押すと録音を停止します
録音を停止しました
録音が終了しました
C:\作業フォルダ\JavaHello> |
|
| 録音中にマイクなどで何か録音してください。私は"Hello World♪"って録音しました。録音が終わったらhello.wavファイルをダブルクリックして再生してみましょう!"Hello
World♪"おおおおお!聞こえましたね! |
| |
■書籍
Java関連の書籍 |
|
| |
|
| |
| ツールの部屋
- Java関連の書籍 - デザインパターン - 情報交換掲示板
- HOME |
|
|