Module: Shazamio

Defined in:
lib/shazamio.rb,
lib/shazamio/fft.rb,
lib/shazamio/urls.rb,
lib/shazamio/enums.rb,
lib/shazamio/shazam.rb,
lib/shazamio/request.rb,
lib/shazamio/version.rb,
lib/shazamio/algorithm.rb,
lib/shazamio/converter.rb,
lib/shazamio/serialize.rb,
lib/shazamio/signature.rb,
lib/shazamio/exceptions.rb,
lib/shazamio/user_agent.rb,
lib/shazamio/http_client.rb,
lib/shazamio/audio_loader.rb

Defined Under Namespace

Modules: AudioLoader, Converter, Device, FFT, FrequencyBand, Request, SampleRate, Serialize, ShazamUrl Classes: BadMethod, DecodedMessage, Error, FailedDecodeJson, FrequencyPeak, HTTPClient, RingBuffer, Shazam, SignatureGenerator

Constant Summary collapse

VERSION =
"0.1.0"
HANNING_MATRIX =

2048 values, trims the leading/trailing zero

hanning(2050)[1..-2].freeze
DATA_URI_PREFIX =
"data:audio/vnd.shazam.sig;base64,"
USER_AGENTS =

A pool of realistic desktop/mobile User-Agent strings. A random one is attached to every outgoing request, mirroring the Python client's behaviour of rotating user agents.

[
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15",
  "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
  "Mozilla/5.0 (iPhone; CPU iPhone OS 17_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Mobile/15E148 Safari/604.1",
  "Mozilla/5.0 (iPad; CPU OS 17_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Mobile/15E148 Safari/604.1",
  "Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36",
  "Mozilla/5.0 (Linux; Android 13; SM-S911B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Mobile Safari/537.36",
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Edg/124.0.0.0 Safari/537.36",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
  "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:125.0) Gecko/20100101 Firefox/125.0",
  "Mozilla/5.0 (Windows NT 11.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
  "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6.1 Safari/605.1.15",
  "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
  "Mozilla/5.0 (Linux; Android 14; SM-A536E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 OPR/108.0.0.0",
  "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko",
  "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
].freeze

Class Method Summary collapse

Class Method Details

.hanning(size) ⇒ Object

Precomputed Hanning window (matches numpy's np.hanning(2050)[1:-1]).



36
37
38
39
40
41
# File 'lib/shazamio/algorithm.rb', line 36

def self.hanning(size)
  return [] if size <= 0
  return [1.0] if size == 1

  Array.new(size) { |n| 0.5 - 0.5 * Math.cos(2 * Math::PI * n / (size - 1)) }
end