Audio FingerPrint em Python

Audio  Fingerprint é o ato de reconhecer um determinado audio dentro de um amplo número de sons…

Este conceito é utilizado pelo Shazam, que tem o poder de lhe retornar o nome de uma música com uma pequena amostra a partir de qualquer pedaço de uma canção.

Ao ler um post escrito por Roy Van Rijn  decidi tentar escrever algo semelhante seguindo todos os passos descrito em seu blog.

Aproveitei um pedaço de um projeto antigo  esteganografia-spectrograma-em-arquivos-de-audio reescrevi minha função para visualizar spectrogramas para melhor se adaptar ao novo código, para testar o novo spectrograma peguei dois arquivos fract.mp3 e mandel.mp3 eles podem ser encontrados neste site.

Primeiro converti os dois arquivos em .WAV os deixando em Mono, o mpg123 me ajudou neste trabalho de coversão!

E aqui esta os resultados do meu Spectrograma:

Para o Mandel.wav


E agora o fract.wav

Legal minha função para mostrar o Spectograma funciona perfeitamente!

Vamos agora para o próximo passo descrito por Roy Van Rijn, encontrar as maiores frequencias dentro de cada tempo de uma música.

Com esta etapa concluida eu consigo montar uma “Constelation Map” contendo os maiores pontos (frequencias) dentro de um spectrograma, para demonstrar eu plotei o resultado da música inteira “Rihanna feat David Guetta – Whos That Chick(Radio Edit)”

Resultado mostrando a “Constelation Map” para a música Rihanna feat David Guetta – Whos That Chick(Radio Edit):

Todos os pontos em vermelho são onde encontrei as maiores frequencias correspondentes a cada tempo dentro da canção!

O proximo passo é indexar estes valores dentro de um arquivo .txt por exemplo!

Em meu arquivo .txt tenho:

[142, 393, 578, 1802]
[71, 378, 400, 1725]
[52, 204, 406, 753]
[51, 205, 425, 773]
[137, 392, 697, 833]
[140, 201, 660, 773]
[53, 300, 666, 776]
[51, 342, 497, 701]
[50, 200, 414, 731]
[57, 367, 697, 833]
[85, 223, 690, 783]
[55, 234, 697, 845]
[50, 204, 403, 773]
[121, 238, 571, 714]
[52, 370, 544, 721]
[132, 325, 463, 794]
[164, 226, 515, 712]

.

.

.

Indexei cerca de 1000 canções eu precisei converter todas para .wav sempre em mono!

Lol após isso é importante colocar todos estes valores dentro de uma grande hash table para uma melhor performace.

E vamos ao grande teste pegar um pedaço de qualquer canção indexada e ver se conseguimos o retorno correto !

Vamos tentar 18 segundos de áudio bem sujo e ver o resultado!

Primeiro tentei este pedaço Chick_noise2.wav

Ual funciona !

O som está bem degradado e sujo, decidi pegar um som gravado do microfone de meu smart phone quando estava dentro de um shopping escutando um som ambiente, ajustei para obter os acertos comparando menos frequencias pois o áudio estava deplorável a gravação é esta Clipe som 03.wav

Resultado:

Funcionou !

Vamos tentar outra música também gravada do microphone de meu smart phone dentro do shopping Clipe som 06.wav

Resultado:

Funcionou novamente!

Estas demonstrações são de arquivos com áudio bem degradados e sujos, podemos perceber que em todas elas temos um grande nível de ruido e mesmo assim funciona!

Um agradecimento especial ao Roy que postou em seu blog todos os passos para este feito!

Eng Eder de Souza

