Skip to content

Commit

Permalink
feat : 재생시간 추출 기능 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
Sirius506775 committed Mar 23, 2024
1 parent dd1a3b6 commit 34a2679
Showing 1 changed file with 51 additions and 36 deletions.
87 changes: 51 additions & 36 deletions src/main/java/site/balpyo/ai/service/PollyService.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,23 @@
import com.amazonaws.services.s3.model.Permission;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.audio.mp3.MP3AudioHeader;
import org.jaudiotagger.audio.mp3.MP3File;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import site.balpyo.ai.dto.PollyDTO;
import site.balpyo.ai.dto.upload.UploadResultDTO;
import site.balpyo.common.s3.S3Client;

import java.io.File;
import java.io.InputStream;

import java.io.*;
import java.net.URL;

import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
Expand Down Expand Up @@ -151,18 +158,21 @@ public UploadResultDTO synthesizeAndUploadSpeech(PollyDTO pollyDTO) {
log.info("--------------------- " + fileName);

// S3에 업로드
String profileUrl = uploadToS3(audioStream, fileName);
Map<String, Object> audioInfo = uploadToS3(audioStream, fileName);

log.info("--------------------- " + profileUrl);
String baseUploadURL = audioInfo.get("baseUploadURL").toString();
int durationInSeconds = (int) audioInfo.get("durationInSeconds");
log.info("--------------------- " + baseUploadURL);
log.info("--------------------- " + durationInSeconds);


return UploadResultDTO.builder()
.profileUrl(profileUrl)
// .playTime(playTime)
.profileUrl(baseUploadURL)
.playTime(durationInSeconds)
.build();
}

private String uploadToS3(InputStream inputStream, String fileName) {
private Map<String, Object> uploadToS3(InputStream inputStream, String fileName) {

log.info("--------------------- " + fileName);

Expand All @@ -173,45 +183,50 @@ private String uploadToS3(InputStream inputStream, String fileName) {
setAcl(s3Client.getAmazonS3(), fileName);

// 업로드된 파일의 URL 생성
String baseUploadURL = "https://balpyo-bucket.s3.ap-northeast-2.amazonaws.com//" + fileName;
String baseUploadURL = "https://balpyo-bucket.s3.ap-northeast-2.amazonaws.com/" + fileName;

log.info("업로드 위치------" + baseUploadURL);

// 재생시간 계산 로직 추가
// 임시 파일로 저장하여 처리
int durationInSeconds = 0; // 초기화

try {
File outputFile = new File(baseUploadURL);
AudioFile audioFile = AudioFileIO.read(outputFile);
int duration = audioFile.getAudioHeader().getTrackLength();
log.info("------------ 재생시간: " + duration + "초");

URL url = new URL(baseUploadURL);
InputStream targetStream = url.openStream();
fileName = Paths.get(url.getPath()).getFileName().toString();
File localFile = new File(System.getProperty("java.io.tmpdir"), fileName);

// File localFile = new File(baseUploadURL);
log.info("Download------" + localFile);
Files.copy(targetStream, localFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
targetStream.close(); // 스트림 닫기

// MP3 파일의 재생 시간 계산
MP3File mp3File = new MP3File(localFile);

log.info("mp3 file" + mp3File);

MP3AudioHeader audioHeader = (MP3AudioHeader) mp3File.getAudioHeader();
durationInSeconds = audioHeader.getTrackLength();

log.info("------------ 재생시간: " + durationInSeconds + "초");

// 임시 파일 삭제
localFile.delete();

} catch (Exception e) {
e.printStackTrace();
}

return baseUploadURL;
// 결과를 Map에 담아 반환
Map<String, Object> result = new HashMap<>();
result.put("baseUploadURL", baseUploadURL);
result.put("durationInSeconds", durationInSeconds);
return result;
}



// private String uploadToS3(InputStream inputStream, String fileName) {
// String objectPath = "/" + fileName; // S3에 저장될 경로
//
// // S3에 업로드
// s3Client.getAmazonS3().putObject(bucketName, objectPath, inputStream, new ObjectMetadata());
//
// // ACL 설정
// setAcl(s3Client.getAmazonS3(), objectPath);
//
// // 업로드된 파일의 URL 생성
// String baseUploadURL = "https://balpyo-bucket.s3.ap-northeast-2.amazonaws.com/audio";
//
//
//
// log.info("업로드 위치------" + baseUploadURL + objectPath);
//
// return baseUploadURL + objectPath;
// }

public void setAcl(AmazonS3 s3, String objectPath) {
AccessControlList objectAcl = s3.getObjectAcl(bucketName, objectPath);
objectAcl.grantPermission(GroupGrantee.AllUsers, Permission.Read);
Expand Down

0 comments on commit 34a2679

Please sign in to comment.