Recientemente descubrí el GNSDK (Gracenote SDK) que parece proporcionar ejemplos en varios lenguajes de programación para reconocer muestras de música por tomar las huellas digitales y luego solicitar su base de datos de audio para obtener el artista correspondiente y el título de la canción.

Pero la documentación es horrible.

¿Cómo puedo, usando Python y el GNSDK, realizar un reconocimiento de un archivo de muestra de audio? No hay ejemplos o tutoriales en los documentos proporcionados.

Editar: realmente quiero usar el GNSDK con Python. No publiques nada sin relación, perderás tu tiempo.

6
Epoc 28 jun. 2016 a las 14:56

3 respuestas

La mejor respuesta

Terminé usando ACRCloud que funciona muy bien. Parece que todos los que quieren usar Gracenote recurren a ACRCloud por razones ... Ahora sé por qué.

Ejemplo de Python:

from acrcloud.recognizer import ACRCloudRecognizer

config = {
    'host': 'eu-west-1.api.acrcloud.com',
    'access_key': 'access key',
    'access_secret': 'secret key',
    'debug': True,
    'timeout': 10
}

acrcloud = ACRCloudRecognizer(config)

print(acrcloud.recognize_by_file('sample of a track.wav', 0))
5
Epoc 11 sep. 2016 a las 07:26

Las palabras clave son: Análisis del espectro de latidos y detección de ritmo.

Esta es una biblioteca Python bien conocida que puede contener una solución para su pregunta: https://github.com/aubio/aubio

También le recomiendo que consulte esta página para ver otras bibliotecas: https://wiki.python.org/moin/PythonInMusic

Por último, este proyecto es una solución más amigable para Python y una forma fácil de comenzar: https://github.com/librosa/librosa

Un ejemplo de Librosa para calcular el tempo (latidos por minuto) de la canción:

# Beat tracking example
from __future__ import print_function
import librosa

# 1. Get the file path to the included audio example
filename = librosa.util.example_audio_file()

# 2. Load the audio as a waveform `y`
#    Store the sampling rate as `sr`
y, sr = librosa.load(filename)

# 3. Run the default beat tracker
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)

print('Estimated tempo: {:.2f} beats per minute'.format(tempo))

# 4. Convert the frame indices of beat events into timestamps
beat_times = librosa.frames_to_time(beat_frames, sr=sr)

print('Saving output to beat_times.csv')
librosa.output.times_csv('beat_times.csv', beat_times)

Pero tengo que mencionar que este campo es un campo muy inmaduro en ciencias de la computación y cada nuevo documento surge para eso. Por lo tanto, será útil para usted si también sigue a los académicos para descubrimientos recientes.

ADICIÓN:

Web API Wrappers mencionados en los documentos oficiales de Gracenote: https://developer.gracenote.com/web-api#python

Para Python:

https://github.com/cweichen/pygn

Pero como puede ver, este contenedor no está bien documentado e inmaduro. Por eso te sugiero que uses este contenedor Ruby en lugar de Python;

Para Ruby:

https://github.com/JDiPierro/tmsapi

require 'tmsapi'

# Create Instace of the API
tms = TMSAPI::API.new :api_key => 'API_KEY_HERE'

# Get all movie showtimes for Austin Texas
movie_showings = tms.movies.theatres.showings({ :zip => "78701" })

# Print out the movie name, theatre name, and date/time of the showing.
movie_showings.each do |movie|
  movie.showtimes.each do |showing|
    puts "#{movie.title} is playing at '#{showing.theatre.name}' at #{showing.date_time}."
  end
end

# 12 Years a Slave is playing at 'Violet Crown Cinema' at 2013-12-23T12:45.
# A Christmas Story is playing at 'Alamo Drafthouse at the Ritz' at 2013-12-23T16:00.
# American Hustle is playing at 'Violet Crown Cinema' at 2013-12-23T11:00.
# American Hustle is playing at 'Violet Crown Cinema' at 2013-12-23T13:40.
# American Hustle is playing at 'Violet Crown Cinema' at 2013-12-23T16:20.
# American Hustle is playing at 'Violet Crown Cinema' at 2013-12-23T19:00.
# American Hustle is playing at 'Violet Crown Cinema' at 2013-12-23T21:40.

Si no se siente cómodo con Ruby o Ruby on Rails, entonces la única opción es desarrollar su propio envoltorio de Python.

3
mertyildiran 28 jun. 2016 a las 17:52

Simplemente leyendo su pregunta principal y debido a que no hay ejemplos o tutoriales para GNSDK, intente buscar otras opciones,
para uno:

dejavu

Huella digital de audio y algoritmo de reconocimiento implementado en Python, vea la explicación aquí:

Dejavu puede memorizar el audio al escucharlo una vez y tomar las huellas digitales. Luego, al reproducir una canción y grabar la entrada del micrófono, Dejavu intenta hacer coincidir el audio con las huellas dactilares contenidas en la base de datos, devolviendo la canción que se está reproduciendo.

https://github.com/worldveil/dejavu

Parece correcta

1
Rolf of Saxony 28 jun. 2016 a las 18:13