<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>단소 on 얼쑤 · Team Edo</title><link>https://team-edo.github.io/tags/%EB%8B%A8%EC%86%8C/</link><description>Recent content in 단소 on 얼쑤 · Team Edo</description><generator>Hugo</generator><language>ko-kr</language><lastBuildDate>Thu, 05 Nov 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://team-edo.github.io/tags/%EB%8B%A8%EC%86%8C/index.xml" rel="self" type="application/rss+xml"/><item><title>틀린 음을 불었는데, AI는 왜 맞다고 했을까?</title><link>https://team-edo.github.io/posts/2026/11/octave-error-in-music-scoring/</link><pubDate>Thu, 05 Nov 2026 00:00:00 +0000</pubDate><guid>https://team-edo.github.io/posts/2026/11/octave-error-in-music-scoring/</guid><description>&lt;p>단소를 연습할 때 누군가 옆에서 악보를 봐준다면 어떨까요? 어느 음을 잘못 불었는지, 박자는 어디서 빨라졌는지 알려주는 사람 말입니다.&lt;/p>
&lt;p>얼쑤에서 만들던 채점 기능도 비슷한 역할을 합니다. 단소 연주를 녹음하면 악보와 비교해서 음정과 박자를 알려줍니다.&lt;/p>
&lt;p>이 기능을 시험하면서 일부러 틀린 음을 넣었습니다. 악보에 적힌 음보다 한 옥타브 높은 음이었습니다.&lt;/p>
&lt;p>그런데 채점 결과는 정답이었습니다.&lt;/p>
&lt;p>더 이상한 점도 있었습니다. 같은 높이의 음을 따로 들려주면 제대로 찾았는데, 다른 음 사이에 짧게 넣으면 놓친 겁니다.&lt;/p></description></item><item><title>−20센트 합성음에서 나온 −15센트 추정</title><link>https://team-edo.github.io/posts/2026/10/pyin-tuning-resolution/</link><pubDate>Wed, 28 Oct 2026 00:00:00 +0900</pubDate><guid>https://team-edo.github.io/posts/2026/10/pyin-tuning-resolution/</guid><description>&lt;p>얼쑤에서 백엔드의 분석 요청을 받아 음표별 판정을 돌려주는 API를 구현했습니다. 검증할 때 악보의 모든 음보다 &lt;strong>20센트 낮게&lt;/strong> 만든 합성음을 넣었습니다. 반음이 100센트이므로, 같은 간격으로 음높이만 조금 낮춘 입력입니다.&lt;/p>
&lt;p>분석은 HTTP 200과 &lt;code>DONE&lt;/code>으로 끝났습니다. 그런데 응답의 조율 보정값 &lt;code>tuningOffsetCent&lt;/code>는 &lt;strong>−15.0센트&lt;/strong>였습니다. 입력을 만들 때 정한 값과 채점기가 실제로 적용한 값 사이에 5센트 차이가 있었습니다.&lt;/p>
&lt;h2 id="보정값이-만들어지는-과정">pYIN 추정에서 조율 보정까지&lt;/h2>
&lt;p>로컬에서 실제 분석 API를 띄우고, 저장소 역할을 하는 로컬 HTTP 서버가 합성 M4A를 보내도록 했습니다. API는 오디오를 16kHz 모노로 디코딩한 뒤 pYIN으로 짧은 구간마다 기본 주파수를 추정합니다. 당시 요청에는 기준음이 없어서 황의 기준 주파수를 311.13Hz로 두고, 악보의 각 음이 거기서 몇 반음 떨어져 있는지로 목표 음높이를 구했습니다.&lt;/p></description></item></channel></rss>