-
음원 duration 구하는 방법Librosa 2021. 12. 6. 15:58
librosa를 이용해서 음원을 작업하다보면 종종 duration을 구해야 할 때가 있습니다.
librosa에서는 기본적으로 함수를 제공하기 때문에 별도의 계산없이 바로 구할 수 있습니다.
import librosa audio_path = "test.wav" sample_rate = 44100 mono = True (audio, sample_rate) = librosa.load(audio_path, sr=sample_rate, mono=mono) duration = librosa.get_duration(audio, sr=sample_rate) print(f"Audio Duration: {duration}") #### Audio Duration: 6.873106575963718
위의 계산은 복잡한 계산이 아니고 아주 간단한 계산식에 의해서도 구해질 수 있습니다.
sample rate는
"이산적인 신호를 만들기 위해 연속적 신호에서 얻어진 단위시간(초) 당 샘플링 횟수"
라고 정의되어 있습니다.
https://ko.wikipedia.org/wiki/%EC%83%98%ED%94%8C%EB%A7%81_%EC%86%8D%EB%8F%84
샘플링 속도 - 위키백과, 우리 모두의 백과사전
아날로그 신호(파란색)와 고정된 간격('샘플링 레이트')을 가진 표본화된 신호(빨간색) 샘플링 레이트(영어: sampling rate) 또는 샘플링 주파수(영어: sampling frequency)는 이산적(離散的)인 신호를 만들
ko.wikipedia.org
다시 말하자면, 1초의 간격 마다 sample_rate 만큼의 개수에 해당하는 데이터가 들어가 있다고 볼 수 있고
일반적인 표현으로는 그 음원의 "sample_rate * duration" 만큼의 개수에 해당하는
데이터가 들어가 있다고 생각하면 됩니다.
librosa는 기본적으로 data type이 numpy.array이므로
array.shape을 통해 음원 전체의 데이터 길이를 확인할 수 있습니다.
print(f"Audio Length: {audio.shape}") #### Audio Length: (303104,)
위에서 언급했듯이 음원 데이터 길이는 "sample_rate * duration"이란걸 아실겁니다.
따라서 음원의 duration은 전체 데이터 길이에 sample_rate를 나눠주면 구할 수 있습니다.
duration = audio.shape[0] / sample_rate print(f"Audio Length: {duration}") #### Audio Length: 6.873106575963718
처음에 librosa.get_duation() 함수에서 구한 값과 동일한 값임을 확인할 수 있습니다.
'Librosa' 카테고리의 다른 글
Librosa, Soundfile를 이용해서 음원 읽어오기, 저장하기 (1) 2021.12.06