Pergunta

Eu estou tentando fazer em tempo real campo de detecção de um blog de cantar, mas eu estou correndo em um monte de problemas.Eu tentei vários métodos, incluindo a FFT (FFT Problema (Retorna resultados aleatórios)) e de autocorrelação (Autocorrelação campo de detecção retorna resultados aleatórios, com entrada de microfone), mas eu não consigo obter os métodos para dar um bom resultado.Alguém pode sugerir um método para pitch em tempo real de controle ou de como melhorar um método que eu já tenho?Eu não consigo encontrar nenhum bom C / C++ métodos para tempo real do campo de detecção.

Obrigado,

Niall.

Editar:Apenas para observação, verifiquei que o mic a entrada de dados é correto, e que ao usar uma onda senoidal, os resultados são mais ou menos o passo correto.

Editar:Desculpe, este é tarde, mas no momento, estou visualizando o autocolleration tomando os valores dos resultados da matriz, e cada índice, e traçando o índice sobre o eixo X e o valor no eixo Y (ambos são divididos por 100000 ou algo assim, e estou usando OpenGL), conectando os dados em um VST host e utilizar plugins VST não é uma opção para mim.No momento, ele parece apenas alguns pontos aleatórios.Estou fazendo corretamente, ou você pode por favor me aponte torwards algum código para fazê-lo ou ajudar-me a entender como visualizar os dados de áudio em bruto e de autocorrelação de dados.

Foi útil?

Solução

Dando um passo para trás ... para fazer isso funcionando com você DEVO Descubra uma maneira de plotar etapas intermediárias desse processo. O que você está tentando fazer não é particularmente difícil, mas é propenso a erros e complicado. Recorte, janela, fiação ruim, alias, compensações de DC, lendo os canais errados, o estranho eixo de frequência da FFT, incompatibilidades de impedância, erros de tamanho de quadro ... quem sabe. Mas se você puder plotar os dados brutos e, em seguida, plotar a FFT, tudo ficará claro.

Outras dicas

Eu encontrei várias implementações de código aberto do pitch em tempo real de rastreamento

Existem também alguns rastreadores de campo lá fora, que pode não ser projetado para o tempo real, mas pode ser usado dessa forma por tudo que eu sei, e também pode ser útil como referência para comparar a sua real-time tracker para:

Eu sei que essa resposta não vai fazer todos felizes, mas aqui vai.

Este material é duro, muito duro.Em primeiro lugar vá ler tantos tutoriais de como você pode encontrar em FFT, Autocorrelação, Wavelets.Apesar de eu ainda estou lutando com DSP fiz algumas idéias a seguir.

https://www.coursera.org/course/audio o curso não esteja em execução no momento, mas os vídeos ainda estão disponíveis.

http://miracle.otago.ac.nz/tartini/papers/Philip_McLeod_PhD.pdf tese sobre o desenvolvimento de um campo de reconhecimento do algoritmo.

http://dsp.stackexchange.com um site inteiro dedicado ao processamento digital de sinais.

Se você como eu não fazer o suficiente em matemática para seguir os tutoriais não dar-se como alguns dos diagramas e exemplos ainda me ajudou a entender o que estava acontecendo.

Próximo de teste e dados de teste.Escreve-se uma biblioteca que gera arquivos de teste para uso na verificação de seu algoritmo/s.

1) Um super simples e pura da onda de seno gerador.Então, digamos que você está olhando para escrever YAT(Ainda Outro Sintonizador), em seguida, use o gerador do seno para criar uma série de arquivos de 440Hz dizer a partir de 420-460Hz em incrementos variáveis e ver como sensíveis e precisos seu código.Ele pode resolver dentro de 5 hz, 1Hz, mais fina ainda?

2) em Seguida, atualizar o seu gerador de onda sinusoidal para que adiciona uma série de fracos harmônicos do sinal.

3) a seguir, são do mundo real variações harmônicas.Assim, enquanto para a maioria dos instrumentos de cordas, você vai ver uma série de harmônicos simples, múltiplas da freqüência fundamental F0, para instrumentos como clarinetes e flautas devido à forma como o ar se comporta na câmara o mesmo harmônicos vai estar ausente ou muito fraca.E, para alguns instrumentos, F0 é ausente, mas pode ser determinado a partir da distribuição de outros harmônicos.F0, sendo que o ouvido humano percebe como breu.

