Página 1 de 2

Como transformar uma coisa em outra coisa

MensagemEnviado: 10 Nov 2020 19:54
por Guri
Eu estou meio sem ideias, preciso de ajuda: :P

Eu tenho uma variável do tipo UNSIGNED INT (ou seja uma variável não sinalizada).
Como eu faço para transformar uma UNSIGNED INT em uma variável sinalizada do tipo SIGNED INT?

Afi.... :D

Re: Como transformar uma coisa em outra coisa

MensagemEnviado: 10 Nov 2020 20:19
por sync

Re: Como transformar uma coisa em outra coisa

MensagemEnviado: 10 Nov 2020 21:29
por cfreund
Código: Selecionar todos
    unsigned int u;
    int i;

    u = (unsigned int)0xFFFFFFFF;
    i = (int)u;

Re: Como transformar uma coisa em outra coisa

MensagemEnviado: 10 Nov 2020 21:37
por Rodrigo_P_A
Guri escreveu:Eu estou meio sem ideias, preciso de ajuda: :P

Eu tenho uma variável do tipo UNSIGNED INT (ou seja uma variável não sinalizada).
Como eu faço para transformar uma UNSIGNED INT em uma variável sinalizada do tipo SIGNED INT?

Afi.... :D



unsigned int variavel=1
signed int svar=(signed int) variavel;

Re: Como transformar uma coisa em outra coisa

MensagemEnviado: 11 Nov 2020 07:50
por vtrx
Só uma observação.
se voce pode definir uma variável,por que ja não a define antes?

Re: Como transformar uma coisa em outra coisa

MensagemEnviado: 12 Nov 2020 12:25
por Guri
Agradeço a ajuda.

Respondendo, porque não definir signet antes! É porque eu gostaria de saber se é possivel fazer isso sem ter que alterar todo o sistema:P

Re: Como transformar uma coisa em outra coisa

MensagemEnviado: 17 Nov 2020 09:58
por KrafT
Ô Guri, me diz uma coisa... Tu faz projetos fantásticos de equipamentos profissionais de áudio e tem uma dúvida dessas?

Eu fiquei mais de ano sem acessar o fórum e vejo vc ainda solta uma dessas periodicamente... Tu faz isso para animar o fórum, não? :D

Brincadeira, tá? manda um abraço pro Vonillmann

Re: Como transformar uma coisa em outra coisa

MensagemEnviado: 19 Nov 2020 09:56
por Guri
KrafT escreveu:Ô Guri, me diz uma coisa... Tu faz projetos fantásticos de equipamentos profissionais de áudio e tem uma dúvida dessas?

Eu fiquei mais de ano sem acessar o fórum e vejo vc ainda solta uma dessas periodicamente... Tu faz isso para animar o fórum, não? :D

Brincadeira, tá? manda um abraço pro Vonillmann


Oi, Kraft....Quem sou eu!
Na verdade sou um eterno aprendiz e gosto muito do forum, parabéns para quem o idealizou e para os participantes também. :D

Tem vezes que a cabeça dá um nó...Aí peço ajuda aos amigos do forum.
A pergunta parece ser mesmo muito "ingênua", pense o seguinte:

Eu tenho uma tabela enorme com amostras de aúdio, ela foi feita em formato "unsigned", onde o offset de ZERO do áudio é 0x80 (como exemplo 8bits), agora eu quero um offsset onde o ZERO do audio será 0x00 e para isso ocorrer teria que ser uma variável "signed". E como consequencia a tabela de ondas com o audio, teria que ser toda sinalizada.

Acabei resolvendo o dilema utilizando tudo unsigned como era o original e para fazer zerar essa variável eu utilizei outra variável unsigned que decresce o volume da tabela de ondas até zerar (controle de volume automático, se assim posso dizer), assim meu offset na saída de cada canal de audio será ZERO 0x00, mesmo que esteja utilizando unsigned com offset 0x80.

Agradeço a todas as dicas...Obrigado :)

Re: Como transformar uma coisa em outra coisa

MensagemEnviado: 19 Nov 2020 11:52
por vtrx
Se voce tem uma tabela,e ela é fixa,ja determinada,use um editor de texto e altere todos 0x80 por0x00.

Re: Como transformar uma coisa em outra coisa

MensagemEnviado: 20 Nov 2020 01:06
por cfreund
Guri escreveu:Eu tenho uma tabela enorme com amostras de aúdio, ela foi feita em formato "unsigned", onde o offset de ZERO do áudio é 0x80 (como exemplo 8bits), agora eu quero um offsset onde o ZERO do audio será 0x00 e para isso ocorrer teria que ser uma variável "signed". E como consequencia a tabela de ondas com o audio, teria que ser toda sinalizada.

Acabei resolvendo o dilema utilizando tudo unsigned como era o original e para fazer zerar essa variável eu utilizei outra variável unsigned que decresce o volume da tabela de ondas até zerar (controle de volume automático, se assim posso dizer), assim meu offset na saída de cada canal de audio será ZERO 0x00, mesmo que esteja utilizando unsigned com offset 0x80.

