jojo3.audioの使い方

はじめに
掲示板の方で、jojo3.audioの利用方法について質問をいただきましたので、
サンプルプログラム、audiotestをネタに使用方法をご紹介したいと思います。

解説は、以下の順序で行います。
・プログラミング
・コンパイル
・コンソールでのテスト
・パッケージング


プログラミング
基本的にsun.audioと使用方法は同じです。

wavの再生を行うために、jojo3.audioは以下の手順を推奨します。
(1).AudioStreamに音声ファイルを読み込ませる。
(2).AudioStreamから、AudioDataを取り出す。
(3).AudioDataを引数にAudioDataStreamを作る。
(4).AudioDataStreamをAudioManager.playerにて再生する。
これを適用した例を以下に示します。
赤字の部分が、jojo3.audioに関する記述です。
/* * at.java * * Created on 2002/11/29, 9:37 */ /** * * @author jojo3 */ import jojo3.audio.*;jojo3.audio使用宣言 import java.io.*; import java.awt.*; public class at extends java.awt.Frame { static private String AUDIO_FILE = ""; AudioStream as = null; AudioData ad = null; AudioDataStream ads = null; ContinuousAudioDataStream cds = null; /** Creates new form AudioTest */ public at() { initComponents(); setFile(AUDIO_FILE); } private void setFile(String f) { try { AudioPlayer.player.stop(ads); as = new AudioStream(new FileInputStream(f)); ←(1) ad = as.getData(); ←(2) ads = new AudioDataStream(ad); ←(3) cds = new ContinuousAudioDataStream(ad); ← (3)' 繰り返し演奏用 } catch(IOException e) { e.printStackTrace(); } } 〜 中略 〜 private String dirStr = "/home/QtPalmtop/sounds"; private void button4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_button4ActionPerformed // 処理コードをここに追加します: FileDialog fd = new FileDialog(this, "audiotest", FileDialog.LOAD); fd.setDirectory(dirStr); fd.show(); dirStr = fd.getDirectory(); this.setFile(dirStr + fd.getFile()); fd = null; }//GEN-LAST:event_button4ActionPerformed private void button2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_button2ActionPerformed // 処理コードをここに追加します: AudioPlayer.player.start(cds); ←(4)' 繰り返し演奏用 }//GEN-LAST:event_button2ActionPerformed private void button3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_button3ActionPerformed // 処理コードをここに追加します: AudioPlayer.player.stop(ads);←演奏のストップ }//GEN-LAST:event_button3ActionPerformed private void button1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_button1ActionPerformed // 処理コードをここに追加します: AudioPlayer.player.start(ads); ←(4) }//GEN-LAST:event_button1ActionPerformed /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm System.exit(0); }//GEN-LAST:event_exitForm /** * @param args the command line arguments */ public static void main(String args[]) { if (args.length >= 1) { AUDIO_FILE = args[0]; new at().show(); } else { System.out.println("usage:"); System.out.println("java at wavfile"); } } // 変数宣言 - 編集不可//GEN-BEGIN:variables private java.awt.Button button1; private java.awt.Button button4; private java.awt.Button button3; private java.awt.Button button2; // 変数宣言の終わり//GEN-END:variables }


コンパイル
コンパイルは、JDKで行います。
このときに、公開した、jojo3audio.jarが必要になります。
例えば、サンプルであるat.javaをコンパイルするには、以下のようにします(windowsの場合)。
赤字の部分が重要です。
>javac -target 1.1 -classpath .;jojo3audio.jar at.java

[解説]
-target 1.1
SL-A300のPersonal JavaがJava 1.1相当であるために指定します。
こうすることで、バージョンの高いJDKでも過去のバージョンに対応するクラスを生成出来ます。

-classpath .;jojo3audio.jar
jojo3audio.jarをat.javaと同じディレクトリに入れている時の記述です。(違うディレクトリの場合はフルパス指定してください)
jojo3.audioのクラスを使用するには、これらをまとめたjojo3audio.jarをクラスパスに加え、 コンパイラにjojo3.audioの使用を教えてあげる必要があります。
#指定しないと、コンパイルが通りませんよ〜

コンパイルしたクラスは、jarにまとめておくと便利です。
サンプルでは、以下のようにしてクラスをaudiotest.jarにまとめています。
>jar -cvf audiotest.jar *.class


コンソールでのテスト
コンパイルが済んだら、いよいよSL-A300での実験です。
実験には、
ターミナルソフトが必要ですので、まだの人は入手しましょう。
テストは以下の手順で行います。


パッケージング
テストが済んだら、最後はパッケージングでインストールできる状態にします。
パッケージの仕方については、他の方のページで詳しく紹介されていますので、そちらをご覧下さい。
ここなどがオススメです。(mabさんのipkgにはまるのページ)

ここでは、サンプルのパッケージに必要なファイルを紹介します。
サンプルでは、パッケージファイルの構成は図1のようになります。
図中の黄色の字のように、アプリケーション名に従って、 ファイルの名前を付けておくといろいろ便利です。

図1.パッケージ構成図

サンプルのパッケージングに必要なファイルは以下の通りです。
control
Package: java-audiotest Installed-Size: 20k Filename: ./java-audiotest_0.95_arm.ipk Section: java Maintainer: Architecture: arm Version: 0.95 Description:

audiotest.desktop
[Desktop Entry] comment=jojo3.audio test program Exec=runaudiotest Icon=audiotest_icon Type=Application Name=audiotest

jojo3.audioに関する設定は、実行スクリプトファイル(サンプルでは、runaudiotest)に記述します。
これは、SL-A300でアイコンをクリックした時に実行されるものです。
赤い字の部分がjojo3.audioに関する記述です。
runaudiotest
. /home/QtPalmtop/bin/installdir.sh #set INSTALLDIR cd $INSTALLDIR/java/audiotest $QPEDIR/bin/evm -XappName=runaudiotest -cp jojo3audio.jar:audiotest.jar at /home/QtPalmtop/sounds/alarma300.wav

パッケージングは、windowsでも出来ますが、いろいろとツールなどを集めなくてはならないため、非常に面倒です。
ですので、私は、以下の様なスクリプトを使って、SL-A300上でパッケージングしています。
mkipkg
#sh cd $1 tar -cvf control.tar ./control gzip control.tar tar -cvf data.tar ./home gzip data.tar tar -cvf xxx.tar ./control.tar.gz ./data.tar.gz gzip xxx.tar mv xxx.tar.gz ../java-$1_$2_arm.ipk

mkipkgスクリプトのあるディレクトリの下に、上の図1のように環境を作ります。
そこから、ターミナルで
>sh mkipkg アプリケーション名 バージョン
を実行すると、パッケージングファイルが作成されます。
ただし、図1のような、アプリケーション名に基づいたファイル構成にしておく事が前提です。

さて、これで、プログラミングから、パッケージングまでの解説は終わりです。
私自身、わかりやすく書けたかどうか、あまり自信がありませんので、 ご感想、ご要望などは、掲示板にどんどんお願いいたします。
なるべく、改善していきたいと思います。

それでは、みなさま、良い作品を!