www.programadoresdejogos.com

[P D J - Programadores e Desenvolvedores de Jogos]
Bem-vindo: Sex Set 10, 2010 12:11 am

Todos os horários são GMT - 3 horas




Criar novo tópico Responder  [ 4 mensagens ] 
Autor Mensagem
 Título: Espectro (FMOD.dll em Delphi)
MensagemEnviado: Sex Jul 23, 2010 9:31 am 
Offline
Iniciante PDJer
Iniciante PDJer
Avatar do usuário

Registrado em: Ter Fev 19, 2008 3:58 pm
Mensagens: 52
Localização: Santa Catarina
Esta é pros programadores! (Especialmente Delphi... também C)

E aí, pessoal da PDJ. Eu nunca me decepciono com as respostas que obtenho aqui. Por isso, agora decidi perguntar sobre isso.
Estou estudando/brincando com a biblioteca de som FMOD, na linguagem Object Pascal/Delphi.

Você já viu aquelas ondinhas de som? Os aplicativos que trabalham com áudio sempre representam o som daquela forma (incluindo o Adobe Flash, pra quem conhece; também o SoundForge).
Descobri, através de pesquisas, que o nome deste desenho é "espectro". Então pesquisei a presença de espectros... ops! Digo, a capacidade da FMOD formar espectros dos sons em execução.
Desta forma, conheci a função Channel:GetSpectrum. No entanto apareceu uma dúvida (que, se procurar no Google, poderão ver que é bem comum) e não soube resolver.

Aqui está o problema: a função FMOD_Channel_GetSpectrum retorna sempre o valor 0... Sem falar que no Delphi, no parâmetro onde eu devo colocar um array de Single (float, em C/Java) tem espaço para uma variável simples (isto é, não um array, somente uma varável Single). Nem os próprios exemplos da FMOD têm isso. Já tentei repassar um valor de um "^array[]of Single" pelo parâmetro Single, em que precisa-se colocar o ponteiro do vetor, mas não mudou nada... continuo zero.

Fiz muitos testes e nenhum rendeu... será que podem me ajudar?
Obrigado antecipado pra quem ajudar, meio-obrigado pra quem der uma dica e *%$# pra quem atrapalhar (o último é brincadeira, tá?).

_________________
Existem 11 tipos de pessoas no mundo:
As que entendem binário (1), as que fingem que entendem (10) e as que não entendem (11).


Voltar ao topo
 Perfil  
 
 Título: Re: Espectro (FMOD.dll em Delphi)
MensagemEnviado: Dom Jul 25, 2010 2:02 pm 
Offline
Iniciante PDJer
Iniciante PDJer

Registrado em: Qua Set 17, 2008 9:07 pm
Mensagens: 17
Trecho em "Basic" que vi na net:

Dim Arr.f(512)

Repeat
FMOD_Channel_GetPosition(channel, @pos, #FMOD_TIMEUNIT_MS)
FMOD_Channel_IsPlaying(channel, @isPlaying)
FMOD_Channel_GetSpectrum(channel, Arr(), 512, 0, 0)


Não sei como é declarado oficialmente em pascal, mas seria isso:

Var
Arr: Array[0..511] Of Single;

FMOD_Channel_GetSpectrum(channel, Arr[0], 512, 0, 0)

EDITADO:
Vi que a declaração é "Var spectrumarray: Single", o que é sem duvida, dubio (porque insistem em fazer as API's tão 'lindinhas'), sendo que pSpectrumArray: PSingle seria pra mim mais realista com a biblioteca...
Pelo menos, quando se declara arrays no delphi assim, os dados ficam 'continuos' na memoria, então, passar a posição [zero] do array funciona...


Voltar ao topo
 Perfil  
 
 Título: Re: Espectro (FMOD.dll em Delphi)
MensagemEnviado: Qui Jul 29, 2010 6:22 pm 
Offline
Iniciante PDJer
Iniciante PDJer
Avatar do usuário

Registrado em: Ter Fev 19, 2008 3:58 pm
Mensagens: 52
Localização: Santa Catarina
Hmmm. certo. Vou tentar usar um Single comum, e não um Array. O fato é que ele pegando o meu Single (e não PSingle) ele ainda não saberá o endereço da minha variável, já que uma cópia dela será enviada e ele terá acesso somente à cópia.

Ainda assim, acho que isso não resolverá o problema da função retornar somente 0 (zero).
Mas, obrigado. O que você me repassou me deu uma idéia...

Continuo esperando, se alguém tiver mais dicas... ou a resposta final e exata... (serve qualquer uma das duas).

_________________
Existem 11 tipos de pessoas no mundo:
As que entendem binário (1), as que fingem que entendem (10) e as que não entendem (11).


Voltar ao topo
 Perfil  
 
 Título: Re: Espectro (FMOD.dll em Delphi)
MensagemEnviado: Dom Ago 08, 2010 2:28 pm 
Offline
Colaborador PDJer
Colaborador PDJer
Avatar do usuário

Registrado em: Sex Jan 18, 2008 4:58 pm
Mensagens: 867
Localização: Brazil
Eu não estou com o Delphi instalado, mas acho que a solucao do HarryPitfallJunior vai funcionar, porque quando passa Arr[0] voce entrega o endereço da primeira posição do array. Se voce joga apenas Arr ele vai gravar dali pra frente (na memoria) e provavelmente, ferraria com outra coisa q esta lá (mas pode estar vazio, ai nao da erro nenhum) e ai como nao foi modificado, continua com valor 0

Achei aqui:
http://www.gamedev.net/community/forums ... _id=297454
que vc tem q chaamr o FSOUND_DSP_Create antes.


Now its your turn

You may be thinking, well this sounds like a good place if I wanted to create my own effects such as reverb or a low pass filter for example, or maybe you just want to read the data that comes in so you can graphically plot it! Well you're right this is the place to do it.
Just call FSOUND_DSP_Create, and give it a callback, and a priority. Set it active with FSOUND_DSP_SetActive and immediately your DSP unit will be ticking.

_________________
Procurando por artigos?
Imagem
http://www.desenvolvedoresonline.com

Imagem
http://www.renatocron.com/


Voltar ao topo
 Perfil  
 
Exibir mensagens anteriores:  Ordenar por  
Criar novo tópico Responder  [ 4 mensagens ] 

Todos os horários são GMT - 3 horas


Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante


Enviar mensagens: Proibido
Responder mensagens: Proibido
Editar mensagens: Proibido
Excluir mensagens: Proibido
Enviar anexos: Proibido

Procurar por:
Ir para:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzido por: Suporte phpBB