Tambem sou iniciante mas gostaria de saber 2 coisas (uma complementará a outra). 1 - é possivel comparar dois áudios para saber se são iguais? 2 - é possivel comparar dois audios de tamanhos diferentes para encontrar semelhança entre eles, por exemplo, tenho um audio1 (que é o trecho de uma música) e quero comparar com outro audio2 (que é a musica toda) e saber se aquele audio1 é igual a algum trecho do audio2?
Perdoe-me pela enorme demora para responder! Tentarei responder as perguntas trazidas. 1. Sim, é possível compará-los, mas uma comparação feita de uma forma que costumamos chamar de "ingênua" dificilmente entregaria os resultados desejados. Por exemplo, uma forma ingênua de fazer isso seria simplesmente verificando se os dois sinais são, de fato, iguais, como em "signal1 == signal2". Porém, perceba que bastaria uma única amostra ter um valor sutilmente distinto para já resultar em "False" e, portanto, passar a informação potencialmente equivocada de que estamos lidando com sinais que nada têm a ver um com o outro, e isso não necessariamente é verdade. Para fazer isso de forma mais cautelosa, há muitas abordagens distintas. Nenhuma delas é considerada realmente simples, e todas elas se utilizam de técnicas que vão muito além do escopo desta breve videoaula. Existem várias técnicas que permitem que comparações assim sejam feitas, e podem ser técnicas que atuam com base em features temporais, frequenciais, tempo-frequenciais, perceptuais etc. Uma das formas, por exemplo, é com base na correlação cruzada entre os sinais, e outra forma seria comparando os valores de energia dos sinais para as diferentes regiões; estas são apenas algumas, mas há muitas outras formas, podendo até utilizar técnicas de aprendizado de máquina para isso, e podendo ter taxas de acerto bem mais chamativas, apesar de as técnicas também serem bem mais complexas. 2. Sim, isso é possível. Não é realmente necessário que os sinais tenham o mesmo tamanho para que seja possível compará-los. Ter diferentes tamanhos apenas exclui algumas das técnicas, que geralmente são mais simples e rudimentares. A maior parte das técnicas mais eficazes não usa apenas conhecimentos de processamento digital de sinais, mas também conhecimentos de aprendizado de máquina para isso, e essas técnicas não fazem o trabalho apenas comparando um trecho enorme a outro de uma enormidade ainda maior; em vez disso, é mais comum que as análises sejam automaticamente feitas em intervalos relativamente curtos, também chamados de "janelas", "segmentos" ou "Chunks", e com passos relativamente pequenos, para "varrer" uma ampla gama de possibilidades. Houve uma época em que se pensava que, quanto menor fosse a janela de comparação e quanto menor fosse o passo de análise, maior seriam as chances de encontrar similaridades entre os sinais, apesar de o tempo de processamento sofrer um severo aumento; porém, essa estratégia não necessariamente entrega o resultado desejado, pois essa análise, além de relativamente frágil, considera apenas características observáveis em intervalos curtos, e nem todas as características são observáveis em intervalos curtos; há características que dependem de intervalos relativamente longos para que se possa notar. Assim, se for feita uma análise exageradamente localizada, características mais amplas podem passar despercebidas. O contrário também é verdadeiro. Outra observação importante é o fato de que, tratando-se de áudio, pode ser altamente conveniente trabalhar com Mel-Spectrum em vez de apenas analisar o áudio no domínio do tempo, sobretudo em escala linear. Áudios tendem a ter uma enorme gama de características muito ricas no domínio da frequência, e é muito comum que sejam bem mais convenientemente trabalhadas na escala Mel, que faz um tipo de mapeamento que considera as diferentes regiões do espectro com base na intensidade com que o ouvido humano consegue perceber. Você pode notar isso, por exemplo, com a facilidade como nota a diferença entre sons de 400 Hz e 500 Hz, mas, ao mesmo tempo, com o quão difícil pode ser para você perceber a diferença entre sons de 14000 Hz e 14100 Hz, mesmo com a diferença sendo 100 Hz em ambos os casos. Isso ocorre justamente porque temos muito mais dificuldade para notarmos diferenças em altas frequências do que em baixas frequências, e a escala Mel ajuda a considerar isso nas avaliações. Enfim, como podemos perceber, é uma aplicação bem mais complexa do que talvez aparente, mas é também muito interessante! Agradeço por ter trazido essas dúvidas.
Agradeço a resposta, mesmo que depois de 1 ano, isso porque todo esse tempo tenho me dedicado em estudar Python a fundo para conseguir resolver essa questão que levantei.
Obrigado! Perdoe-me pela demora para responder, Olival! Sim, você pode fazer isso, e talvez até haja alguma maneira mais conveniente de fazer isso, mas, ao menos por agora, apenas uma forma não muito conveniente me vem à cabeça: restringindo o próprio array "data" quanto à região correspondente ao intervalo que você quiser ouvir, e isso será feito, em princípio, com base nos números das amostras, e não no instante de tempo; por isso a provável inconveniência. Para deixar um pouco mais conveniente, dado que é humanamente mais agradável poder definir em horas, minutos e segundos, o que você pode fazer é converter os instantes de tempo (de início e de fim do intervalo de tempo que desejar reproduzir) em segundos, e depois converter de segundos para número de amostras. Desta forma, você pode utilizar, por exemplo, a função "datetime.datetime.strptime()" para converter um timestamp do tipo "00:01:11", dado em horas:minutos:segundos, para segundos. Então, sabendo que o áudio utiliza uma determinada frequência de amostragem, que é dada em Hertz, ou se preferir, número de amostras por segundo, você pode calcular qual será a amostra correspondente a esse instante de tempo. Agora, caso você não precise ter o áudio completo importado para só reproduzir um intervalo, uma solução muito mais conveniente seria a de já importar apenas o intervalo de seu interesse. Para isso, você pode utilizar o argumento "offset", que define uma quantidade de tempo (em segundos) a ignorar desde o início do áudio, e o argumento "duration", que define a quantidade de tempo (em segundos) a considerar a partir do instante que deixa de ser ignorado pelo "offset". É bem mais simples assim; porém, você deixa de ter o sinal de áudio completo importado, e passa a ter apenas o intervalo definido. Outra coisa que você pode fazer, e que permitirá ter tanto o áudio completo quanto poder ouvir apenas o trecho desejado, é importar o áudio completo e registrá-lo em uma variável, então importar apenas o trecho desejado e armazená-lo em outra variável, possivelmente, que seja até mesmo temporária.
eu sou iniciante nessa coisa mais eu queria saber se e posivel a partir do espectrograma fazer uma condiçao para que quando o som chega a uma frequencia pre_definida, ele faz tal coisa como por exemplo o som chega a 2000Hz entao o programa reconheçe e toma tal decisao? deste ja agradeço...
Olá, gostaria de saber se é possível captar o som atravéz de um microfone e verificar a duração, e os Hz e depois fazer comparação entre essas variáveis toda vez que for utilizada. Poderia me ajudar nisso?
Obrigado! Perdoe-me pela enorme demora para responder. Acredito que uma boa forma de fazer isso seja por meio do módulo "pyaudio". Tem um exemplo bacana aqui: people.csail.mit.edu/hubert/pyaudio/#record-example Você pode modificá-lo conforme suas necessidades. Para que seja feito em tempo real, você fará um Stream que precisará fazer cautelosas escolhas de frequência de amostragem, bits de precisão e tamanho dos Chunks; afinal, caso seja feita uma escolha que resulte em um processamento incompatível com o Hardware utilizado, você poderá sofrer com latências altas e, dependendo do projeto, até mesmo com perdas de pacote.
Olá, jack! Beleza? Que eu saiba, esse módulo funciona apenas com arquivos que já estejam em seu computador. Mas eu gostei da sua pergunta e deixarei anotada a ideia de explorar o uso de áudio via Internet (possivelmente, em Streaming) em algum futuro vídeo.
oi spadini , tudo bem ? estou passando por umas dificuldades sera q vc pode da uma olhado no seu face por favor ? mandei minha duvida la , desde ja obrigado
Cara, sensacional, muito obrigado pela aula !! Adorei conhecer esses comandos e realizar essas ações com áudios no python !
Tambem sou iniciante mas gostaria de saber 2 coisas (uma complementará a outra).
1 - é possivel comparar dois áudios para saber se são iguais?
2 - é possivel comparar dois audios de tamanhos diferentes para encontrar semelhança entre eles, por exemplo, tenho um audio1 (que é o trecho de uma música) e quero comparar com outro audio2 (que é a musica toda) e saber se aquele audio1 é igual a algum trecho do audio2?
Também tenho essa dúvida, valeu pelo vídeo!
Perdoe-me pela enorme demora para responder!
Tentarei responder as perguntas trazidas.
1. Sim, é possível compará-los, mas uma comparação feita de uma forma que costumamos chamar de "ingênua" dificilmente entregaria os resultados desejados.
Por exemplo, uma forma ingênua de fazer isso seria simplesmente verificando se os dois sinais são, de fato, iguais, como em "signal1 == signal2". Porém, perceba que bastaria uma única amostra ter um valor sutilmente distinto para já resultar em "False" e, portanto, passar a informação potencialmente equivocada de que estamos lidando com sinais que nada têm a ver um com o outro, e isso não necessariamente é verdade.
Para fazer isso de forma mais cautelosa, há muitas abordagens distintas. Nenhuma delas é considerada realmente simples, e todas elas se utilizam de técnicas que vão muito além do escopo desta breve videoaula.
Existem várias técnicas que permitem que comparações assim sejam feitas, e podem ser técnicas que atuam com base em features temporais, frequenciais, tempo-frequenciais, perceptuais etc. Uma das formas, por exemplo, é com base na correlação cruzada entre os sinais, e outra forma seria comparando os valores de energia dos sinais para as diferentes regiões; estas são apenas algumas, mas há muitas outras formas, podendo até utilizar técnicas de aprendizado de máquina para isso, e podendo ter taxas de acerto bem mais chamativas, apesar de as técnicas também serem bem mais complexas.
2. Sim, isso é possível. Não é realmente necessário que os sinais tenham o mesmo tamanho para que seja possível compará-los. Ter diferentes tamanhos apenas exclui algumas das técnicas, que geralmente são mais simples e rudimentares.
A maior parte das técnicas mais eficazes não usa apenas conhecimentos de processamento digital de sinais, mas também conhecimentos de aprendizado de máquina para isso, e essas técnicas não fazem o trabalho apenas comparando um trecho enorme a outro de uma enormidade ainda maior; em vez disso, é mais comum que as análises sejam automaticamente feitas em intervalos relativamente curtos, também chamados de "janelas", "segmentos" ou "Chunks", e com passos relativamente pequenos, para "varrer" uma ampla gama de possibilidades.
Houve uma época em que se pensava que, quanto menor fosse a janela de comparação e quanto menor fosse o passo de análise, maior seriam as chances de encontrar similaridades entre os sinais, apesar de o tempo de processamento sofrer um severo aumento; porém, essa estratégia não necessariamente entrega o resultado desejado, pois essa análise, além de relativamente frágil, considera apenas características observáveis em intervalos curtos, e nem todas as características são observáveis em intervalos curtos; há características que dependem de intervalos relativamente longos para que se possa notar. Assim, se for feita uma análise exageradamente localizada, características mais amplas podem passar despercebidas. O contrário também é verdadeiro.
Outra observação importante é o fato de que, tratando-se de áudio, pode ser altamente conveniente trabalhar com Mel-Spectrum em vez de apenas analisar o áudio no domínio do tempo, sobretudo em escala linear. Áudios tendem a ter uma enorme gama de características muito ricas no domínio da frequência, e é muito comum que sejam bem mais convenientemente trabalhadas na escala Mel, que faz um tipo de mapeamento que considera as diferentes regiões do espectro com base na intensidade com que o ouvido humano consegue perceber. Você pode notar isso, por exemplo, com a facilidade como nota a diferença entre sons de 400 Hz e 500 Hz, mas, ao mesmo tempo, com o quão difícil pode ser para você perceber a diferença entre sons de 14000 Hz e 14100 Hz, mesmo com a diferença sendo 100 Hz em ambos os casos. Isso ocorre justamente porque temos muito mais dificuldade para notarmos diferenças em altas frequências do que em baixas frequências, e a escala Mel ajuda a considerar isso nas avaliações.
Enfim, como podemos perceber, é uma aplicação bem mais complexa do que talvez aparente, mas é também muito interessante!
Agradeço por ter trazido essas dúvidas.
Agradeço a resposta, mesmo que depois de 1 ano, isso porque todo esse tempo tenho me dedicado em estudar Python a fundo para conseguir resolver essa questão que levantei.
Olá! Parabéns pelo vídeo. minha questão: é possível para tocar o aúdio em tempos pré determinados?
Obrigado! Perdoe-me pela demora para responder, Olival!
Sim, você pode fazer isso, e talvez até haja alguma maneira mais conveniente de fazer isso, mas, ao menos por agora, apenas uma forma não muito conveniente me vem à cabeça: restringindo o próprio array "data" quanto à região correspondente ao intervalo que você quiser ouvir, e isso será feito, em princípio, com base nos números das amostras, e não no instante de tempo; por isso a provável inconveniência.
Para deixar um pouco mais conveniente, dado que é humanamente mais agradável poder definir em horas, minutos e segundos, o que você pode fazer é converter os instantes de tempo (de início e de fim do intervalo de tempo que desejar reproduzir) em segundos, e depois converter de segundos para número de amostras.
Desta forma, você pode utilizar, por exemplo, a função "datetime.datetime.strptime()" para converter um timestamp do tipo "00:01:11", dado em horas:minutos:segundos, para segundos. Então, sabendo que o áudio utiliza uma determinada frequência de amostragem, que é dada em Hertz, ou se preferir, número de amostras por segundo, você pode calcular qual será a amostra correspondente a esse instante de tempo.
Agora, caso você não precise ter o áudio completo importado para só reproduzir um intervalo, uma solução muito mais conveniente seria a de já importar apenas o intervalo de seu interesse. Para isso, você pode utilizar o argumento "offset", que define uma quantidade de tempo (em segundos) a ignorar desde o início do áudio, e o argumento "duration", que define a quantidade de tempo (em segundos) a considerar a partir do instante que deixa de ser ignorado pelo "offset". É bem mais simples assim; porém, você deixa de ter o sinal de áudio completo importado, e passa a ter apenas o intervalo definido.
Outra coisa que você pode fazer, e que permitirá ter tanto o áudio completo quanto poder ouvir apenas o trecho desejado, é importar o áudio completo e registrá-lo em uma variável, então importar apenas o trecho desejado e armazená-lo em outra variável, possivelmente, que seja até mesmo temporária.
eu sou iniciante nessa coisa mais eu queria saber se e posivel a partir do espectrograma fazer uma condiçao para que quando o som chega a uma frequencia pre_definida, ele faz tal coisa como por exemplo o som chega a 2000Hz entao o programa reconheçe e toma tal decisao? deste ja agradeço...
Olá! Seja bem vindo! Sim, eu diria que isso é possível, mas talvez seja uma abordagem pouco prática.
Você saberia dizer o motivo da biblioteca pydub não funcionar no jupyter notebook?
Olá, gostaria de saber se é possível captar o som atravéz de um microfone e verificar a duração, e os Hz e depois fazer comparação entre essas variáveis toda vez que for utilizada.
Poderia me ajudar nisso?
Consegue detectar acordes em video musical
Teria como escolher em qual diretorio esta a musica para escolher o arquivo de audio ?
como pode ser feito para pegar os dados, das notas musicais, e suas duracoes e gerar em um csv por exemplo ?
Muito bom !!! Saberia dizer como poderíamos aquisitar dados de uma interface de áudio em tempo real usando o python tipo assim tbm ?
Obrigado! Perdoe-me pela enorme demora para responder.
Acredito que uma boa forma de fazer isso seja por meio do módulo "pyaudio". Tem um exemplo bacana aqui: people.csail.mit.edu/hubert/pyaudio/#record-example
Você pode modificá-lo conforme suas necessidades.
Para que seja feito em tempo real, você fará um Stream que precisará fazer cautelosas escolhas de frequência de amostragem, bits de precisão e tamanho dos Chunks; afinal, caso seja feita uma escolha que resulte em um processamento incompatível com o Hardware utilizado, você poderá sofrer com latências altas e, dependendo do projeto, até mesmo com perdas de pacote.
@@TitoSpadini Muito obrigado pela atenção, e não se preocupe com a demora não ! É de grande ajuda mesmo assim, um abraço o/
@@acusticajax3618 agradeço muito pela compreensão! Abraço
Eu posso importar um som da internet com esse módulo?
...
Olá, jack! Beleza? Que eu saiba, esse módulo funciona apenas com arquivos que já estejam em seu computador. Mas eu gostei da sua pergunta e deixarei anotada a ideia de explorar o uso de áudio via Internet (possivelmente, em Streaming) em algum futuro vídeo.
oi spadini , tudo bem ? estou passando por umas dificuldades sera q vc pode da uma olhado no seu face por favor ? mandei minha duvida la , desde ja obrigado