Autor |
Mensagem |
Ismah Veterano |
# jun/14
Conversava com o Nichendrix (espero ter escrito serto Sr Nicholae) e o pedrolake, sobre chorus, leslie e blá blá blá... E acabamos tocando nesse assunto. A pedidos do Nich, segue o baile nesse tópico, especificamente sobre programação de pedais.
|
pedrolake Veterano |
# jun/14 · Editado por: pedrolake
· votar
essas fórmulas X e Y representam exatamente o que?
No caso, a qualidade do efeito está relacionada com a complexidade do cálculo e a quantidade de vezes que o mesmo é realizado. Certo?
Bem Ismah, o processamento de sinais digitais, utiliza varias técnicas, por exemplo, pense em um cross over digital, o onde você precisa, barrar ou atenuar uma determinada gama de frequências, nesse caso o eixo 'x' pode me representar o espectro de frequências e o eixo 'y' o ganho em decibéis. Neste exemplo estamos usando o domínio da frequência. No caso do chorus ja teríamos que trabalhar com dois elementos, por meio da interpolação de Gauss, onde primeiramente teríamos um gráfico sobre domínio da frequência e outro sobre domínio do tempo. A interpolação dos dois nos daria o gráfico de frequência(y) e tempo(x).
Sobre o cálculo, acontece o seguinte fato, audivelmente a qualidade do programa depende da amostra, por isso em pedaleiras e racks você tem a seguinte frase no conversor Analógico-Digital ,XXX times oversampling, ou seja em uma amostra, que pode ser um Lá, ela passa XXX vezes na conversão, para garantir que não haja uma distorção ou Alias, em relação a amostra original, isso significa que o que entra analógico é o que sai digital (a principio é isso, pois há uma certa complexidade que depende da arquitetura do conversor).
Bem após termos a amostra, no processador, executamos cálculos, mas no caso do chorus, o que acontece, essa amostra é duplicada e ela passa pelo cálculo de delay que atrasará esta onda, depois ela será modulada pelo LFO sobre o delay. A saída desse processo gerará um onda com tempo T maior que o da amostra, e essa onda terá o pitch reduzido em 1 oitava. Até aqui temos a onda original e a onda do processo de phasing e pitching. Após esses processos, devemos interpolar as ondas, para termos somente um sinal de saída, essa interpolação não acontece ao acaso, ela é sincronizada a partir do tempo inicial da amostra o que gera um sinal parecido com esse.
Interpolação de Ondas.
Nesse link, tem algumas técnicas de interpolação: http://cnx.org/content/m11126/latest/
Você pode usar as formulas no MathLab.
Analogicamente usamos um clock síncrono sobre estágio DDB (MN, SAD), para que não haja sobreposição e troca de tempos.
Agora sobre quantidade de vezes que o mesmo é realizado, se for uma programação as cegas, onde se desconhece a arquitetura do sistema e somente conhece-se o processador, sim por exemplo, pegar a onda interpolada do chorus e sobre ela re-executar o calculo de delay, phasing e pitch gerando uma dobra com 1 oitava mais baixa e deixando o chorus mais warm, ou passar ela em compressor para deixar a saída dela com picos de frequências mais lineares.
|
nichendrix Veterano
|
# jun/14
· votar
Ismah
Marcando, quando voltar eu vejo aqui.
|
Alex guitar man Veterano |
# jun/14
· votar
Vamo fazer uma distorção digital, rs, nem que for pra parecer um fuzz
Tipo isso, não simulação de nada.. só distorção msm
https://www.youtube.com/watch?v=976ntZ7ZHnw
|
pedrolake Veterano |
# jun/14
· votar
a distorção é a representação cubica do clipping de diodos, para uma full usa- se raiz de 2 * Vpp onda, jpa para ter menos ganho (Raiz de 2 - (0,1 * Raiz de 2) * vpp onda. ou seja você deixa ela mais quadrada ou menos. Y = 2 - 1/X
Expressão
Y = 2 - 12/X
threshold,
Y = 2t - t2/X ; 2t é limite da saturação
Y/X = 2t/X - t2/X2 - controle de ganho adicionado
Y/X = 2(t/X) - (t/X)2
Gráficos: Gráfico representativo
|
Ismah Veterano |
# jun/14
· votar
E uma pergunta tosca...
Mas... Essas fórmulas ficam guardadas num CI, até aí tudo certo... Mas te pergunto, como elas chegam lá?
|
mjcmello Veterano |
# jun/14
· votar
Ismah
São CIs programáveis. Estes CIs executam instruções igual a uma CPU do notebook.
Quando vc faz um projeto que utilize estes CIs, vc tem que criar o programa que eles vão executar e gravar o programa lá. A fórmula faz parte do programa.
|
pedrolake Veterano |
# jun/14 · Editado por: pedrolake
· votar
Então as formulas são escrita no que chamamos de opcodes ou matrizes binárias, exemplo para se ler o potenciômetro usa-se em C o comando RDAX POT0,1, e binário seria 01100100110010010. Dependendo o processador, os códigos são gravados em uma memória interna, que pode ser uma EEPROM, ROM, EAPROM, PROM. No processador existe uma controlador da parte lógica que executa um ciclo de máquina e acessa por meio de endereçamento das portas internas por meio de códigos de acesso. Se a memória do for externa ao processador, ela estará conectada diretamente ou não ha portas especificas para a comunicação entre os dois Chips.
O ciclo de máquina está ligado diretamente e indiretamente ao clock/ frequência do ciclo de trabalho, que pode variar de alguns kilo Hertz até giga Hertz..
Exemplo do cliclo de máquina sobre o clock
O IO neste caso está ligada as portas de entrada e saída de informação. E os AD ao endereçamento.
As vezes as memorias externas podem estar conectada em interface, que fica disposta entre o processador DSP e a memoria, Geralmente isso acontece nas pedaleiras e a interface age no controle a acesso de memória. Por exemplo dependendo da complexidade do sistema você pode ter mais de uma memória e códigos específicos nela, que pode ser distorção, modulação.
O processador tem uma estrutura complexa, além da parte não lógica ( o processamento DSP, que é mais matemático que lógico) e a estrutura de controle e lógica. Essa estrutura de controle e lógica, fica responsável pela aquisição de dados lógicos, no caso nossos códigos e a execução de comandos. Em um ciclo essa estrutura começa no estado IDLE, quando ela recebe o que chamamos de clock alto ou o pulso positivo de algum microprocessador externo ela automaticamente começa alguns procedimentos, como a leitura de portas, e memorias. Ao ler a memoria interna e se deparar com uma estrutura não vazia, onde o retorno poderá ser um opcode de reconhecimento positivo, a estrutura de controle, copia esses códigos para uma alocação de memória que somente existe durante o ciclo de máquina. A partir da dai, começa a interpretação do código para funções matemáticas que são enviadas para a parte que faz o processamento de sinais.
|
Ismah Veterano |
# jun/14
· votar
mjcmello pedrolake
Certo. Jásabia que era em CI's programáveis. Mas volto apergunta: como o código binário chega no CI?
Dependendo o processador, os códigos são gravados em uma memória interna
De maneira lógica, poderíamos criar uma pedaleira que utilizasse "cartuchos" (algo como um MicroSD card) de efeitos... Tería N slots de memória removível, e compraria eles aleatóriamente com drives, modulações e cara*&¨% a quatro?
|
MauricioBahia Moderador |
# jun/14
· votar
Relacionado:
By mjcmello
【FIXO】 Artigo - Amostragem de sinais e pedaleiras digitais http://forum.cifraclub.com.br/forum/7/290301/
Abs
|
pedrolake Veterano |
# jun/14 · Editado por: pedrolake
· votar
Dependendo o processador, os códigos são gravados em uma memória interna
Sim há muitos processadores que possuem uma alocação para se gravar o programa que ele executará, são chamadas de aplicações embarcadas.
De maneira lógica, poderíamos criar uma pedaleira que utilizasse "cartuchos" (algo como um MicroSD card) de efeitos... Tería N slots de memória removível, e compraria eles aleatóriamente com drives, modulações e cara*&¨% a quatro?
Não, as memorias que servem para este tipo não são memorias flash, não memorias eletrônicas que trabalham sobre ciclo de máquina, seria possível se colocarmos uma CPU para receber o codigos do SD e transferir para essas memorias.
|
mjcmello Veterano |
# jun/14
· votar
como o código binário chega no CI?
Vc usa geralmente faz a programação em linguagem de alto nível (C, por exempo) num micro. Depois que vc compila, é gerado um arquivo binário (.bin) que contém o programa no formato de bits que o CI consegue entender e executar as instruções.
Os fabricantes dos CIs disponibilizam interfaces onde vc transfere estes arquivos BIN direto pro chip via USB (ou serial).
|
pedrolake Veterano |
# jun/14 · Editado por: pedrolake
· votar
o Arquivo bin é a matriz binaria/ opcode. Além do C, C++,C#,java também usa-se codificação em Assembly para se gerar o bin, como uma camada intermediaria entre a alta codificação e a baixa.
Atualmente isso é feita por placas de desenvolvimento, que jé lhe traz todo o suporte para o pré teste, debug e gravação.
|
mjcmello Veterano |
# jun/14
· votar
mas alguns processadores ainda precisam de interfaces paralelas ou seriais tipo RS232. Atualmente isso é feita por placas de desenvolvimento, que jé lhe traz todo o suporte para o pré teste, debug e gravação
Sim, eu conheço. Só quis simplificar as coisas.
|
pedrolake Veterano |
# jun/14
· votar
mjcmello
Valeu, pela ajuda
|
Ismah Veterano |
# jun/14
· votar
MauricioBahia
O meu rei, aqui é um assunto mais técnico... achei que ia ficar massante e desvirtuado postar fórmulas matemáticas por lá... Afinal alguns querem saber se a pedaleira/pedal é bom, sem se importar como ela processa o sinal...
mjcmello pedrolake
Entendam que sou quase leigo no assunto, portanto falhas são admissíveis. Não tinha me percebido do compartivo nulo que havia feito.
Ainda assim, a concepção inicial de usar slots removíveis, seria possível, pois a forma como conectaria os circuitos é independente, logo poderia me prover de uma conexão de formato USB (apenas o plugue) para efetuar as ligações (supondo que o CI precise só de 4 vias - Fase, neutro, Data + e Data - ).
|
mjcmello Veterano |
# jun/14
· votar
pedrolake
Não precisava ter editado seu post por causa disoo...
|
mjcmello Veterano |
# jun/14
· votar
Ismah
Veja bem. O programa geralmente fica gravado dentro do CI. Mas nada impede que ele venha a buscar dados em um microSD, que inclusive pode conter o programa de um efeito totalmente diferente.
Aí vai do seu conhecimento e criatividade para prover as soluções num projeto, conhecidas as restrições e limitações do chip.
|
pedrolake Veterano |
# jun/14 · Editado por: pedrolake
· votar
Ismah, bele cara se tiver indo para mais técnico e ficar mais difícil para entender, me da um puxão de orelha, que as vezes eu me empolgo.
Sobre os slots, daria sim, mas seria muito trabalhoso casar os ciclos, geraria muito atraso, por exemplo teclados tem slots, mas não carregam seu conteúdo logo que inseridos precisa entrar no programa ou esperar um positivo do sistema do teclado.. Quando se usa programação usb, se tem uma interface ( que pode ser um micro controlador, ou micro processador) que recebe os dados, guarda temporariamente ( em um espaço muitíssimo curto de tempo) e transfere para os processadores e CPU, no seu ciclo de máquina.. Geralmente o CI nunca é conectado direto no USB ele tem uma camada de conexão, geralmente controlada por um chip que transforma os dados do cliclo USB em seriais. Na porta Serial temos a seguinte pinagem que pode variar, Vdd, Gnd, Rx, Tx onde Rx é receive e tx é transfer.
|
Ismah Veterano |
# jun/14
· votar
pedrolake
Me referia mesmo a criar N circuitos paralelos, próprios para um determinado tipo de efeito, e apenas alterar sua programação.
O USB seria apenas o tipo de plugue (e não conexão) usado, caso forem 4 pinos (não usei os termos comuns, pq pra mim não são usuais). Poderia usar uma conexão MIDI (8 vias se não me engano), XLR3 ou XLR5... Ou mesmo um RJ45.
A ideia do mjcmello é interessante, mas tería problema de lag/delay não? Assim se usasse um CI removível, mesmo um diferente do original, ele teria de ser lido como se fosse nativo da placa... Não?
|
pedrolake Veterano |
# jun/14
· votar
Então Ismah, primeiro você teria que importar os códigos do SD para algum chip e depois inseri-los no processador ou na EEPROM
Na Fractal áudio temos rack processadores com 18 processadores independentes, 2 para cada tipo de efeito, compressores, filtros, overdrives/dist, amplificadores, equalização, modulação, pane e decays, delays, echos, reverbs, e caixas acústicas.
|
Alex guitar man Veterano |
# jun/14
· votar
Ismah
Da impressão que você quer saber mais sobre no hardware hehe, quando fiz eletronica digital.. sabe.. passou muito longe de qualquer coisa parecida... só sei mexer com TL e afins..
|
R. Carvalho Membro Novato |
# jun/14
· votar
Ismah Eu estou preparando um vídeo sobre isso, sobre pedais virtuais, espero que possa ajudar! Tem alguma sugestão?
|
pedrolake Veterano |
# jun/14
· votar
Pedais virtuais, tipo os que tem no JamVox, guitar rig. Isso trabalha de forma diferente de pedaleiras, o código é executado por plugins VST, e dll que simulam a camada do processador DSP de uma pedaleira, o sinal é adquirido pela placa de som e convertido para digital, e processado.
|
Ismah Veterano |
# jun/14
· votar
Alex guitar man
Primeiro penso que preciso saber onde e como a informação trafega. Nada adianta eu saber copiar alguma fórmula pronta. No caso a perguntas vão longe.
R. Carvalho
Falar de guitar rig é redundante... Temos ótimos plug in como o Vermellion, e alguns mais desconhecidos, que eu sei bem pouco, mas que básicamente foi sampleado ruído rosa reproduzido por X amp, em Y caixa, com mic Z, na posição A, a distância B, na sala C... E essa curva de freq é utilizada para o processamento da guitarra.
|
Ismah Veterano |
# jun/14
· votar
pedrolake
Mas o código fonte de uma dll de um chorus, seria possível compilar em Assembly e "injetar" num pedal?!
Afinal temos um DSP (mesmo que emulado), não?
|
pedrolake Veterano |
# jun/14
· votar
Ismah, bele, deixa ver se entendi bem sua pergunta.
DLL é uma ligação dinâmica de biblioteca, bibliotecas que contêm controles ActiveX, ou drivers de sistema legado.
VST é Tecnologia de Estúdio Virtual , simplesmente uma interface que utiliza processamento de sinal para simular o hardware tradicional de estúdio de gravação , dentro de VST , temos o que chamamos de HOSTS, que pode ser um software, um hardware ou ambos.
O VST por sua vez é um codigo escrito em C, C++, java e dot Net, que é compilável e executável. Hoje temos projetos livres e abertos para trabalhar com VST, e criar seu próprio software, efeito,sugiro olharem:
VST java: jVSTwRapper
VST C++ : vstgui
Mas o código fonte de uma dll de um chorus, seria possível compilar em Assembly e "injetar" num pedal?!
Afinal temos um DSP (mesmo que emulado), não?
Neste caso o hardware necessitado, seria algo próximo de um tablet, PC. O que envolve médio/alto custo. Pois precisamos de software para servir de host, ou aumentamos a complexabilidade do nosso VST, para somente termos um hardware como host.
Já para trabalhar com o DSP, não. Hoje temos vários DSP's com alta fidelidade, baixo custo e pouco tempo de desenvolvimento, podendo trabalhar isoladamente ou não, Além dessas facilidade já veem acoplados portas analógicas, para entrada e saída e o sistema de conversão embutida. Posso citar o Spin Semi FV-1 do Keith Barr (Alesis), DSPic, Atmega.
O Processador DSP por ter a parte lógica integrada, já possui o host de hardware e software, o que fazemos é complementar o sotware e o hardware dependendo da necessidade.
|
pedrolake Veterano |
# jun/14
· votar
BEm pra quem quiser brincar o codigo de uma leslie para DSP:
mem del1 1025
equ input REG1 equ dry REG2 equ poti REG3 equ poti_inv REG4 equ sinus0 REG5 equ chout REG6 equ cho_mix REG7
skp run, start wlds SIN0, 10, 2048 wlds SIN1, 5, 512
start: ;--------------------------------------------------------------- ;setup ;--------------------------------------------------------------- rdax pot0, 1 mulx pot0 sof 0.6, 0 wrax SIN0_RATE, 0 ;---------------------------------------------------------------- ; read for tremolo ;---------------------------------------------------------------- clr cho rdal, SIN0 ;load sof 1.99,0.2 sof 1.2,0 wrax sinus0, 0 ;....store
;---------------------------------------------------------------- ;dry/wet mix ;---------------------------------------------------------------- rdax POT1, 1 mulx POT1 wrax poti, 1 sof 1,-1 absa wrax poti_inv, 0
;--------------------------------------------------------------- ;setup ;--------------------------------------------------------------- rdax pot2, 1 mulx pot2 wrax cho_mix, 0
;--------------------------------------------------------------- ;chourus ;--------------------------------------------------------------- rdax ADCL, 0.25 rdax ADCR, 0.25 wra del1, 0 ;cho rda,sin0,sin|compc,del1+200 ;tremolo ;cho rda,sin0,sin,del1+201 ;cho rda,sin0,sin|compc,del1^ ;cho rda,sin0,sin,del1^+1 mulx cho_mix wrax chout, 0
;---------------------------------------------------------------- ;left output channel ;---------------------------------------------------------------- ;dry signal rdax ADCL, 0.5 wrax input, 1 mulx poti wrax dry, 0
;wet signal rdax input, 1 mulx sinus0 ; mulx poti_inv rdax dry, 1 rdax chout, 1 wrax DACL, 0
;--------------------------------------------------------------- ;right channel ;--------------------------------------------------------------- ;dry signal rdax ADCR, 0.5 wrax input, 1 mulx poti wrax dry, 0
;wet signal rdax input, 1 mulx sinus0 ; mulx poti_inv rdax dry, 1 rdax chout, 1 wrax DACR, 0
|
Ismah Veterano |
# jun/14
· votar
Podia explicar cada parte desse código?
|
pedrolake Veterano |
# jun/14 · Editado por: pedrolake
· votar
Primeira parte do código:
mem del1 1025
equ input REG1 equ dry REG2 equ poti REG3 equ poti_inv REG4 equ sinus0 REG5 equ chout REG6 equ cho_mix REG7
skp run, start wlds SIN0, 10, 2048 wlds SIN1, 5, 512
Defino a memoria de delay e a quantidade máxima de alocações mem del1 1025
Defino minhas variáveis e crio ponteiros de registradores equ input REG1 equ dry REG2 equ poti REG3 equ poti_inv REG4 equ sinus0 REG5 equ chout REG6 equ cho_mix REG7
inicio o clico de máquina e carrego meu geradores de ondas senoidais skp run, start wlds SIN0, 10, 2048 wlds SIN1, 5, 512
|