Android 개발 텍스트 내용 자동 낭독 기능 구현 방법

이 사례 는 안 드 로 이 드 가 개발 한 텍스트 내용 자동 낭독 기능 의 실현 방법 을 설명 한다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
Android 는 자동 낭독 지원 을 제공 합 니 다.자동 낭독 지원 은 지정 한 텍스트 내용 을 낭독 하여 소 리 를 낼 수 있 습 니 다.뿐만 아니 라 안 드 로 이 드 의 자동 낭독 지원 은 텍스트 에 대응 하 는 오디 오 녹음 을 오디 오 파일 로 만들어 나중에 재생 하기에 편리 하도록 허용 한다.이 자동 낭독 이 지원 하 는 영어 이름 은 TextToSpeech 로 TTS 라 고 부른다.
TTS 의 지원 을 받 아 응용 프로그램 에서 음성 출력 을 동적 으로 증가 시 켜 사용자 체험 을 개선 할 수 있다.
Android 의 자동 낭독 지원 은 주로 TextTospeech 를 통 해 이 루어 집 니 다.이 피 로 는 다음 과 같은 구조 기 를 제공 합 니 다.

TextTospeech(Context context, TextTospeech.OnInitListenerlistener)

위의 구조 기 에서 책 을 보기 어렵 지 않 습 니 다.TextTospeech 대상 을 만 들 때 OnInitListener 감청 기 를 먼저 제공 해 야 합 니 다.이 감청 기 는 TextTospeech 의 초기 화 결 과 를 감청 합 니 다.
프로그램 에서 TextTospeech 대상 을 얻 으 면 TTS 발성 엔진 에 사용 할 언어,국가 옵션 을 설정 할 수 있 습 니 다.
setLanguage(Localelc)를 호출 하면 되 돌아 오 는 값 이"TextToSpeech.LANG"입 니 다.COUNTRY_AVAILABLE 는 현재 TTS 시스템 이 설 정 된 언어,국가 옵션 을 지원 할 수 있 음 을 설명 합 니 다.
TextToSpeech 설정 이 완료 되면 텍스트 를 읽 는 방법 을 사용 할 수 있 습 니 다.구체 적 인 방법 은 TextToSpeech 의 API 문 서 를 참고 할 수 있 습 니 다.TextToSpeech 류 에서 가장 많이 사용 되 는 방법 은 다음 과 같다.

speak(String text,int queueMode,HashMap<String,String>params)


synthesizeToFile(Stringtext,HashMap<String,String>params,String filename)

위의 두 가지 방법 은 모두 text 문자 의 내용 을 오디 오 로 변환 하 는 데 사 용 됩 니 다.speak 방법 은 재생 변환 오디 오 일 뿐,synthesizeToFile 은 변 환 된 오디 오 를 음성 파일 로 저장 합 니 다.
위의 두 가지 방법 중의 params 는 모두 음성 변환 시의 매개 변 수 를 지정 하 는 데 사 용 됩 니 다.TextTospeech setLanguage(Localeloc)방법 중의 quueMode 매개 변 수 는 TTS 발음 대기 열 모드 를 지정 합 니 다.이 매개 변 수 는 다음 과 같은 두 개의 상수 를 지원 합 니 다.
TextToSpeech.QUEUE_FLUSH:이 모드 를 지정 하면 TTS 가 speak 방법 을 호출 할 때 현재 인 스 턴 스 가 실행 중인 작업 을 중단 합 니 다(현재 음성 작업 을 잘 알 고 새로운 음성 작업 을 수행 하 는 것 으로 도 이해 할 수 있 습 니 다)
TextToSpeech.QUEUE_ADD:이 모드 를 지정 하면 TTS 가 speak 방법 을 호출 할 때 새로운 발음 작업 을 현재 발음 작업 줄 에 추가 합 니 다.즉,작업 대기 열 에 있 는 발음 작업 이 완 료 된 후에 speak()방법 이 지정 한 발음 작업 을 수행 합 니 다.
프로그램 이 TextToSpeech 대상 을 다 사용 한 후에 Activity 의 OnDestroy()방법 에서 shutdown()을 호출 하여 TextToSpeech 를 닫 고 사용 하 는 자원 을 방출 할 수 있 습 니 다.
요약 하면 TextToSpeech 를 사용 하 는 절 차 는 다음 과 같다.
1.TextToSpeech 대상 을 만 들 고 생 성 할 때 OnInitListener 모니터 감청 생 성 에 성공 할 지 여부 입 니 다.
2.TextToSpeech 가 사용 하 는 언어,국가 옵션 을 설정 하고 반환 값 을 통 해 TTS 가 해당 언어,국가 옵션 을 지원 하 는 지 판단 합 니 다.
3.speak()또는 synthesizeToFile 방법 을 호출 합 니 다.
4.TTS 를 닫 고 자원 을 회수 합 니 다.
다음 프로그램 은 TTS 를 이용 하여 사용자 가 입력 한 텍스트 내용 을 읽 는 방법 을 보 여 줍 니 다.
Speech.java:

