Android プログラミング メディア

サウンド

public class MediaPlayerEx extends Activity implements View.OnClickListener{

    private final static int WC = LinearLayout.LayoutParams.WRAP_CONTENT;
    private final static String TAG_BGM = "bgm";
    private final static String TAG_SE = "se";
    private MediaPlayer mediaPlayer;
    private SoundPool soundPool;
    private int soundId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

//        サウンドプールの生成
        soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC,0);

//        サウンドプールのサウンド読み込み
        soundId = soundPool.load(this,R.raw.fanfare,1);

        LinearLayout layout = new LinearLayout(this);
        layout.setBackgroundColor(Color.WHITE);
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout);

        layout.addView(makeButton("BGM再生", TAG_BGM));
        layout.addView(makeButton("SE再生", TAG_SE));

    }

    private Button makeButton(String text, String tag) {
        Button button = new Button(this);
        button.setText(text);
        button.setTag(tag);
        button.setOnClickListener(this);
        button.setLayoutParams(new LinearLayout.LayoutParams(WC, WC));
        return button;
    }

    @Override
    public void onClick(View v) {
        String tag = (String)v.getTag();
//        BGM再生/停止
        if(TAG_BGM.equals(tag)){
            if(mediaPlayer == null || !mediaPlayer.isPlaying()){
                playBGM();
            }else{
                stopBGM();
            }
        }else if (TAG_SE.equals(tag)) {
            playSE();
        }
    }

    @Override
    protected void onStop() {
        super.onStop();

        stopBGM();

//        サウンドプールの解放
        soundPool.release();
    }

    private void playBGM(){
        stopBGM();
        try{
//            メディアプレイヤーの生成
            mediaPlayer = MediaPlayer.create(this,R.raw.jupiter);
            mediaPlayer.setLooping(true);
//             メディアプレイヤーの再生
            mediaPlayer.seekTo(0);
            mediaPlayer.start();
        }catch (Exception e){

        }
    }

    private void stopBGM(){
        if(mediaPlayer == null) return;
        try{
//            メディアプレイヤーの停止
            mediaPlayer.stop();
            mediaPlayer.release();
            mediaPlayer = null;
        }catch (Exception e){

        }
    }

    private void playSE(){
//        サウンドプールのサウンドの再生
        soundPool.play(soundId,100,100,1,0,1);
    }
}

ムービー

try{
//            ビデオビューの生成
            VideoView videoView = new VideoView(this);
            videoView.requestFocus();
            videoView.setMediaController(new MediaController(this));
            setContentView(videoView);

//            動画の再生
            videoView.setVideoURI(Uri.parse("android.resource://"+
                getPackageName()+"/"+R.raw.ultra));
            videoView.start();
        }catch (Exception e){
            android.util.Log.e("",e.toString());
        }

音声認識

@Override
    public void onClick(View v) {
//        音声認識の実行
        try{
            Intent intent = new Intent(
                    RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
            intent.putExtra(
                    RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                    RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
            intent.putExtra(
                    RecognizerIntent.EXTRA_PROMPT,
                    "RecognizeSpeechEx");
            startActivityForResult(intent,REQUEST_CODE);
        }catch (Exception e){
            toast(e.getMessage());
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//        音声認識の結果の取得
        if(requestCode == REQUEST_CODE || requestCode == RESULT_OK){
            String str = "";
            ArrayList<String> results = data.getStringArrayListExtra(
                    RecognizerIntent.EXTRA_RESULTS);
            for(int i=0;i<results.size();i++){
                str += results.get(i)+" ";
            }
            editText.setText(str);
        }
        super.onActivityResult(requestCode,resultCode,data);
    }

音声合成

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        LinearLayout layout = new LinearLayout(this);
        layout.setBackgroundColor(Color.WHITE);
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout);

        editText = new EditText(this);
        editText.setText("This is TEST");
        editText.setLayoutParams(new LinearLayout.LayoutParams(MP, WC));
        layout.addView(editText);

        layout.addView(makeButton("音声合成", "speech"));

//        音声合成の準備
        tts = new TextToSpeech(this,this);

    }

    private Button makeButton(String text, String tag) {
        Button button = new Button(this);
        button.setText(text);
        button.setTag(tag);
        button.setOnClickListener(this);
        button.setLayoutParams(new LinearLayout.LayoutParams(WC, WC));
        return button;
    }

    @Override
    public void onInit(int status) {
        if(status == TextToSpeech.SUCCESS){
//            音声合成のロケール指定
            Locale locale = Locale.ENGLISH;
            if(tts.isLanguageAvailable(locale) >= TextToSpeech.LANG_AVAILABLE){
                tts.setLanguage(locale);
            }else{
                toast("Unsupported Language");
            }
        }else if(status == TextToSpeech.ERROR){
            toast("TextToSpeech.ERROR");
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

//        音声合成の終了
        if(tts != null) tts.shutdown();
    }

    @Override
    public void onClick(View v) {
        String str = editText.getText().toString();
        if(str.length() == 0)return;
//        スピーチの停止
        if(tts.isSpeaking()) tts.stop();

//        スピーチの再生
        tts.setSpeechRate(1.0f);
        tts.speak(str,TextToSpeech.QUEUE_FLUSH,null);
    }

参考文献