Pergunta

Quero escrever um aplicativo para transpor a chave que um arquivo wav reproduz (por diversão, eu sei que existem aplicativos que já fazem isso) ... meu principal entendimento de como isso pode ser conseguido é

1) Pique o arquivo de áudio em blocos muito pequenos (digamos 1/10 por segundo)

2) Execute uma FFT em cada bloco

3) Mudança de fase no espaço de frequência para cima ou para baixo, dependendo da chave que eu quero

4) Use uma FFT inversa para retornar cada bloco ao domínio do tempo

5) Cole todos os blocos juntos

Mas agora estou me perguntando se os blocos transformados não seriam mais contínuos quando tento colá -los novamente. Existem idéias como devo fazer isso para garantir a continuidade, ou estou apenas me preocupando com nada?

Foi útil?

Solução

Sobreponha as amostras de tempo para cada bloco pela metade, para que cada bloco após o primeiro consista nas últimas amostras de N/2 do bloco anterior e N/2 novas amostras. Certifique -se de aplicar alguma janela às amostras antes da transformação.

Depois de mudar a frequência, execute uma FFT inversa e use as amostras médias de N/2 de cada bloco. Você precisará ajustar o ganho final após o IFFT.

Obviamente, misturar as amostras de tempo com uma onda senoidal e depois a filtragem de passes baixos também fornecerá a mesma mudança no domínio do tempo. A frequência do misturador seria a diferença de frequência desejada.

Outras dicas

Para o discurso, você pode querer olhar Psola - Este é um algoritmo popular para pitch-shifting e/ou time stretching/compression O que é um pouco mais sofisticado que o método básico de sobreposição, mas não muito mais complexo.

Se você precisar processar amostras não de fala, por exemplo, música, então há várias possibilidades, no entanto, a abordagem de sobreposição de FFT/Modify/IFFT mencionada em outras respostas é provavelmente a melhor aposta.

Encontrado Este ótimo artigo Sobre o assunto, para quem tenta no futuro!

Você pode ter que encontrar um cruzamento zero entre os blocos para colar as ondas individuais novamente. Caso contrário, você poderá achar que está recebendo cliques ou pops entre os blocos.

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