OnKey: 오픈소스 Mac 노래 연습 도구, 한 번 재생으로 어떤 노래의 멜로디도 학습

OnKey가 무엇이고 왜 Show HN 스레드가 주목했는가

OnKey는 Daniel Murrell이 만든 Mac용 무료 오픈소스 노래 연습 도구로, 재생하는 어떤 노래의 멜로디를 학습하고 라이브로 부르는 노래를 그에 맞춰 점수를 매깁니다. 저작권이 있는 음악을 직접 다루지 않고 노래방 채점 시스템의 피드백 부분만 제공합니다. 사용자의 음악 앱이 노래를 재생하면 OnKey가 듣습니다.

프로젝트는 github.com/dsmurrell/onkey에 있으며, 문서와 소리가 포함된 데모는 singonkey.app에서 볼 수 있습니다. Show HN 게시물은 169포인트와 72개의 댓글을 받았습니다. README의 태그라인은 "2026년부터 샤워 가수들을 스스로에게서 구하기"입니다.

이 도구를 피치 트레이너나 노래방 게임과 다르게 만드는 핵심 주장은 노래가 개발자에 의해 미리 차트화되거나 프로그래밍될 필요가 없다는 것입니다. OnKey는 Mac에서 한 번 듣는 것만으로 멜로디를 자체적으로 추출합니다.

OnKey가 노래를 학습하는 방법: 로컬에서 실행되는 4단계 파이프라인

OnKey에는 노래 데이터베이스가 없습니다. 노래가 끝나면 사용자의 Mac에서 해당 노래의 음표 차트를 만든 다음, 이후 재생할 때마다 재사용합니다.

파이프라인은 노래당 세 단계로 구성되며, 문서에서 OnKey가 크레딧을 제공하는 모델을 사용합니다.

  1. 보컬 분리. 모델이 반주에서 리드 보컬을 분리하며, 크레딧이 있는 구성 요소 중 UVR의 MDX-Net Karaoke 2를 사용합니다.
  2. 피치 추적. CREPE가 분리된 보컬에서 가수의 피치를 추적합니다.
  3. 음표 전사. GAME 음표 모델이 피치 트랙을 음표로 변환하여 음절당 한 마디를 생성합니다.

OnKey는 또한 CREPE, GAME, UVR의 MDX-Net Karaoke 2와 함께 wav2vec 2.0을 크레딧으로 제공합니다.

첫 번째 재생에서는 가사만 표시됩니다. 노래가 끝나면 학습됩니다. 이후 재생에서는 음표 막대가 재생 헤드 쪽으로 스크롤되고 라이브 피치가 그 위에 그려지며, 음표에 맞으면 녹색으로 표시됩니다. OnKey는 저장된 오프셋이 아닌 음악 자체에서 노래의 위치를 찾고, 목소리를 실시간으로 추적합니다.

채점은 README에 명시된 두 가지 점에서 의도적으로 관대합니다. 한 옥타브 낮게 부르는 것은 인정되고, 약간 늦는 것은 처벌되지 않습니다.

요구 사항 및 설치

OnKey는 macOS 14.2 이상을 실행하는 Apple Silicon Mac(M1 이상)이 필요합니다. Intel Mac용 빌드나 Windows 또는 Linux용 빌드는 없습니다.

설치는 최신 GitHub 릴리스에서 OnKey.dmg를 다운로드하고, 열고, OnKey를 응용 프로그램 폴더로 드래그하는 것입니다.

설정은 두 가지 권한과 한 가지 기본 설정을 요청합니다.

  • 마이크 접근, 가수를 듣기 위해.
  • 시스템 오디오 녹음, 음악 앱을 듣기 위해.
  • OnKey가 Spotify 및 Apple Music을 따라갈 수 있는지 여부. 듣기만을 선택하면 소리만으로 노래를 따라갑니다.

시작 가이드와 FAQ는 singonkey.app/docs에 게시되어 있습니다.

개인정보 보호: Mac에 남는 것과 정확히 나가는 것

OnKey는 듣는 음악을 저장하지 않습니다. 재생되는 동안 메모리에서 사운드를 분석합니다. 녹음과 학습된 노래는 Mac에 남습니다. README는 한 가지 주의 사항을 언급합니다. 스피커로 부른 테이크에는 음악이 일부 포함될 수 있지만, 헤드폰 테이크에는 포함되지 않습니다. 계정, 분석, 충돌 보고가 없습니다.