Agradeço a todas as dicas...Obrigado :)


Numa variável signed, a função do bit mais a esquerda (0b10000000) é dizer se o numero é negativo ou não. De repente, essa tabela pode trabalhar direto em signed. Mas se realmente foi feito um offset de 0x80, então será necessário espelhar a parte alta do byte:

Código: Selecionar todos
    valor_signed = valor_tabela & 0x7F;
    if (valor_tabela < 0x80)
        valor_signed -= 0x80;

Re: Como transformar uma coisa em outra coisa

MensagemEnviado: 20 Nov 2020 07:39
por KrafT
Guri escreveu:
Eu tenho uma tabela enorme com amostras de aúdio, ela foi feita em formato "unsigned", onde o offset de ZERO do áudio é 0x80 (como exemplo 8bits), agora eu quero um offsset onde o ZERO do audio será 0x00 e para isso ocorrer teria que ser uma variável "signed". E como consequencia a tabela de ondas com o audio, teria que ser toda sinalizada.


Bah, tchê...

Posso estar sendo leviano, mas uma "tabela com offset de Zero em 0x80" é uma tabela de 8 bits signed. Se só zero obedece esse formato e os demais valores não, então a tabela está mal construída ou corrompida, pois seus tipos de dados não são consistentes. Ou ainda, é uma nova codificação, tipo "codificação de KrafT" cuja única regra é não permitir um registro nulo, e por isso um bit "é queimado" só para atender à mesma.

Eu iria na sugestão do Vtrx, de corrigir a tabela. E não de alterar o software para lidar com tabelas mal construídas.

Re: Como transformar uma coisa em outra coisa

MensagemEnviado: 20 Nov 2020 11:04
por Guri
KrafT escreveu:
Guri escreveu:
Eu tenho uma tabela enorme com amostras de aúdio, ela foi feita em formato "unsigned", onde o offset de ZERO do áudio é 0x80 (como exemplo 8bits), agora eu quero um offsset onde o ZERO do audio será 0x00 e para isso ocorrer teria que ser uma variável "signed". E como consequencia a tabela de ondas com o audio, teria que ser toda sinalizada.


Bah, tchê...

Posso estar sendo leviano, mas uma "tabela com offset de Zero em 0x80" é uma tabela de 8 bits signed. Se só zero obedece esse formato e os demais valores não, então a tabela está mal construída ou corrompida, pois seus tipos de dados não são consistentes. Ou ainda, é uma nova codificação, tipo "codificação de KrafT" cuja única regra é não permitir um registro nulo, e por isso um bit "é queimado" só para atender à mesma.

Eu iria na sugestão do Vtrx, de corrigir a tabela. E não de alterar o software para lidar com tabelas mal construídas.


Tranquilo Kraft :)
A tabela esta correta :D : O arquivo foi salvo em unsigned char 8 bits, por isso o offset (ZERO) é = 0x80, caso fosse salva em signed char o offset (ZERO) seria 0x00. A dica cfreund é interessante.

Re: Como transformar uma coisa em outra coisa

MensagemEnviado: 20 Nov 2020 11:36
por KrafT
Guri escreveu:
Tranquilo Kraft :)
A tabela esta correta :D : O arquivo foi salvo em unsigned char 8 bits, por isso o offset (ZERO) é = 0x80, caso fosse salva em signed char o offset (ZERO) seria 0x00. A dica cfreund é interessante.


Tua frase não faz sentido, mas tudo bem. Talvez me falte capacidade matemática para compreender o conceito. Para mim, zero é zero e isso é um tipo um axioma. Não pode ser mudado.
Representação do zero em 7 bits para reservar o oitavo para o sinal, ainda vai ser zero. Adicionar/subtrair um offset é outra coisa, zero mais ou menos outro número diferente dele mesmo, não é mais zero. Talvez você esteja se referindo ao zero como um adjetivo, como "zero de uma função" ou "derivada zero", "polos e zeros", aí a interpretação é diferente. Mas o numeral zero é único e imutável e é zero.

Edit: Nossa, desvirtuei totalmente tua pergunta, já respondida a muito tempo. Desculpe, mas é um desafio mental bacana, para reduzir a chance/gravidade do Alzheimer.

Re: Como transformar uma coisa em outra coisa

MensagemEnviado: 20 Nov 2020 11:59
por vtrx
Acho que imagino como esta utilizando a tabela.
Voce esta gerando WAV diretamente,mas 0x80,eletricamente,representa uma tensão e não zero,isso deve ser manipulado na parte amplificadora de áudio,gerando um áudio com tensões negativas e positivas onde 0x80 não gera nenhuma tensão.

Re: Como transformar uma coisa em outra coisa

MensagemEnviado: 20 Nov 2020 13:35
por cfreund
Caros,

No caso, uma variável com offset difere de uma signed.

0x79 não é o mesmo que -1; 0x00 não é o mesmo que -127;

Não sabemos como está feita a lógica do software e nem o hardware. E isso faz toda a diferença, p.ex. trabalhando com DMA ou equivalente.