본 프로젝트는 진행중입니다.
아직 완료되지 않은 만큼, 수시로 내용의 업데이트가 있으며
내용 중 틀리거나 부족한 부분이 많을 수 있습니다.

Intro

나는 음악을 듣는 것을 좋아한다.
대학생때, 그리고 회사를 다니면서도 밴드 활동을 했었고,
밴드 음악 뿐만 아니라 영화 음악에 대해서도 많이 좋아해, 일주일에 한 뮤지션을 두고 탐구해보는 글을 쓰기도 했다.

최근 헤드폰을 사면서, 이퀄라이저를 통해 나에게 맞는 음악 성향을 찾는 데에 재미를 느꼈다.
하지만 곧 장애물을 하나 만났는데.. 스마트폰에서는 헤드폰용 앱이 있어 이퀄라이징이 가능했지만,
맥에는 자체 이퀄라이저 기능이 없는 데다가 시중에 나온 이퀄라이저 앱은 꽤 비싼(구독형) 가격때문에 구매가 망설여졌다.

그래서!
프로그래밍을 배워보는 김에, 이퀄라이저 앱을 직접 만들어보기로 했다.




Project Planning

서비스 및 프로젝트 드로잉

핵심 기능은 오디오 이퀄라이저이며, 맥에서는 App으로, 윈도우에서는 exe 파일로 구동이 되게끔 한다.
사용자가 편하게 사용할 수 있게끔 GUI 구현을 해야한다.
개발의 초점은 ‘핵심 기능만’ ‘화려하지 않고 기본에 집중한’ ‘내가 필요한 만큼의’ 프로그램을 만드는 것에 둔다.
이미 시중에 많은 기능을 가진 이퀄라이저 앱들이 있기 때문인데,
이퀄라이저를 필요로 하는 사용자 중에, 기본적인 이퀄라이저 이외에 더 많은 기능을 원하는 사용자는 유료 앱을 사용할 것이다.
너무 큰 그림을 그리기보다는 내가 소화할 수 있는 한도 내에서 진행해, 최소한의 결과물을 우선 내는 것을 목표로 한다.
또한 앱스토어 출시는 우선사항이 아니다. 개발 가능여부와 난이도 탐색이 먼저이기 때문.

  • 핵심 기능 : 오디오 이퀄라이저 (GUI로 조작 가능한)
  • 실행 방법 : 맥 용 실행 파일(App), 윈도우용 실행 파일(exe)
  • 개발 방향 : 핵심 기능만, 기본에 집중한, 파이썬을 우선 탐색, 빠른 개발 완료(결과물)

필요 기술 리스트

  • 개발 언어 : 파이썬
  • 오디오 관련 라이브러리 : liblosa
  • 하드웨어 제어 툴 : ???
  • 프로그램 배포 개발 툴 : pyinstaller
  • GUI 관련 툴 : tkinter, pyQt

진행 일정

단계 하위단계 단계 설명 마일스톤 날짜
1 - 프로젝트 플래닝    
  1 시중 프로그램 탐색    
  2 필요 기술 탐색    
  3 프로젝트 플래닝 마일스톤  
2 - 백엔드 개발    
  1 오디오 이퀄라이저 개발    
3 - GUI 개발    
  1 GUI 개발    
3 - 프로그램 배포 개발    
  1 프로그램 배포 개발    
To-Do 완료 여부 기한
시중 프로그램 설치 후 사용    




탐색 : 필요 기술, 시중 프로그램 탐색