네 가지 유형의 외부 요청이 문서화되어 있습니다.

  • Shazam(Apple): 음악 앱 사운드의 짧은 서명으로, 오디오나 마이크가 아니며, 음악 앱이 재생 중인 것을 보고하지 않을 때 OnKey가 학습하지 않은 노래의 이름을 지정하는 데 사용됩니다.
  • LRCLIB: 가사를 가져오기 위해 노래의 아티스트, 제목, 앨범, 길이.
  • iTunes 검색 및 조회(Apple): 커버와 노래 길이를 위해 아티스트와 제목 또는 Shazam이 반환한 ID. 커버 이미지는 Spotify, Apple 또는 YouTube의 이미지 호스트에서 가져옵니다.
  • GitHub: 시작 1분 후와 하루에 한 번 새 버전 확인 및 업데이트 다운로드.

설정에는 Shazam 스위치, 가사 스위치, 업데이트 확인 스위치가 있습니다. 저장소 파일 scripts/release-hosts.txt는 릴리스가 접촉하는 모든 웹 주소를 나열합니다.

Hacker News 댓글 작성자 stevage는 이 점을 프로젝트의 뛰어난 품질로 꼽았습니다.

이런 수준의 투명성을 정말 감사하게 생각합니다. 이것이 표준이었으면 좋겠습니다.

공정 사용 설계: OnKey가 음악 라이선스를 우회하는 방법

OnKey는 음악을 제공, 스트리밍 또는 다운로드하지 않습니다. 이 단일 제약이 나머지 법적 설계를 가능하게 하며, README는 사용자가 따라야 할 규칙을 명시합니다.

  • 학습된 전사를 자신만 사용하세요. 각 노래 멜로디의 전사는 개인 연습용이며 공유하거나 게시해서는 안 됩니다.
  • 테이크를 게시하려면 내장 공유 기능을 사용하세요. 공유는 음악 없이 목소리와 피치 라인의 짧은 비디오를 생성하며, 가수는 해당 용도로 라이선스가 있는 Instagram의 자체 음악 라이브러리에서 노래를 추가할 수 있습니다. 헤드폰 테이크를 권장합니다. 음악이 재생되는 화면 녹화를 게시하지 마세요.
  • 바나 이벤트에는 라이선스가 있는 노래방 서비스를 사용하세요. OnKey의 가사는 무료 커뮤니티 데이터베이스에서 제공됩니다.
  • 음악을 저장하도록 OnKey를 수정하지 마세요.

권리 보유자는 hello@singonkey.app으로 연락할 수 있으며, LEGAL.md에 자세한 내용이 있습니다.

이것은 스레드에서 다른 빌더가 겪은 문제에 대한 직접적인 대응입니다. 댓글 작성자 fourneau는 정확히 이 이유로 중단된 노래방 채점 프로젝트를 설명했습니다.

제 노래방 프로젝트는 음악에 대한 권리를 확보할 수 없었고 오디오를 얻을 좋은 법적 해결책이 없는 것 같아서 중단되었습니다.

Fourneau는 또한 DAM 및 JoySound 노래방 시스템이 이미 두 가지 기능을 하는 채점 모드를 제공한다고 언급했습니다. 제 음정에 맞춰 노래하도록 돕고, 다른 가수와 익명으로 순위를 매기는 것입니다.

소스에서 빌드 및 릴리스 검증

OnKey는 MIT 라이선스이며, README는 유지 관리자의 바이너리를 신뢰하고 싶지 않은 사람을 위한 전체 소스 빌드를 문서화합니다. Xcode 명령줄 도구, Rust, Node, Python 3이 있는 Apple Silicon Mac이 필요합니다.

git clone https://github.com/dsmurrell/onkey && cd onkey
npm install && npm --prefix ui install
python3 -m venv .venv && .venv/bin/pip install -r scripts/requirements-models.txt
PYTHON=.venv/bin/python scripts/fetch-models.sh
npx tauri build

fetch-models.sh 단계는 모델을 다운로드하고 SHA-256으로 확인합니다. 자체 빌드된 복사본에서 한 가지 기능이 손실됩니다. 새 노래 이름을 묻기 위해 Shazam에 요청할 수 없습니다. 이는 유지 관리자의 Apple 서명이 필요하기 때문입니다. Spotify와 Apple Music은 재생 중인 것을 자체적으로 보고하므로 YouTube 재생 및 듣기 전용 모드에만 영향을 미칩니다.

공식 릴리스는 Murrell의 Apple Developer ID로 서명되고 Apple에서 공증받습니다. spctl -a -vv /Applications/OnKey.app은 설치된 앱에 서명한 사람을 보여줍니다.

