카테고리 없음
노래를 텍스트 화 시도해보기_1차시도_코드작성(2)
수닝이
2024. 2. 10. 02:28
1. mp3파일을 wav파일로 변환
https://convertio.co/kr/mp3-wav/
MP3 WAV 변환 (온라인 무료) — Convertio
mp3 파일(들) 업로드 컴퓨터, Google Drive, Dropbox, URL에서 선택하거나 이 페이지에서 드래그하여 선택해 주세요.
convertio.co
여기서 했습니다.
노래는 악동뮤지션에 Galaxy로 진행했습니다.(하나에 올릴 수 있는 파일용량이 초과되어 노래파일은 업로드하지 못했습니다ㅠㅠ + 악동뮤지션 노래좋아요...!)
2. 분과 초 전부 알 때 사용
def division(mins,sec,div):
time = (mins*60+sec) / div
return time
mins = 2
sec = 59
div = 10
print(f'{mins}분 {sec}초를 {div}초로 나눌 때 {division(mins,sec,div)}이다.')
[output]
2분 59초를 10초로 나눌 때 17.9이다. -> 18구간으로 나눈다.
3. 텍스트 파일에 파일이름을 저장 및 음성 파일을 10초씩 나누기
import soundfile as sf # 추가된 import 문
import os
import librosa
import numpy as np
cap = 18 # 구간 지정
def trim_audio_data(audio_file, save_file): 텍스트에 파일이름을 저장한다.
sec = 10 # 10초로 지정
with open('each_10sec.txt', 'w', encoding='utf-8') as f:
for k in range(0,cap):
data, sr = librosa.load(audio_file) # 파일을 불러와서 데이터와 샘플레이트값을 구한다.
data_10 = data[sr*(sec*k):sr*(sec*(k+1))] # 0~10까지 10~20까지 이렇게 진행되게 한다.
sf.write(save_file+ f'_{k}' + '.wav', data_10, sr) # 파일저장
f.write(f"{save_file}_{k}\n") # 텍스트파일에 이름 저장
텍스트 파일에 파일이름을 저장하고 10초씩 나눠서 파일 저장하는 함수를 만든다.
* 10초씩 자른 파일들의 경로를 저장한 텍스트 파일입니다.
4. 오디오 불러오기 및 함수에 넣어 자르기 작업
audio_path = "오디오 경로"
save_path = '파일 저장할 경로'
audio_list = os.listdir(audio_path)
for audio_name in audio_list:
if audio_name.endswith('.wav'): # 파일이 .wav인지 확인
audio_file = os.path.join(audio_path, audio_name) # 오디오 파일 불러오기
save_file = os.path.join(save_path, audio_name[:-4]) # 2
trim_audio_data(audio_file, save_file)
save_file = os.path.join(save_path, audio_name[:-4])부분에서 save_path에는 저장할 폴더의 경로가 저장되어 있고, audio_name[:-4]는 파일 이름에서 확장자를 제외한 부분을 나타냅니다. 두 부분을 합해서 분할된 오디오 파일을 저장할 경로를 만드는 부분입니다.
* 10초씩 잘라서 저장한 파일입니다.
5. api키 정의 및 언어설정
# API 엔드포인트 및 액세스 키 설정
openApiURL = "http://aiopen.etri.re.kr:8000/WiseASR/Recognition"
accessKey = "각자 받은 api"
# 언어 코드 설정
languageCode = "korean" # 한국어로 사용(원하는 데이터에 맞게 언어 바꾸기)
6. txt파일 -> csv파일로 바꾸기
6-1. text파일에 name 추가 및 확인
import pandas as pd
# 텍스트 파일 읽기
with open('each_10sec.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
# 데이터프레임 생성
data = {'name': lines}
file_name_csv = pd.DataFrame(data)
# CSV 파일로 저장
df.to_csv('each_10sec.csv', index=False)
* text파일 -> csv로 변환한 것
7. 10초 씩 자른 파일들 텍스트화 시키는 코드
import base64
import urllib3
import json
N = len(file_name_csv)
for i in range(N):
# WAV 파일 경로 및 언어 코드 설정
audioFilePath = file_name_csv['name'][i][:-1]+'.wav'
languageCode = "korean"
# WAV 파일을 base64로 인코딩
with open(audioFilePath, "rb") as file:
audioContents = base64.b64encode(file.read()).decode("utf-8")
# HTTP 요청 헤더 및 본문 설정
headers = {
"Authorization": accessKey,
"Content-Type": "application/json; charset=UTF-8"
}
requestJson = {
"argument": {
"language_code": languageCode,
"audio": audioContents
}
}
# HTTP 요청 보내기
http = urllib3.PoolManager()
response = http.request(
"POST",
openApiURL,
headers=headers,
body=json.dumps(requestJson)
)
# 응답 확인
print("[responseCode] " + str(response.status))
print("[responBody]")
print("===== 결과 확인 ====")
data = json.loads(response.data.decode("utf-8", errors='ignore'))
# 텍스트를 text_change파일에 text형식으로 쓰기
with open('galaxy_each_15minute.txt', 'w', encoding='utf-8') as f:
f.write(data['return_object']['recognized'])
print(data['return_object']['recognized'])
[output]
[responseCode] 200
[responBody]
===== 결과 확인 ====
교육 확실해.
[responseCode] 200
[responBody]
===== 결과 확인 ====
그 역시 그 역시도 혹시나
[responseCode] 200
[responBody]
===== 결과 확인 ====
와 같이 걸어가 볼래 반짝이는 은아 너무 손잡고 나와 같이 걸어가 볼래
[responseCode] 200
[responBody]
===== 결과 확인 ====
누가 살고 있나 아무도 몰라 그 너 뭐 있는지 누구도 몰라 다만 꿈
[responseCode] 200
[responBody]
===== 결과 확인 ====
명이 하려 한 무지개 너머 내 꿈 둥둥 떠나낼 거예요 TOP TOP
[responseCode] 200
[responBody]
===== 결과 확인 ====
HAPOP WHOP WEANE WHODE YEANE YEAHEY YOU YEYEANE YEYEANE YEYEANE YEANE YEANE YE YEANE YEANE YEANE YEYE YOU
[responseCode] 200
[responBody]
===== 결과 확인 ====
하지 못한 내 고백 기저 하늘 이미 아기 반짝이고 있는 그날 수로 흘러갔을까 그
[responseCode] 200
[responBody]
===== 결과 확인 ====
뚜뚜 뚜뚜 뚜 뚜 뚜 뚜 뚜 뚜 뚜 뚜 뚜
[responseCode] 200
[responBody]
===== 결과 확인 ====
뚜뚜 뚜 뚜 뚜 뚜 뚜 뚜 뚜 그 없이도 없이 나와 같이
[responseCode] 200
[responBody]
===== 결과 확인 ====
이 날아 타 볼래 반짝이는 팅커벨의 가루가 너와 나를 비워 줄 거야 네
[responseCode] 200
[responBody]
===== 결과 확인 ====
누가 숨어 우리를 볼지도 몰라 널 위한 축제가 있을지도 몰라 다만 분명히 너
[responseCode] 200
[responBody]
===== 결과 확인 ====
너무 난 무난 게 너만 내 꿈둥둥 떠다닐 거예요 Tot to to to to tho tho tho tho tho the tho thero
[responseCode] 200
[responBody]
===== 결과 확인 ====
가 어디야 할까 말까 고민 끝에 한겨울 밤 몰래 간 도둑 눈의 숨이 멎어 도망가 버린
[responseCode] 200
[responBody]
===== 결과 확인 ====
오백 마디 저 하늘 이미 아기 반짝이고 있는 은하수로 흘러갔을까
[responseCode] 200
[responBody]
===== 결과 확인 ====
에 혹시 넌 혹시 나와 같이 걸어가 볼래
[responseCode] 200
[responBody]
===== 결과 확인 ====
반짝이는 은어 너무 숨잡고 나와 같이 걸어가 볼래 갤럭시 나
[responseCode] 200
[responBody]
===== 결과 확인 ====
혹시 나와 같이 나 같아 볼래 반짝이는 핑커맨 하루가 너와 나
[responseCode] 200
[responBody]
===== 결과 확인 ====
을 띄워 줄 거야
앞 게시물에서도 이야기했듯이 아직 수정할 부분이 많습니다. 맞는 가사도 있지만 맞지 않는 가사도 많아서 아직 수정이 많이 필요합니다. 나머지는 조금 더 찾아보고 공부해야겠네요ㅎㅎ