Outro Exemplo saida + comentarios ep1

Outro Exemplo saida + comentarios ep1

por Thiago Paixão -
Número de respostas: 3
Olá pessoal. Estou com algo tipo de problema não identificado no ep1 e por isso ainda não entreguei. No exemplo 1 de entrada com 17 bits e frequencia de 44KHz nao consigo fazer o sintetizador tocar conforme a entrada. Entao estou listando algumas decisoes de implementacao para srem criticas e corrigidas (Leandro, peço um feedback por favor):

- Faço síntese aditiva utilizando um array de float samples para armazenar as amostras;
- Normalizo (intervalo [-1,1]) as amostras de samples dividindo pelo maior valor absoluto das amostras e em seguida multiplico pelo maior valor possivel de acordo com a codificacao (32767 para 16 bits e 255 para 8 bits). Caso a codificação seja de 8 bits eu dou um shift nos valores normalizados das amostras de acordo com o valor absoluto da menor amostra (negativa);
- Converto as amostras do array de float para um array de bytes da seguinte forma:
- Se a codifição for de 8bits isso é direto.
- Se for de 16, eu pego um array data e faço:
- data[0] = byte menos significativo de samples[0]
- data[1] = byte mais significativo de samples[0]
- data[2] = byte menos significativo de samples[1]
- data[3] = byte mais significativo de samples[1]
.
.
.

A partir disso usando a API do Java Sound e possivel criar um stream a partir de data (array de bytes) e salvar para wave. Dos que eu citei, existem procedimentos equivocados? tem como fazer melhor? alguem tem um exemplo de saida diferente?? leandro voce usou alguma coisa diferente para gerar os exemplos de saida ou implementou normalmente como nos o sintetizador? Até mais.

Em resposta à Thiago Paixão

Re: Outro Exemplo saida + comentarios ep1

por Leandro Thomaz -

Olá Thiago,

pelo que entendi seu problema é só com a amostra de 16 bits, certo?!

Bom, tome cuidado ao definir o AudioFormat que você irá utilizar... Você definir se o byte é signed ou unsigned e se é little endia ou big endian.

O seu problema deve estar ai, pense um pouco em como deve montar o array de bytes para o Java Sound! Ele deve estar conforme o que você definiu no AudioFormat!

Espero que ajude!

Leandro

Em resposta à Leandro Thomaz

Re: Outro Exemplo saida + comentarios ep1

por Thiago Paixão -
Eu coloquei o audioFormat como signed e litle endian. Na verdade o meu de 8bits tambéms está meio estranho. Naquele exemplo que você passou tem uns graves que ficam alternando... No meu eles estão muito fixos... Vou tentar conferir de novo o cálculos... Você acha que o fato de eu usar float e não double pode trazer algum problema? Achei que não teria... A música está tocando mas tem vários detalhes que não estão batendo exatamente... Os instrumentos por exemplo não estão tão intensos como no seu. Vou verificar mais e qq coisa eu posto de novo.