필요 기술 탐색

  • 오디오 : librosa
    https://librosa.org/doc/latest/index.html
    librosa 패키지는 파이썬에서 오디오를 다루는 패키지 중 가장 유명한 것.
    이 패키지로 이퀄라이저를 만들 수 있는지는 뜯어보면서 다시 살펴봐야 한다.
    2023-01-24 : librosa는 음원파일에 대한 분석, 편집에 대한 라이브러리로 보인다.

  • 오디오 : PyAudio
    introduce : https://people.csail.mit.edu/hubert/pyaudio/
    doc : https://people.csail.mit.edu/hubert/pyaudio/docs/
    PyAudio를 이용한 EQ project : https://github.com/Jayu8/Audio-Equalizer-/blob/master/Final.py
    PortAudio 라이브러리를 파이썬을 이용해 사용할 수 있게 해주는 라이브러리.
    PortAudio는 cross-platform audio I/O(인풋 - 아웃풋) 라이브러리이다.
    음원파일 재생과 녹음 등을 지원한다.
    아마 이 라이브러리를 이용하게 될 것 같은데.. 국문 자료는 많지 않은 이유로
    영문 자료 탐색 혹은 PortAudio 라이브러리에 대한 공부가 필요해 보인다.

  • 프로그램 배포 : pyinstaller
    https://pyinstaller.org/en/stable/
    https://wikidocs.net/133214
    파이썬으로 프로그램을 배포하는 패키지로는 pyinstaller를 선택했다.
    국문으로 된 자료를 가장 많이 찾을 수 있는 패키지이기 때문..
    또한, 파이썬 및 C로 하드웨어 제어가 힘들 경우 Xcode로의 개발 및 배포도 염두에 둔다.

  • GUI : tkinter, pyQt
    tkinter : https://docs.python.org/3/library/tkinter.html
    pyQt : https://riverbankcomputing.com/software/pyqt/
    GUI 프로그램 중에서는 두 가지를 두고 살펴볼 예정이다.
    tkinter 시작해보기 : https://wikidocs.net/132610

  • 하드웨어 제어 : ????
    파이썬은 시스템과 밀접한 영역의 프로그래밍에는 적절하지 않다고 한다.
    앞으로 더 알아보겠지만, 파이썬으로 불가능할 경우 C언어 혹은 Xcode로의 개발을 염두에 두고 있다.

  • [ ] 풀스택 : swift
    오디오 이퀄라이저 선행 개발
    하드웨어 제어부터 App 배포까지 한 번에, 쉽게 할 수 있는 개발 환경.
    사용해보지 않았다는 부담감과 무거운 Xcode가 단점으로 꼽히지만,
    앞서 꼽은 장점들이 있어, 가장 적합한 개발 환경으로 보인다.
    그리고 UI쪽이 Pynecone과 유사하여 적응도 괜찮을 것 같다.
    그리고.. 2017년 사놨던 (왜 사놨지?) swift 책도 있어 도움을 받을 수 있을 듯.

시중 프로그램 탐색

이름 기술 가격 개발 언어
Boom2 31밴드 이퀄라이저 \n 볼륨 부스터 \n 오디오 이펙트 \n 스테레오 와이드닝 \n 샘플레이트 컨트롤 \n 오디오 파일 부스트 \n ios와 연동해 원격 제어 1년 프리미엄 팩 : 22,500원  
eqMAC   오픈소스, 프로 요금 Driver : Apple’s Null Audio Server Driver Plug-in \n APP : Swift + AVAudioEngine API \n UI : Angular + TypeScript

Futhermore Action

개발 일지

  • 2023-01-24
  • 프로젝트 돌입 전 프로젝트 플래닝 (찍먹)
  • 필요 기술 탐색 (찍먹)
    필요 기술들에 대해 고민해보고, 이를 충족시켜줄 툴(패키지) 탐색
    librosa보다는 pyaudio 라이브러리를 먼저 살펴보는 게 낫겠다는 판단.
  • 시중 프로그램 탐색 (찍먹)
    시중 프로그램들에 대한 소개자료 확인, 사용 후기 확인
    시중 프로그램 탐색하다보니 욕심이 생긴다.. 떨쳐내고 ‘참고용’으로만 보자
  • 느낀 점
    (1) 영어공부를 열심히 해야겠다는 생각. 대부분의 자료가 영어다..
  • 2023-01-25
  • pyaudio 라이브러리 설치 및 사용해보기
  • 2023-01-26
  • pyaudio 파악
  • pyaudio 라이브러리를 이용한 realtime volume-spectrum 구현
  • 공부 내용 포스트

Reference

librosa doc : https://librosa.org/doc/latest/index.html
PyAudio : https://people.csail.mit.edu/hubert/pyaudio/
pyinstaller doc : https://pyinstaller.org/en/stable/
tkinter doc : https://docs.python.org/3/library/tkinter.html
pyQt doc : https://riverbankcomputing.com/software/pyqt/

파이썬으로 적합한 개발 영역 : https://wikidocs.net/7
파이썬으로 하드웨어 개발 적합? : https://www.dogdrip.net/216486577
파이썬으로 이퀄라이저 코딩? : https://www.quora.com/How-do-I-build-a-code-for-a-music-equalizer-in-Python
pyaudio를 이용한 실시간 푸리에 변환 https://www.youtube.com/watch?v=430lZ_lxa7Q