1. 제품
  2.   오디오
  3.   Python
  4.   Aubio
 
  

무료 파이썬 라이브러리를 통한 실시간 오디오 및 음악 분석

Aubio는 소프트웨어 개발자들이 피치 감지, 비트 트래킹, MFCC 추출 및 실시간 오디오 처리를 위해 사용하는 오픈 소스 파이썬 오디오 처리 라이브러리입니다.

Aubio란 무엇인가요?

현대 오디오 애플리케이션—예를 들어 음악 제작 도구, 오디오 분석 플랫폼, 실시간 사운드 처리 시스템—은 사운드 신호를 효율적으로 분석할 방법이 필요합니다. 이를 위한 인기 있는 오픈 소스 솔루션 중 하나는 Aubio이며, 오디오 신호에서 의미 있는 정보를 추출하도록 설계된 가볍지만 강력한 라이브러리입니다. Aubio는 오디오 신호에서 주석과 음악적 특징을 추출하도록 설계된 오픈 소스 라이브러리입니다. 이 라이브러리는 오디오 스트림을 분석하고 음표 시작점, 피치, 비트, 템포와 같은 이벤트를 식별합니다. 주로 C 언어로 작성되어 높은 성능을 제공하며 Linux, macOS, Windows에서 모두 작동합니다.

이 라이브러리는 사용이 매우 쉽고 실시간 오디오 처리를 지원합니다. 라이브러리는 드럼 타격이 발생하는 시점, 음악 음의 주파수, 트랙의 템포 또는 리듬과 같은 음악 이벤트를 감지할 수 있습니다. 오프라인(오디오 파일) 및 실시간 오디오 스트림 모두에서 작동할 수 있어 오디오 편집기, 디지털 악기 및 사운드 분석 도구에 적합합니다. 피치 감지, 비트 트래킹, 온셋 감지, MFCC 추출 및 실시간 신호 처리를 지원하여 개발자에게 고급 오디오 애플리케이션을 구축하는 데 필요한 도구를 제공합니다.

Previous Next

Aubio 시작하기

Aubio를 설치하는 가장 쉬운 방법은 Python Package Index (PyPI)를 이용하는 것입니다. 전체 설치를 위해 다음 명령을 사용하십시오.

Aubio를 사용하여 설치

pip install aubio 

GitHub에서 Aubio 설치

go get -u github.com/aubio/aubio.git 

Python을 통한 시작점 감지

Aubio 라이브러리의 가장 유용한 기능 중 하나는 온셋 감지이며, 이는 음악 음표나 사운드 이벤트가 시작되는 시점을 식별합니다. 온셋 감지는 새로운 사운드나 음악 음표가 시작되는 정확한 순간을 찾습니다. 음악에서 \"onset\"는 음의 어택을 의미하며, 드럼이 치여지는 순간, 기타가 뜯기는 순간, 혹은 목소리가 음절을 시작하는 순간을 말합니다. Aubio는 다양한 사용 사례에 맞는 여러 온셋 감지 알고리즘을 포함하고 있습니다. 다음 예제는 Python 코드를 사용하여 오디오 파일 내에서 온셋을 감지하는 방법을 보여줍니다.

Python 라이브러리를 사용하여 오디오 파일에서 시작점을 감지하는 방법?


import aubio
import numpy as np

# Configuration
filename = "audio_sample.wav"
win_s = 512        # FFT window size
hop_s = 256        # Hop size (frames between analysis windows)

# Open the audio source
src = aubio.source(filename, hop_size=hop_s)
samplerate = src.samplerate

# Create the onset detector (using 'complex' method)
onset = aubio.onset("complex", win_s, hop_s, samplerate)

# Set detection threshold (0.0 to 1.0 — lower = more sensitive)
onset.set_threshold(0.3)

onsets = []

# Process audio frame by frame
while True:
    samples, read = src()                # Read one hop of audio
    if onset(samples):                   # Returns True when onset detected
        print(f"Onset at: {onset.get_last_s():.3f} seconds")
        onsets.append(onset.get_last_s())
    if read < hop_s:                     # End of file
        break

print(f"\nTotal onsets detected: {len(onsets)}")

피치 감지 지원

피치 감지는 오픈 소스 Aubio 라이브러리의 또 다른 중요한 기능입니다. 피치 감지는 사운드의 기본 주파수(F0)를 식별하며, 본질적으로 \"이 음은 어떤 음악 음표인가?\"를 판단합니다. 이는 모든 튜너, 멜로디 추출기, 보컬 분석 도구의 핵심입니다. Aubio는 yin, yinfft, mcomb, fcomb 등 다양한 피치 감지 알고리즘을 지원합니다. 다음은 Python 애플리케이션 내에서 실시간 피치 감지를 수행하는 간단한 예제입니다.

Python을 사용하여 실시간 피치 감지를 수행하는 방법?


import aubio
import numpy as np

samplerate = 44100
win_s = 1024
hop_s = 512

pitch_o = aubio.pitch("yin", win_s, hop_s, samplerate)
pitch_o.set_unit("Hz")
pitch_o.set_silence(-40)

samples = np.random.rand(hop_s).astype(np.float32)
pitch = pitch_o(samples)

print("Detected pitch:", pitch)

Python을 통한 템포 추적 및 비트 감지

오픈 소스 Aubio 라이브러리는 파이썬 애플리케이션 내에서 음악의 리듬 패턴을 분석하고 비트와 템포를 감지할 수 있습니다. Aubio는 오디오를 듣고 탭을 맞추듯이 — BPM(분당 비트)으로 템포를 감지하고 개별 비트 타임스탬프를 정확히 찾아냅니다. 이는 DJ 소프트웨어부터 음악 동기화까지 모든 분야에 매우 유용합니다. 이 라이브러리는 오디오 신호의 스펙트럼 변화와 리듬 패턴을 분석하여 비트 위치를 결정합니다.

Python을 통한 사운드 파일 읽기 및 쓰기

파이썬 라이브러리 Aubio는 source와 sink 객체를 통해 오디오 파일 I/O를 래핑하며, 여러 형식(WAV, FLAC, OGG, libav 또는 ffmpeg를 통한 MP3)을 지원하고 샘플 레이트 변환을 자동으로 처리합니다. 아래는 소프트웨어 개발자가 파이썬 명령을 사용하여 오디오 파일을 읽고, 처리하고, 쓰는 방법을 보여주는 간단한 예제입니다.

Python을 사용하여 오디오 파일을 읽고, 처리하고, 쓰는 방법?


import aubio
import numpy as np

input_file = "input.wav"
output_file = "output.wav"
target_samplerate = 22050    # Downsample to 22.05 kHz
hop_s = 512

# Open source — resamples automatically to target samplerate
src = aubio.source(input_file, samplerate=target_samplerate, hop_size=hop_s)
actual_sr = src.samplerate
num_channels = src.channels

# Open sink for writing
sink = aubio.sink(output_file, actual_sr, channels=1)

while True:
    samples, read = src()

    # Write mono (sink expects 1D array for mono output)
    if num_channels > 1:
        mono = samples.reshape(num_channels, -1).mean(axis=0)
    else:
        mono = samples

    sink(mono[:read], read)

    if read < hop_s:
        break

del sink   # Flushes and closes file
print(f"Written {output_file} at {actual_sr} Hz")

 한국인