5-7 音声の再生

Download Report

Transcript 5-7 音声の再生

5-7 音声の再生
(1)テキストスピーチ
A. 手順
音声による英文のスピーチ
・Android 1.6 以降の実機で可能。
・Android 2.3.3 では英語であれば エミュレータで可能。それ以前は実機のみ。
・機種によっては音声がインストールされていない場合があるので、Androidマーケット
からダウンロードしてインストールする。
【手順】
①初期化時に呼び出されるリスナを指定して、TextToSpeach クラスを作成。
②言語を指定。ここではENGLISH。
③Edit Text ウィジェットに入力されたテキストを指定して、speakメソッドを呼び出す。
package jp.yu.speech;
C.
import android.app.Activity;
import android.os.Bundle;
import java.util.*;
import android.speech.tts.*;
import android.speech.tts.TextToSpeech.*;
import android.view.*;
import android.view.View.*;
import android.widget.*;
public class SpeechActivity extends Activity {
EditText text; Button btn; TextToSpeech tsp;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout LL = new LinearLayout(this);
LL.setOrientation(LinearLayout.VERTICAL);
setContentView(LL);
text = new EditText(this); LL.addView(text);
btn = new Button(this);
btn.setText("Start");
LL.addView(btn);
tsp =new TextToSpeech(getApplicationContext(),
new SpeechInitListener());
プログラム例(1)
プログラム例(2)
tsp.setLanguage(Locale.ENGLISH);
btn.setOnClickListener(new SpeechClickListener());
}
class SpeechClickListener implements OnClickListener{
@Override
public void onClick(View arg0) {
String str = text.getText().toString();
if(str != null) tsp.speak(str, TextToSpeech.QUEUE_FLUSH, null);
}
}
class SpeechInitListener implements OnInitListener{
@Override
public void onInit(int arg0) {}
}
}
D. 実行例
Edit Textウィジェットに
英文を入力して
Startボタンをクリック。
テキストが読まれる。
(2)音声データの再生
A. 再生可能ファイル
フォーマット/コーデック
エンコーダ デコーダ
AAC LC/LTPMP3
NE-AACv1(AAC+)
HE-AACv2
(enhanced AAC+)
○
…
…
○
○
○
AMR-NB
AMR-WB
FLAC
MP3
MIDI
○
○
…
…
…
○
○
○
○
○
Vorbis
PCM/WAVE
…
…
○
○
サポートファイル
3GPP(.3gp)
MPEG-4(.mp4, m4a)
ADTS raw AAC(.aac)
・デコード(Android 3.1以上)
・エンコード(Android 4.0以上)
・ADIF非サポート
MPEG-TS(.ts)Android 3.0以上,シーク不可
3GPP(.3gp)
3GPP(.3gp)
FLAC(.flac) Android 3.1以上
MP3(.mp3)
Type and 1(.mid, .xmf, .mxmf)
RTTTL/RTX(.rtttl, .rtx), OTA(.ota), iMelody(.imy)
Ogg(.ogg), Matroska(.mkv), Android 4.0以上
WAVE(.wav)
B. サポート詳細
フォーマット/コーデック
詳細
AAC LC/LTPMP3
NE-AACv1(AAC+)
HE-AACv2
AMR-NB
AMR-WB
FLAC
モノラル/ステレオ,
最高160 Kbps, サンプリングレート8~48 kHz
MP3
MIDI
PCM/WAVE
4.75~12.2 Kbps, サンプリングレート 8 kHz
6.60~23.85 Kbps, サンプリングレート 16 kHz
モノラル/ステレオ(マルチチャンネル不可), 16 bit 推奨,
サンプリングレート 48kHz, 24 bit ディザは適用されない。
モノラル/ステレオ, 8~320 Kbps(CBR), またはVBR
MIDI Type 0 and 1, DLS Version 1 and 2, XMF, Mobile XMF,
RTTTL/RTX, OTA, iMelody
8 and 16 bit linear PCM
C. 再生方法
・安全のためエミュレータでは4.0以降を使うこと
【手順】
① 「res」フォルダ内に「raw」サブフォルダを作成。
② 音声ファイルをrawサブフォルダ内に移動。サンプルではmusic1.mp3を指定。
③ リソースを指定するときは「R.raw.ファイル名」。サンプルでは「R.raw.music」と指定す
る。
Resフォルダ内にrawサブフォルダ作成
① 「res」フォルダ選択
② 「ファイル」「新規」「フォルダ」を指定
D. 操作方法
(その1)
③フォルダ名「raw」を入力して「完了」ボタンクリック
操作方法
(その2)
④音声ファイルを「raw」フォルダにドラッギング
操作方法
(その3)
⑥コピーされていることを確認
⑤「ファイルをコピー」にチェックを
入れて「OK」ボタンをクリック
E. 関連クラス
【android.media.MediaPlayer クラス】
static MediaPlayer create
指定リソースを再生するメディア
(Content cn, int id)
プレーヤを作成。
void prepare()
メディアプレーヤの準備
void start()
再生開始
void pause()
再生一時停止
void stop()
再生停止
void seekTo(int m)
再生ミリ秒に移動
void release()
メモリの開放
void setOnCompletionListener
サウンド再生完了リスナーの指定
(MediaPlayer.OnCompletionListener l) l :サウンド完了リスナー
void onCompletion(MediaPlayer mp) サウンド再生完了時に呼ばれる。
【注意】バックキーなどでホーム画面に移っても,メモリが許す限りバックグラ
ウンドで動いているので,そのままでは再生し続けることになる。
アプリ停止時に明示的にサウンドを停止することが必要。
package jp.sound;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
public class SoundActivity extends Activity {
private MediaPlayerView view; private MediaPlayer player;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
view =new MediaPlayerView(this);
setContentView(view);
}
class MediaPlayerView extends View
implements MediaPlayer.OnCompletionListener{
public MediaPlayerView(Context context) {
super(context);
setBackgroundColor(Color.WHITE);
setFocusable(true);
player=null;
}
public void onDraw(Canvas canvas){
Paint p = new Paint();
p.setAntiAlias(true);
p.setTextSize(32);
canvas.drawText("Media Player Excecute",0,40,p);
}
C. プログラム例(1)
public boolean onTouchEvent(MotionEvent event){
if(event.getAction()==MotionEvent.ACTION_DOWN){
if(player==null)playSound();
else stopSound();
}
return true;
}
public void playSound(){
try{
stopSound();
player=MediaPlayer.create(getBaseContext(), R.raw.music1);
player.seekTo(0);
player.start();
player.setOnCompletionListener(this);
}catch(Exception e){}
}
public void stopSound(){
try{
if(player == null) return;
player.stop();
player.setOnCompletionListener(null);
player.release();
player=null;
プログラム例(2)
}catch(Exception e){}
}
public void onCompletion(MediaPlayer mp) {
stopSound();
}
}
}