About these ads
  1. Ron
    junho 4, 2011 às 7:41 am | #1

    Hey great post read it through Google Translate, is it possible to receive the source code please? :)

  2. tal bar
    junho 7, 2011 às 7:43 pm | #2

    Amazing!!!
    Could you please send me the code ..
    10x dude .

    tal2001@walla.co.il

  3. junho 12, 2011 às 11:13 pm | #3

    Please share a copy of the source code with me .. mahamovie@gmail.com

    Thanks!

  4. Therry
    junho 15, 2011 às 5:14 am | #4

    Great Job Dude ! Finally you create the music DNA !
    Can U share the source code with me too ?
    Thx ;)

  5. junho 15, 2011 às 8:51 am | #5

    Fala Eder, blza? Te conheço da Lista Asterisk Brasil… há algum tempo vc me ajudou a criar AGI em Java, etc…

    Estava lendo, parece que o autor do Roy Van Rjin teve alguns impecilhos com a fabricante do Shazam por postar o código no blog…

    Mas aqui é o Brasil e aqui não tem lei nem pra bandido, então tem como vc postar o seu código pra gnt?

    Estou tentando implementar o código em Java do Roy e têm dado certo! :)

  6. mars
    junho 15, 2011 às 11:58 am | #6

    hi

    can you help me?

    Im tryng make one audio accust-Id for my thesy

    Tks

  7. junho 24, 2011 às 6:46 am | #7

    That’s awesome job! May I get a copy of the source code? I want to make a duplicate audio files detector. I think this will work fine.
    Thank you very very much!
    windviki@gmail.com

  8. zuma
    julho 30, 2011 às 6:48 pm | #8

    Hello Ederwander,

    amazing work I’m trying to do the same, you could share with me your source code.

  9. Rodrigo M. Palheta
    agosto 26, 2011 às 12:51 pm | #9

    Sensacional!!! PARABÉNS!!!

  10. Jose
    outubro 14, 2011 às 9:37 pm | #10

    Alo Eder! Belos artigos!
    Pode enviar também pra mim seu código Python?
    Muito obrigado!

  11. dezembro 12, 2011 às 4:55 pm | #11

    Awesome. Would you be willing to share the source code? My email is adolfox@gmail.com.

    Thanks in advance :)

  12. andres
    abril 3, 2012 às 2:09 pm | #12

    Excelente trabalho! Eu poderia passar o código por favor?

  13. Sneha
    abril 16, 2012 às 5:55 am | #13

    Please mail me code as i am doinf project for sound comaprison i am not able to comapre the two sounds

  14. hana
    outubro 22, 2012 às 2:49 am | #14

    awesome job!…. i’ve been looking on how to do this in python. can you send me the source codes?
    hanani.yusof@gmail.com

    thanks :)

  15. nimol
    dezembro 1, 2012 às 6:58 am | #15

    All above is what i need. could u please send me that codes ? nimol.elixir@gmail.com
    thz, in advance :)

  16. Diogo
    abril 5, 2013 às 2:40 pm | #16

    Ola Eder, muito bom seu post! Poderia me enviar uma cópia do código para que eu possa estudar? Segue meu email: diogovilab@gmail.com
    Grato!

  17. abril 7, 2013 às 8:43 am | #17

    Hi! I’m doing a course work on comparation of audio fingerprint algorithms, can you, please, send me a copy of your code to mr.alinaki@gmail.com, please? Thank you!

  18. Alberto
    abril 25, 2013 às 8:06 am | #18

    Hi!! Really nice job!! Could you please share the source code? My email is rolimat@gmail.com I will so glad if you send me the code… Im working on the analysis of an accesibility open source project about sound recognisement for deaf people and this example could help us a lot.

    Thanks!!

  19. Mario
    maio 4, 2013 às 7:58 am | #19

    Hi!, I’m currently developing a similar system for an student project. I’ve seen the work of the Finish guy (if i’m not wrong), but I don’t have clear the matching process. Because I’ve got a full song and the same cropped and by looking to the fingerprints, It doesn’t match at all. Can you share the code, please? mariottf@hotmail.com

    Thanks in advance!

  1. Nenhum trackbacks ainda.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

Você está comentando usando sua conta WordPress.com. Sair / Mudar )

Imagem do Twitter

Você está comentando usando sua conta Twitter. Sair / Mudar )

Foto do Facebook

Você está comentando usando sua conta Facebook. Sair / Mudar )

Conectando a %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

%d bloggers like this: