https://console.ncloud.com/naver-service/application
안드로이드 패키지 이름 등록후 카드등록만 되어있으면 api key발급 완료
인증정보를 확인해보면 클라이언트id와 클라이언트 시크릿키가 발급됨
기본세팅
레트로핏으로 rest api를 활용할꺼기 때문에
레트로핏 기본세팅
매니페스트
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
gradle 모듈
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation("com.squareup.okhttp3:logging-interceptor:4.9.0")
네이버 클로바 세팅
https://api.ncloud-docs.com/docs/ai-naver-clovavoice
CLOVA Voice 개요
api.ncloud-docs.com
https://api.ncloud-docs.com/docs/ai-naver-clovavoice-ttspremium
tts (Premium)
api.ncloud-docs.com
호출받을 API URL ,요청 헤더,요청 파라미터 필요
api호출 정보를위한 api class 생성
public interface ClovaVoiceService {
@POST("tts")
@Headers({
"Content-Type: application/x-www-form-urlencoded",
"X-NCP-APIGW-API-KEY-ID: {니가 발급받은거}",
"X-NCP-APIGW-API-KEY:{니가 발급받은거}"
})
@FormUrlEncoded
Call<ResponseBody> synthesize(@Field("speaker") String speaker, //목소리(이름선택)
@Field("speed") int speed, //속도(-로 갈수록 빨라짐)
@Field("volume") int volume, //소리 크기(클수록커짐)
@Field("pitch") int pitch, //음역대? -로갈수록 외계인소리
@Field("emotion-strength") int emotion, //감정표현
@Field("alpha") int alpha, //음색 높을수록 하이톤
@Field("end-pitch") int enpitch, //끝음처리 -로갈수록 끝음내리고 +일수록 올림
@Field("text") String text);
}
파라미터는 본인이 필요한 거만 집어넣어도됨(단 스피커와 텍스트는필수)
레트로핏 연결
public class ClovaNetworkClient {
public static Retrofit retrofit;
public static Retrofit getRetrofitClient(Context context){
if(retrofit == null){
// 통신 로그 확일할때 필요한 코드
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
// 네트워크 연결관련 코드
OkHttpClient httpClient = new OkHttpClient.Builder().connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1,TimeUnit.MINUTES)
.writeTimeout(1,TimeUnit.MINUTES)
.addInterceptor(loggingInterceptor)
.build();
// 네트워크로 데이터를 보내고 받는 레트로핏 라이브러리 관련 코드
retrofit = new Retrofit.Builder()
.baseUrl("https://naveropenapi.apigw.ntruss.com/tts-premium/v1/")
.client(httpClient)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
당연히 baseUrl은 하드코딩안하고 config에 domain에 변수로 저장해서 사용하길 권장
네이버는 아주 친절하게 코드가 소개되어있기때문에 복사해서 그대로 사용해도 금방 활용 가능
레트로핏 코드
public void clova() {
Retrofit retrofit = 레트로핏class.호출함수(사용하는액티비티.this);
ClovaVoiceService api = retrofit.create(사용하는액티비티.class);
Call<ResponseBody> call = api.synthesize("nbora", -1,2 ,1,2,0,1,"안녕하세요, 네이버 클로바 보이스입니다.");
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.isSuccessful()) {
try {
File tempMp3 = File.createTempFile("temp","mp3",getCacheDir());
tempMp3.deleteOnExit();;
InputStream inputStream = response.body().byteStream();
FileOutputStream fos = new FileOutputStream(tempMp3);
byte[] buffer = new byte[1024];
int read;
while ((read = inputStream.read(buffer))!=-1){
fos.write(buffer,0,read);
}
fos.flush();
fos.close();
inputStream.close();
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(tempMp3.getPath());
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
t.printStackTrace();
Log.d("TAG", "onFailure: " + t.getMessage());
}
});
}
아주 기본적으로 필요한거만 집어넣은 코드
호출파라미터를 모두 변수로 만들어서 여러 목소리나 속도,멘트등을 조절하기를 권장
'android studio' 카테고리의 다른 글
안드로이드 스튜디오 카카오 로그인 구현 (0) | 2023.03.24 |
---|---|
[안드로이드] 안드로이드스튜디오 구글기본 tts 사용 (0) | 2023.03.22 |
[android] 안드로이드 스튜디오 카메라/갤러리 처리하기 (0) | 2023.02.13 |
[android] Intent ACTION_VIEW Uri.parse 외부 액티비티 띄우기 (0) | 2023.02.07 |
[android] 이미지 처리를 위한 Glide 라이브러리 사용법 (0) | 2023.02.07 |