install.packages('tuneR')
library(tuneR)
# 데이터 업로드
setwd('c:\\data')
audio<-readWave('sohot.wav')
# 노래 플레이
play(audio)
# 노래 데이터 출력
head(audio@left,1000)
# 중간 데이터가져오기
audio_length<- length(audio@left)
a<- audio_length/2 -500
b<-audio_length/2 +499
m_data <-audio@left[a:b]
c<-head(m_data,100)
# 시각화하기
plot(c)
설명: 그래프만 봐도 정상 심장소리와 질병 심장소리가 구분이 됩니다. 이런 심장 소리 데이터를 기계학습 시키면 수십년 경력의 의료진도 놓칠수 있는 부분을 찾아내는 코드를 만들어낼 수 가 있는겁니다.
문제3. 소리 데이터를 전처리하는 방법 이미지 ---> cv2.imread ----> 숫자 -------------> 머신러닝 알고리즘 소리 ---> librosa -----> 숫자 -------------> 머신러닝 알고리즘 소리를 단순히 숫자로 변환만 하면되는게 아니라 다음의 작업을 해줘야합니다.
아래 그림 설명: 햇빛을 프리즘에 통과시키면 일곱 색깔 무지개로 나누어지는 것 처럼 소리도 푸리에의 변환을 통해서 주파수 순으로 펼쳐놓을 수 있음 (이른 스펙트럼)
문법 4. 소리를 주파수 스펙트럼 프리즘에 넣어서 주파수 스펙트럼 만들기 소리 --> 숫자(소리증폭) --> 주파수 스팩트럼 프리즘 --> 주파수 스팩트럼
1. mp3 -> wav로 변환 2. wav 파일을 크기를 작게 잘라냄 3. wav를 주파수 스펙트럼으로 변환 4. 변환한 숫자를 기계학습 시키기 <--하이퍼 파라미터를 조정해서 정확도를 높임
#실습1. mp3 파일을 wav 로 변환하기
공유폴더 \\192.168.19.14
install.packages("tuneR")
install.packages("av")
library(tuneR)
library(av)
# 파일 경로 설정
mp3_file <- "c:\\data\\afterlike.mp3"
wav_file <- "c:\\data\\afterlike.wav"
# MP3 파일을 WAV 파일로 변환
av_audio_convert(mp3_file, wav_file)
# 변환된 파일을 확인
if (file.exists(wav_file)) {
cat("변환이 성공적으로 완료되었습니다:", wav_file, "\n")
} else {
cat("변환에 실패했습니다.\n")
}
#실습1. mp3 파일을 wav 로 변환하기
공유폴더 \\192.168.19.14
install.packages("tuneR")
install.packages("av")
library(tuneR)
library(av)
# 파일 경로 설정
mp3_file <- "c:\\data\\afterlike.mp3"
wav_file <- "c:\\data\\afterlike.wav"
# MP3 파일을 WAV 파일로 변환
av_audio_convert(mp3_file, wav_file)
# 변환된 파일을 확인
if (file.exists(wav_file)) {
cat("변환이 성공적으로 완료되었습니다:", wav_file, "\n")
} else {
cat("변환에 실패했습니다.\n")
}
#실습2. wav 파일을 크기를 작게 잘라냄 # 1. 앞부분만 잘라내기
# 필요한 패키지 설치 및 로드
install.packages("tuneR")
library(tuneR)
# 음성 파일을 읽어옴
file_path <- "afterlike.wav"
sample_wave <- readWave(file_path)
# 음성 신호와 샘플링 속도 추출
audio_samples <- sample_wave@left
sample_rate <- sample_wave@samp.rate
# 1분(60초)에 해당하는 샘플 수 계산
duration_sec <- 60 # 1분 = 60초
num_samples <- duration_sec * sample_rate
# 앞부분 1분의 음원만 잘라내기
if (num_samples > length(audio_samples)) {
stop("The file is shorter than 1 minute.")
}
trimmed_samples <- audio_samples[1:num_samples]
# 새로운 Wave 객체 생성
trimmed_wave <- Wave(left = trimmed_samples, samp.rate = sample_rate, bit = sample_wave@bit)
# 새로운 파일로 저장
writeWave(trimmed_wave, "afterlike_trimmed.wav")
# 결과 확인
cat("The first 1 minute of the audio has been trimmed and saved as 'afterlike_trimmed.wav'\n")
#실습3. 주파수 스펙트럼으로 시각화 하기
# 필요한 패키지 설치 및 로드
install.packages("tuneR")
install.packages("seewave")
library(tuneR)
library(seewave)
# 음성 파일을 읽어옴
sample_wave <- readWave("afterlike_trimmed.wav")
# 음성 신호와 샘플링 속도 추출
audio_samples <- sample_wave@left
sample_rate <- sample_wave@samp.rate
# 주파수 스펙트럼 계산 및 시각화
par(mfrow = c(1, 1)) # 그래프를 1x1 배치로 설정
spectro(audio_samples, fastdisp=TRUE, f = sample_rate, ovlp = 50, collevels = seq(-40, 0, 1))
audio_samples <-- 분석할 소리
fastdisp=TRUE <--- 빠른 디스플레이 모드를 사용. 그래프를 더 빠르게 랜더링하겠다.
f = sample_rate <--- 샘플링 주파수를 설정합니다.
ovlp = 50 <--- 오버랩을 50%겹치게해서 스펙트럼의 시간 해상도를 높이게 해줍니다.
collevels = seq(-40, 0, 1) <--- 색상 지정하기 -40 db ~ 0 db 까지 1db 간격으로 색상
레벨을 지정하겠다.
그래프 설명:
1. 가로축 : 시간 0 ~ 60초
2. 세로축 : 주파수 ( 0 khz ~ 20khz)
3. 색상 : 신호의 진폭입니다. 오른쪽에 있는게 색상눈금입니다.
빨간색이 가장 높은 진폭, 파란색이 가장 낮은 진폭, 중간 색상이 중간 진폭
** audio_samples → 분석할 소리 / fastdisp=TRUE → 빠른 디스플레이 모드를 사용. 그래프를 더 빠르게 랜더링 하겠다는 뜻. / f = sample_rate → 샘플링 주파수 설정 / ovlp = 50 → 오버랩을 50% 겹치게 해서 스펙트럼의 시간 해상도를 높이게 해줌. / collevels = seq(-40, 0, 1) → 색상 지정하는 것. - 40db ~ 0db 까지 1db 간격으로 색상 레벨을 지정하겠다는 뜻임.
** 가로축 → 시간 0~60초 / 세로축 → 주파수(0 khz ~ 20 khz) / 색상 → 신호의 진폭. 오른쪽에 있는 것이 색상 눈금이고 빨간색이 가장 높은 진폭, 파란색이 가장 낮은 진폭임.
문제140. 클래식 음악을 주파수 스팩트럼으로 그리시오 ! 이름을 그냥 쉽게 morning.mp3 로 변경합니다. #1. mp3 ---> wav #2. 1분만 잘라냅니다. #3. 주파수 스팩트럼을 그립니다.
install.packages("tuneR")
install.packages("av")
library(tuneR)
library(av)
# 파일 경로 설정
mp3_file <- "c:\\data\\morning.mp3"
wav_file <- "c:\\data\\morning.wav"
# MP3 파일을 WAV 파일로 변환
av_audio_convert(mp3_file, wav_file)
# 변환된 파일을 확인
if (file.exists(wav_file)) {
cat("변환이 성공적으로 완료되었습니다:", wav_file, "\n")
} else {
cat("변환에 실패했습니다.\n")
}
#실습2. wav 파일을 크기를 작게 잘라냄
# 1. 앞부분만 잘라내기
# 필요한 패키지 설치 및 로드
install.packages("tuneR")
library(tuneR)
# 음성 파일을 읽어옴
file_path <- "morning.wav"
sample_wave <- readWave(file_path)
# 음성 신호와 샘플링 속도 추출
audio_samples <- sample_wave@left
sample_rate <- sample_wave@samp.rate
# 1분(60초)에 해당하는 샘플 수 계산
duration_sec <- 60 # 1분 = 60초
num_samples <- duration_sec * sample_rate
# 앞부분 1분의 음원만 잘라내기
if (num_samples > length(audio_samples)) {
stop("The file is shorter than 1 minute.")
}
trimmed_samples <- audio_samples[1:num_samples]
# 새로운 Wave 객체 생성
trimmed_wave <- Wave(left = trimmed_samples, samp.rate = sample_rate, bit = sample_wave@bit)
# 새로운 파일로 저장
writeWave(trimmed_wave, "morning_trimmed.wav")
# 결과 확인
cat("The first 1 minute of the audio has been trimmed and saved as 'morning_trimmed.wav'\n")
#실습3. 주파수 스펙트럼으로 시각화 하기
# 필요한 패키지 설치 및 로드
install.packages("tuneR")
install.packages("seewave")
library(tuneR)
library(seewave)
# 음성 파일을 읽어옴
sample_wave <- readWave("morning_trimmed.wav")
# 음성 신호와 샘플링 속도 추출
audio_samples <- sample_wave@left
sample_rate <- sample_wave@samp.rate
# 주파수 스펙트럼 계산 및 시각화
par(mfrow = c(1, 1)) # 그래프를 1x1 배치로 설정
spectro(audio_samples, fastdisp=TRUE, f = sample_rate, ovlp = 50, collevels = seq(-40, 0, 1))
★ 마지막 문제 . 티라미수 케잌 노래 시각화하기
library(av)
library(tuneR)
library(seewave)
# MP3 파일을 WAV 파일로 변환
mp3_file <- "c:\\data\\tiramisu.mp3"
wav_file <- "c:\\data\\tiramisu.wav"
av_audio_convert(mp3_file, wav_file)
if (file.exists(wav_file)) {
cat("변환이 성공적으로 완료되었습니다:", wav_file, "\n")
} else {
cat("변환에 실패했습니다.\n")
}
# 크기를 앞부분만 잘라내기
file_path <- "tiramisu.wav"
sample_wave <- readWave(file_path)
audio_samples <- sample_wave@left
sample_rate <- sample_wave@samp.rate
duration_sec <- 60 # 1분 = 60초
num_samples <- duration_sec * sample_rate
if (num_samples > length(audio_samples)) {
stop("The file is shorter than 1 minute.")
}
trimmed_samples <- audio_samples[1:num_samples]
trimmed_wave <- Wave(left = trimmed_samples, samp.rate = sample_rate, bit = sample_wave@bit)
writeWave(trimmed_wave, "tiramisu_trimmed.wav")
cat("The first 1 minute of the audio has been trimmed and saved as 'DOfighting_trimmed.wav'\n")
# 주파수 스펙트럼으로 시각화
sample_wave <- readWave("tiramisu_trimmed.wav")
audio_samples <- sample_wave@left
sample_rate <- sample_wave@samp.rate
par(mfrow = c(1, 1)) # 그래프를 1x1 배치로 설정
spectro(audio_samples, fastdisp=TRUE, f = sample_rate, ovlp = 50, collevels = seq(-40, 0, 1))