JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > サウンド編  
メニュー
Home
情報交換掲示板
ツールの部屋
Java関連の書籍
アプリケーション編
Swing編
Swing(イベント)編
Swing(Look&Feel)編
アプレット編
iアプリ編
サーブレット編
サーブレット(Linux)編
サーブレット(web.xml)編
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
JSP編
JSP(ディレクティブ)編
JSP(アクション)編
JSP(スクリプト)編
JSP(オブジェクト)編
JSP(カスタムタグ)編
JSP(データベース)編
Apache + Tomcat編
Struts編
JDBC編
JDBC(データソース)編
JDBC(MySQL)編
JDBC(PostgreSQL)編
JDBC(トランザクション)編
JavaMail(SMTP)編
JavaMail(POP)編
JNI編
RMI編
RMI(アプレット)編
CORBA編
JNDI編
EJB編
EJB(Entity Bean)編
JMS(PTP)編
JMS(Pub/Sub)編
XML(SAX)編
XML(DOM)編
XSLT編
SOAP編
国際化編
国際化(タイムゾーン)編
国際化(通貨)編
リフレクション編
コレクション編
コレクション(Set)編
コレクション(List)編
コレクション(Map)編
スレッド編
正規表現編
アサーション編
ログ機能編
サウンド編
ファイル入出力編
URL編
ソケット編
データグラム編
HTTP
FTP編
jar編
javadoc編
Ant編
外部コマンド編
プロパティファイル編
システムプロパティ編
Eclipse編
  2002/02/03  田中宏和
サウンド編
◆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