Primary Audioの切り替え

Primary Audio(主音声)を切り替えるサンプルコード。

 

本サンプルではJMF Controlであるorg.bluray.media.AudioControlの機能を利用して以下を行っている。
  • 英語のPrimary Audio streamをON
なお、これらの機能はStartEventが発生するまで使用できないので要注意。
また、当然のことながら、本サンプルで使用するMovie PlayList filestnTableにlanguageCodeにengを指定したPrimaryAudioStream要素が含まれている必要がある。

 

Main.java

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
 
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.DurationUpdateEvent;
import javax.media.Manager;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.StartEvent;
import javax.tv.media.MediaSelectControl;
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
 
import org.bluray.media.AudioControl;
import org.bluray.net.BDLocator;
import org.davic.media.MediaLocator;
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import org.havi.ui.HScreen;
 
public class Main implements Xlet, ControllerListener {
    Graphics g = null;
    int x=100, y=100;
    AudioControl ac = null;
    public void initXlet(XletContext xc){
        try {
            HScene hs= HSceneFactory.getInstance().getFullScreenScene(
                    HScreen.getDefaultHScreen().getDefaultHGraphicsDevice());
            hs.setFont(new Font(null, java.awt.Font.BOLD, 48));
            hs.setVisible(true);
 
            g = hs.getGraphics();
            g.setColor(Color.white);
 
            Player player = Manager.createPlayer(new MediaLocator(new BDLocator("bd://1.PLAYLIST:00000")));
            ac = (AudioControl)player.getControl("org.bluray.media.AudioControl");
            player.addControllerListener(this);
            player.start();
        } catch (Exception e){
            g.drawString(e.toString(), x, y); y+=50;
        }
    }
    public void startXlet(){}
    public void pauseXlet(){    }
    public void destroyXlet(boolean unconditional){ }
 
    public void controllerUpdate(ControllerEvent arg0) {
        if( arg0 instanceof PrefetchCompleteEvent ){
            g.drawString("PrefetchComplete", x, y); y+=50;
        } else if( arg0 instanceof DurationUpdateEvent ){
            g.drawString("DurationUpdate", x, y); y+=50;
        } else if( arg0 instanceof StartEvent ){
            g.drawString("Start", x, y); y+=50;
            // 選択可能な音声を取得
            String[] ss  = ac.listAvailableLanguages();
            for( int i = 0; i < ss.length; i++ ){
                g.drawString(i+": "+ss[i], x, y ); y+=50;
            }
            try {
                // 英語音声に切り替え
                ac.selectLanguage("eng");
            } catch (Throwable th) {
                g.drawString("err:"+th.toString(), x, y); y+=50;
            }
        }
    }
}

 


関連する項目

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です