라이선스의 상표 조건에 따라 수정된 버전은 OnKey라고 부르거나 해당 아이콘을 사용할 수 없으며, 코드를 기반으로 빌드하는 경우 저장소로 연결되는 크레딧을 제공하는 것이 좋습니다. CONTRIBUTING.md는 테스트와 릴리스 체크섬 확인 방법을 문서화하고, THIRD_PARTY_NOTICES.md는 전체 고지 및 라이선스 텍스트를 포함합니다.

댓글 작성자들이 칭찬한 점

스레드의 열정은 세 가지에 집중되었습니다. 아이디어, 노래 차트가 필요 없다는 사실, 개인정보 보호 문서의 투명성입니다.

댓글 작성자 wnissen은 노래에 개발자 지원이 필요하지 않은 점을 좋아했습니다.

정말 재미있는 아이디어네요! 노래가 개발자에 의해 프로그래밍될 필요가 없다는 점이 마음에 듭니다.

wnissen은 또한 리듬 게임의 Rock Band 시대와 비교했는데, 그 시대는 반드시 노래 실력을 향상시키지 않으면서 연습할 동기를 부여했으며, 상대적 음정 지각을 테스트하기 위해 themusiclab.org/quizzes/td의 Yale Music Lab 음정 지각 퀴즈를 가리켰습니다.

다른 반응은 실용적인 용도가 있는 사람들에게서 나왔습니다. infossgmllc는 합창단에 있는 딸이 확인해 볼 것이라고 했고, abktya는 하루 종일 노래하는 아내와 딸에게 적합할 것이라고 했으며, nopurpose는 외부 앱이 Safari 탭에서 YouTube와 상호 작용할 수 있다는 사실에 놀랐다고 언급했습니다.

댓글 작성자 bita_nidir는 Linux 및 바이올린 지원을 포함하여 20년 동안 개인 TODO 목록에 같은 프로젝트를 가지고 있었으며, 코드에 Apple Silicon 제약이 무엇인지 물어보고 풀 리퀘스트를 보내겠다고 제안했습니다.

스레드의 비판과 열린 질문

리소스 사용 및 Tauri 스택

가장 날카로운 기술적 비판은 댓글 작성자 viraptor에게서 나왔는데, 앱이 완전히 바이브 코딩되었다고 주장하고 네이티브 Swift 앱이 더 작고 매끄러울 수 있는데 왜 Tauri를 통해 웹뷰를 사용하는지 의문을 제기했습니다.

사람들은 쓰고 유지하기 쉽게 만들기 위해 electron/tauri/whatever를 사용했지만, 어차피 그냥 바이브하고 있다면 리소스를 존중하는 것으로 돌아갈 수 있을까요?

댓글 작성자는 아이디어가 마음에 들었고 과거에 비슷한 일을 하는 유료 앱을 사용한 적이 있다고 덧붙였습니다. 이것은 구현 선택에 대한 비판이지 코드가 작성된 방식에 대한 검증된 주장이 아닙니다.

플랫폼 제한: Apple Silicon 전용

OnKey는 M1 이상 Mac이 필요합니다. 댓글 작성자 mkesper는 Linux 버전을 요청했고, hungryhobbit는 Mac과 Linux가 이제 포팅을 고려할 만큼 충분히 유사하다고 지적하며 더 날카롭게 같은 요점을 제기했습니다.

댓글 작성자 busssard는 Mac 전용 제약을 우회할 수 있는 가능한 경로를 제안했습니다. om-intelligence.ch에 호스팅된 자신의 보컬 표기 프로젝트로, 노래를 부를 수 있는 표기로 변환하며, 그들의 관점에서 통합될 수 있습니다.

언어 지원

댓글 작성자 robofanatic은 OnKey가 모든 언어의 노래에서 작동하는지 아니면 영어만 지원하는지 물었습니다. README는 언어 지원을 직접 다루지 않습니다. 파이프라인은 가사가 아닌 분리된 보컬 오디오와 CREPE 피치 추적에 작동하며, 가사는 LRCLIB에서 가져옵니다.

피치, 음정, "음정 이탈"의 의미

댓글 작성자 TZubiri는 절대 주파수보다 상대적 음정이 더 중요하다고 주장했습니다.

음정을 정확히 맞추는 것이 더 중요하다고 생각합니다. 어떤 시작 주파수를 취해도 음정을 정확히 맞추면 주파수 자체가 완벽하지 않아도 맞게 들릴 것입니다. 반면에 이와 같은 주파수 기반 접근 방식을 사용하면 상대적 기준 대신 절대적 기준 프레임을 갖게 됩니다.

