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); }
参考文献
Androidプログラミングバイブル SDK5/4対応 (smart phone programming bible)
- 作者: 布留川英一
- 出版社/メーカー: ソシム
- 発売日: 2015/01/26
- メディア: 単行本
- この商品を含むブログ (2件) を見る