[Audio] Python에서 Audio 불러오기

2024. 7. 15. 18:08Developers 공간 [Shorts]/Vision & Audio

728x90
반응형
<분류>
A. 수단
- OS/Platform/Tool : Linux, Kubernetes(k8s), Docker, AWS
- Package Manager : node.js, yarn, brew, 
- Compiler/Transpillar : React, Nvcc, gcc/g++, Babel, Flutter

- Module Bundler  : React, Webpack, Parcel

B. 언어
- C/C++, python, Javacsript, Typescript, Go-Lang, CUDA, Dart, HTML/CSS

C. 라이브러리 및 프레임워크 및 SDK
- OpenCV, OpenCL, FastAPI, PyTorch, Tensorflow, Nsight

 


1. What? (현상)

 

이번 글에서는 Python을 활용해 Audio를 불러오는 것을 정리하고자 합니다.

 

추가적으로 패키지에서 얻을 수 있는 정보들 중 활용가능했던 것을 보이겠습니다.


2. Why? (원인)

  • X

3. How? (해결책)

 

3가지 방법을 소개하겠습니다. path는 "path/to/file.mp3"이라고 가정하겠습니다.

 

1. Soundfile 활용

import soundfile as sf

# Version1
audio, samplerate = sf.read(path, samplerate=44100)

# Version2
audio_ob = sf.SoundFile(file)

samplerate=audio_ob.samplerate
channels=audio_ob.channels
subtype=audio_ob.subtype

** 불러진 audio는 [channels, samplerate*duration]으로 이루어져있습니다.

 

파일을 저장할 수도 있습니다.

sf.write('new_file.wav', audio, 44100)

 

2. librosa활용

import librosa

audio, samplerate =librosa.load(path, mono=False, sr=22050)

 

resample이나 torch로 변환도 가능합니다.

audio = librosa.resample(audio, orig_sr=samplerate, target_sr=44100)

import torch
audio_tensor = torch.from_numpy(audio)

 

duration이나 bpm도 얻을 수 있습니다.

duration = int(librosa.get_duration(y=audio, sr=samplerate))
minutes = int(duration/60)
seconds = duration%60

beat = librosa.beat.beat_track(y=audio, sr=samplerate)
bpm = beat[0][0]

 

 

3. pedalboard 활용

from pedalboard.io import AudioFile

with AudioFile(path) as f:
    audio=f.read(f.frames)
    samplerate=f.samplerate

 

resample이나 torch로 변환도 가능합니다.

with AudioFile(path).resampled_to(44_100) as f:
    audio=f.read(f.frames)
    samplerate=f.samplerate
    
import torch
audio_tensor=torch.from_numpy(audio)

 

파일을 저장할 수도 있습니다.

with AudioFile("new_file.wav", "w", samplerate=44100, num_channels=2) as f:
    f.write(audio)

https://librosa.org/doc/latest/generated/librosa.load.html

https://spotify.github.io/pedalboard/reference/pedalboard.io.html

https://python-soundfile.readthedocs.io/en/0.11.0/

728x90
반응형