OnKey는 한 옥타브 낮게 부르는 것을 올바른 것으로 계산하여 부분적으로 이를 수용하지만, 표시는 추상적으로 음정 정확도를 점수화하는 대신 학습된 음표 위치와 피치를 비교합니다.

댓글 작성자 criddell은 용어 질문을 제기했습니다. 그들에게 "음정 이탈"은 목표 음표에 대해 샤프하거나 플랫한 것이 아니라 곡의 조성 밖의 음을 부르는 것을 의미합니다. 그들은 YouTube의 일부 트랙이 믹싱이나 마스터링 중에 속도가 빨라져 전체적으로 샤프하게 들리는 것 같다고 언급하며, 그것들이 음정 이탈로 간주될지 물었습니다.

교육학: 시각적 피드백이 듣기를 대체하는가?

리듬 학생들을 가르치는 댓글 작성자 sligbad는 시각적 피드백에 대한 의존에 대해 경고했습니다.

이런 종류의 도구가 도움이 될 수 있다고 생각하지만, 시각적 메트로놈에 대한 의존에서 벗어나야 하는 리듬 학생들을 많이 봤습니다. 어려움의 일부는 자신의 소리를 정말로 듣고 자신의 실수를 인지하는 법을 배우는 것입니다.

그들은 빌더와 사용자 모두를 겨냥한 경고를 덧붙였습니다. 연습 도구를 만들고 유지하는 데 시간을 보내는 것이 가장 중요한 것, 즉 더 많은 연습에서 벗어나지 않도록 하라는 것입니다.

댓글 작성자 enzoaguado는 노래가 단순히 올바른 음을 맞추는 것보다 훨씬 더 많다는 관련 범위 주장을 했으며, 호흡 관리, 어려운 노래에서 부상을 피하기 위한 발성 기술, 벨팅, 트왕, 헤드 보이스, 체스트 보이스, 보컬 프라이와 같은 기술, 운율과 리듬 훈련을 피치 스코어러가 다루지 않는 야심 찬 가수가 필요한 기술로 나열했습니다. 그들의 평가는 이런 도구가 좋은 진입점이자 노래가 무엇인지 맛보는 것이지만, 이러한 다른 측면을 다루거나 최소한 언급하는 것이 도움이 될 것이라는 것입니다.

기능 요청 및 답변되지 않은 질문

  • 게임화. 댓글 작성자 pheraph는 딸이 좋아할 것 같은 점수나 별 등급과 난이도를 결합한 것을 제안했습니다. OnKey는 이미 점수와 줄별 보고서를 생성하지만, 댓글은 그 위에 진행 레이어를 요청합니다.
  • 잘못 표시된 섹션 제외. 댓글 작성자 hensenjuang은 보컬 분리가 리드 멜로디 대신 백킹 보컬을 포착했을 때 섹션을 채점에서 제외할 수 있는지 물었습니다.
  • 악기 지원. 댓글 작성자 julianromano는 OnKey를 악기로 확장할 수 있는지 물었습니다.
  • 피치 감지 세부 사항. 댓글 작성자 HummingBirdGif는 피치 감지가 어떻게 구현되는지 물었습니다. README는 구성 요소 수준에서 CREPE를 피치 추적에, GAME 음표 모델을 음표 막대에 사용한다고 답합니다.

스레드가 표면화한 더 넓은 논쟁

앱 자체를 넘어 토론에는 두 가지 주제가 흘렀습니다.

첫째, AI 지원 앱 빌드에 대한 찬반 논쟁. 프로그래밍 배경과 기계 학습 박사 학위를 가진 댓글 작성자 drltaidev는 Claude Code가 할 수 있는 일에 감명받았고 이제 거의 직접 코드를 작성하지 않는다고 말하면서, 단점도 언급했습니다. 이제 모든 사람이 아이디어의 자신만의 버전을 만들 수 있고, 반드시 최고의 버전이 살아남는 것은 아닙니다. 그들은 또한 노래가 피치보다 훨씬 더 많은 것을 포함한다는 범위 비판에 동의했습니다.

둘째, 소프트웨어가 네트워크로 보내는 것을 정확히 명시하는 것의 가치. 스레드에서 가장 많은 업보트를 받은 반응은 기능 요청이 아니라 OnKey의 네 가지 외부 요청 유형 공개에 대한 감사였으며, 그것이 출시된 소프트웨어의 표준이 되기를 바란다는 것이었습니다.

Sources

관련