-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Shazam?
Shazam은 2008년 나온 음성 인식 서비스이다. 현재 iOS에서는 시리, 단축어, 제어 센터, 앱을 통해 사용할 수 있다. 적당한 소음이 있더라도 짧은 시간 들려주기만 하면 어떤 곡인지 바로 알려주는 것이 아주 편리하기에 지금 들리는 음악이 무슨 음악인지 검색할 때 자주 사용하곤 한다.
Shazam은 일반적인 Sound Analysis와는 차이가 있는데, 기존 Sound Analysis는 음성을 classify하여 이를 말소리, 허밍, 웃음소리 등으로 분류하지만, shazam은 오디오를 인식하고 shazam의 catalog 또는 커스텀 catalog 안의 내용과 일치하는지 검사하는 방식으로 이루어진다.
Shazam Catalog
Shazam에는 catalog라는 것이 있는데, 기본적인 shazam catalog는 음악을 식별할 수 있는 기능을 제공한다. Shazam catalog를 이용하여 음악 검색을 하면 shazam 서버로 오디오가 전송되고 그에 해당하는 정보가 돌아오게 된다. 단, 서버로 오디오를 전송할 때 녹음된 정보 그대로를 전송하는 것이 아니라 손실된 정보를 전달하게 되는데, 이를 Signature라고 한다.
Signature를 사용하면 다음과 같은 이점을 가질 수 있다.
- 네트워크로 보내느 데이터를 대폭 감소시킬 수 있다.
signature는 다시 원본으로 복구할 수 없기 때문에 보안상의 강점을 가진다.
실제로 서버에 signature를 보내고 그에 해당하는 정보를 받아오기 때문에 녹음할 때에도 음악 원본이 아닌 signature를 녹음해도 해당하는 정보를 서버에서 제공받을 수 있다.
녹음하여 서버로 전송되는 signature를 Query signature이라고 하고 이것을 샤잠 카탈로그에 전달하면 reference signature와 비교하게 된다.
Catalog
앞서 설명한 signature들을 모아서 catalog라고 한다.
카탈로그는 개발자가 커스텀하는 것도 가능하다. 카탈로그를 커스텀하면 커스텀 메타 데이터를 추가할 수 있고, 이 커스텀 카탈로그는 클라우드가 아닌 앱에 저장이 된다.
App service enablement
ShazamKit을 앱에서 사용하기 위해서는 애플 디벨로퍼 포털에서 ShazamKit 앱 서비스를 활성화 해야한다. 다만, 커스텀 카탈로그를 만들어 사용하는 경우에는 활성화할 필요 없다.
Code
우리는 앞서 실제 음원이 signature란 것으로 변환되어 서버로 전송된다는 것을 알게되었다.
이 때 Session이라는 객체를 사용하게 되고, 샤잠 카탈로그의 결과는 Session delegate를 통해 받아올 수 있다.
Session을 활용하는 코드는 다음과 같다.
let session = SHSession()
session.delegate = self
let signatureGenerator = SHSignatureGenerator()
try signatureGenerator.append(buffer, at: nil)
let signature = signatureGenerator.signature()
session.match(signature)extension SongResultViewController: SHSessionDelegate {
public func session(_ session: SHSession, didFind match: SHMatch) {
guard let matchedMediaItem = match.mediaItems.first else { return }
DispatchQueue.main.async {
self.songView.titleLabel.text = matchedMediaItem.title
self.songView.artistLabel.text = matchedMediaItem.artist
}
}
}샤잠 카탈로그로 부터 받아올 수 있는 결과로는 Media Item, Matched Media Item이 있다.
- Media item : 음악과 관련한 정보 (제목, 아티스트, 앨범 아트 등)
- Matched media item : 매치와 관련한 정보 (어느 부분에서 매치가 되었는지, 주파수의 오차 등)