public class Speech extends Activity
{
  TextToSpeech tts;
  EditText editText;
  Button speech;
  Button record;
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //    TextToSpeech  
    tts = new TextToSpeech(this, new OnInitListener()
    {
      @Override
      public void onInit(int status)
      {
        //     TTS    
        if (status == TextToSpeech.SUCCESS)
        {
          //           
          int result = tts.setLanguage(Locale.US);
          //            
          if (result != TextToSpeech.LANG_COUNTRY_AVAILABLE
            && result != TextToSpeech.LANG_AVAILABLE)
          {
            Toast.makeText(Speech.this, "TTS            。", 50000)
              .show();
          }
        }
      }
    });
    editText = (EditText) findViewById(R.id.txt);
    speech = (Button) findViewById(R.id.speech);
    record = (Button) findViewById(R.id.record);
    speech.setOnClickListener(new OnClickListener()
    {
      @Override
      public void onClick(View arg0)
      {
        //     
        tts.speak(editText.getText().toString(),
          TextToSpeech.QUEUE_ADD, null);
      }
    });
    record.setOnClickListener(new OnClickListener()
    {
      @Override
      public void onClick(View arg0)
      {
        //                
        tts.synthesizeToFile(editText.getText().toString(), null,  "/mnt/sdcard/sound.wav");
        Toast.makeText(Speech.this, "      !", 50000).show();
      }
    });
  }
  @Override
  public void onDestroy()
  {
    //   TextToSpeech  
    if (tts != null)
    {
      tts.shutdown();
    }
  }
}

위의 프로그램의 첫 번 째 줄 굵 은 글자 코드 설정 은 TextToSpeech 대상 을 만 들 었 고 두 번 째 줄 굵 은 글 자 는 미국식 영어 로 영어 낭독 을 했다.다음 프로그램 은 각각 두 개의 단 추 를 체통 하 였 으 며,하나의 단 추 는 낭독 을 실행 하 는 데 사용 되 었 으 며,하나의 단 추 는 텍스트 내용 의 낭독 오디 오 를 음성 파일 로 저장 하 는 데 사용 되 었 으 며,각각 TextToSpeech 대상 을 호출 하 는 두 가지 방법 으로 이 루어 졌 다.
프로그램 을 실행 하면 다음 그림 인터페이스 를 볼 수 있 습 니 다:

인터페이스 에서 사용자 가'읽 기'단 추 를 누 르 면 시스템 은 TTS 의 speak()방법 으로 텍스트 상자 의 내용 을 읽 습 니 다.사용자 가'사 운 드 기록'단 추 를 누 르 면 시스템 은speak()방법 으로 텍스트 상자 의 텍스트 에 해당 하 는 낭독 오디 오 를 SD 카드 의 사 운 드 파일 에 기록 합 니 다.이 단 추 를 누 르 면 SD 카드 의 루트 디 렉 터 리 에 sound.wav 파일 을 생 성 할 수 있 습 니 다.이 파일 은 내 보 내 고 다른 오디 오 재생 소프트웨어 에서 재생 할 수 있 습 니 다.
프로그램 이 ActivitysynthesizeToFile()방법 을 다시 쓰 고 이 방법 에서 TextToSpeech 대상 을 닫 고 자원 을 회수 했다.
알림:서로 다른 문자 로 인해 서로 다른 언어,국가 에서 의 발음 이 다 릅 니 다.특히 유럽 과 미국 은 모두 자모 문 자 를 사용 하기 때문에 한 단락 의 텍스트 내용 은 서로 다른 언어,국가 옵션 으로 낭독 하고 발음 효 과 는 전혀 다 릅 니 다.현재 Android 의 TTS 는 당분간 중국 어 를 지원 하지 않 습 니 다.
더 많은 안 드 로 이 드 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.,,,,,,,,그리고 을 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 안 드 로 이 드 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기