4) Jogue em alguns deliberada distorção deslocando a harmônica de pico de frequências para cima e para baixo de forma irregular

O ponto é que, se você estiver criando arquivos com resultados conhecidos, em seguida, torna-se mais fácil verificar se o que você está construindo, na verdade, funciona, bugs, além, é claro.

Há também um número de "bibliotecas" para fora lá que contém amostras de som.https://freesound.org a partir do Coursera série mencionado acima.http://theremin.music.uiowa.edu/MIS.html

Próximo estar ciente de que o microfone não é perfeito, e a menos que você gastou milhares de dólares que ele vai ter bastante variável gama de resposta de frequência.Em particular, se estiver a trabalhar com notas baixas, em seguida, mais barato microfones, leia as embutidas, que tem em seu PC ou Telefone, têm significativa rolloff de partida em torno de 80-100 hz.Razoavelmente bom externas que você pode chegar até 30-40 hz.Ir encontrar os dados no seu microfone.

Você também pode verificar o que acontece ao jogar o tom através de alto-falantes e, em seguida, a gravação com o favorito microfone.Mas é claro que agora estamos a falar de 2 conjuntos de curvas de resposta da frequência.

Quando se trata do desempenho, há um número de livremente as bibliotecas disponíveis lá fora, apesar de não estar conscientes dos vários modelos de licenciamento.

Acima de tudo não desistir depois de seu primeiro par de tentativas.Melhor da sorte.

Eu tive um problema semelhante com a entrada de microfone em um projeto que fiz alguns anos atrás - acabou sendo devido a um deslocamento de DC.

Certifique -se de remover qualquer viés antes de tentar a FFT ou qualquer outro método que você esteja usando.

Também é possível que você esteja enfrentando problemas ou problemas de recorte.

Os gráficos são a melhor maneira de diagnosticar a maioria dos problemas com o áudio.

Aqui está o código-fonte C++ para uma incomum de duas fases do algoritmo que eu criei o que pode fazer Em tempo real Campo de Detecção em polifônicos Arquivos MP3 enquanto está a ser reproduzido no Windows.Este aplicativo gratuito (PitchScope Player, disponível na web) é freqüentemente usado para detectar as notas de uma guitarra ou um saxofone solo em cima de uma gravação em MP3.O algoritmo foi concebido para detectar a maioria dominante pitch (de uma nota musical) em qualquer dado momento no tempo dentro de um arquivo de música MP3.Nota inícios são exatamente inferida por uma mudança significativa na maioria dominante pitch (de uma nota musical) em qualquer momento durante a gravação em MP3.

Quando uma tecla é pressionada em cima de um piano, o que ouvimos não é apenas uma frequência de vibração do som, mas um composto de som de vários ocorrência de vibrações em diferentes relacionadas matematicamente as freqüências.Os elementos desse composto de vibrações em diferentes frequências são referidos como harmônicos ou parciais.Por exemplo, se nós prima o Meio C tecla do piano, as frequências individuais de composição do harmônicos terá início às 261.6 Hz como frequência fundamental, 523 Hz seria o 2º Harmônico, 785 Hz seria o 3º Harmônico, 1046 Hz seria o 4º Harmônico, etc.Mais tarde harmônicos são múltiplos inteiros da freqüência fundamental, 261.6 Hz ( ex:2 x 261.6 = 523, 3 x 261.6 = 785, 4 x 261.6 = 1046 ).Vinculada no fundo, é um retrato do real harmônicos que ocorrem durante a polifônicos MP3 gravação de um solo de guitarra.

Em vez de uma FFT, eu uso uma versão modificada DFT de transformação, com logarítmica de freqüência espaçamento de primeiro detectar os possíveis harmônicos procurando frequências com níveis de pico (veja o diagrama abaixo).Por causa da maneira que eu coletar dados para minha modificado Registo de DFT, eu NÃO tenho para aplicar uma Função de Janelamento do sinal, nem fazer adicionar e sobreposição.E eu ter criado a DFT para seus canais de frequência são de forma logarítmica, de modo a diretamente alinhar-se com as frequências harmônicas são criadas as notas em um violão, saxofone, etc.

Agora de ser aposentado, tenho decidiu liberar o código-fonte para o meu campo de detecção de motor dentro de uma demonstração gratuita do app chamado PitchScope Player.PitchScope Player está disponível na web, e você poderia fazer o download do executável para o Windows para ver o meu algoritmo de trabalho em um arquivo mp3 de sua escolha.O link abaixo para GitHub.com vai levar você para o meu código-fonte completo onde você pode ver como eu detectar os harmônicos com um personalizado Logarítmica DFT transformação e, em seguida, olhar para os parciais (harmónicos) cujas frequências satisfazer o correto inteiro relação que define um 'campo'.

Meu Campo Algoritmo de Detecção, na verdade, é um processo de dois estágios:a) o Primeiro ScalePitch é detectado ('ScalePitch' tem 12 possíveis pitch valores:{E, F, F#, G, G#, A, A#, B, C, C#, D, D#} ) b) e após ScalePitch é determinado, então o Oitava é calculado pelo exame de todas as vibrações para os 4 possíveis Oitava-Candidato notas.O algoritmo foi concebido para detectar a maioria dominante pitch (de uma nota musical) em qualquer dado momento no tempo dentro de uma polifonia de arquivo MP3.Que geralmente corresponde às notas de um instrumental solo.Os interessados em código-fonte C++ para os meus Dois estágios Campo algoritmo de Detecção pode querer começar a Estimate_ScalePitch() função dentro do SPitchCalc.cpp arquivo GitHub.com.https://github.com/CreativeDetectors/PitchScope_Player

Abaixo está a imagem de um Logarítmica DFT (criado por meu software em C++) para 3 segundos de um solo de guitarra em uma polifonia de gravação mp3.Ele mostra como os harmônicos aparecer para notas individuais em uma guitarra, durante a reprodução de um solo.Para cada nota nesta Logarítmica DFT podemos ver seus vários harmônicos estendendo-se verticalmente, porque cada harmônica terão o mesmo tempo de largura.Depois da Oitava da nota é determinado, então nós sabemos que a frequência Fundamental.

enter image description here

Verificação de saída Aubio, e biblioteca de código aberto, que inclui vários métodos de última geração para rastreamento de afinação.

Dê uma olhada neste aplicativo de amostra:

http://www.codeproject.com/kb/audio-video/soundcatcher.aspx

Sei que o aplicativo está em C# e você precisa de C ++, e percebo que isso é .NET/Windows e você está em um Mac ... mas achei que sua implementação da FFT poderia ser um ponto de referência inicial. Tente comparar sua implementação da FFT com a dele. (O dele é a versão iterativa e de largura da FFT de Cooley-Tukey). Eles são semelhantes?

Além disso, o comportamento "aleatório" que você está descrevendo pode ser porque você está pegando dados retornados diretamente pela sua placa de som sem montar os valores da matriz de bytes corretamente. Você pediu à sua placa de som para provar valores de 16 bits e depois deu uma matriz de byte para armazenar os valores? Nesse caso, lembre-se de que dois bytes consecutivos na matriz retornada compõem uma amostra de áudio de 16 bits.

O código Java para um detector real em tempo real está disponível em http://code.google.com/p/freqazoid/.

Funciona bastante bem em qualquer computador que execute o Java em tempo real em tempo real. O projeto foi retirado e pode ser escolhido por qualquer parte interessada. Entre em contato comigo se quiser mais detalhes.

Eu fiz uma pergunta semelhante aqui:

Algoritmo em tempo real de C/C ++/OBJ-C para verificar a nota (não pitch) a partir da entrada vocal

EDITAR:

Performous Contém um módulo C ++ para detecção de tom em tempo real

Também Yin Algoritmo de rastreamento de arremesso

Você pode adaptar qualquer coisa de sintonizadores de instrumentos? Meu sintonizador de guitarra deliciosamente compacto é capaz de detectar o tom das cordas muito bem. Eu vejo essa referência a um Tuner de piano o que explica um algoritmo até certo ponto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top