
Se você já visitou um cinema, provavelmente ouviu
Deep Note , a
marca registrada do som THX . Este é um dos primeiros sons a serem ouvidos no início dos trailers em salas certificadas pela THX. Eu sempre gostei do seu crescendo reconhecível, começando com uma terrível mistura de notas e terminando com um brilhante e grand finale (
som ). Que delícia para o ouvido!
Ontem (provavelmente) sem motivo, eu estava interessado na origem desse som e fiz uma pequena pesquisa. Fiquei profundamente tocado com a história dele, que quero compartilhar com você. Então continuamos - e nós mesmos criaremos esse som, preparamos tesouras e cola!
A melhor fonte de informação sobre o som que pude encontrar é, na minha opinião, sua composição eletroacústica completa, publicada no excelente
Music Thing Blog em 2005. Aqui está o
link para o post .
Alguns fatos sobre o som:
- Foi criado pelo Dr. James Andy Moorer em 1982.
- Um dia na história, foi perdido 4.000 vezes por dia, quase a cada 20 segundos! Citação do Dr. Moorer:
“Gostaria de dizer que o som do THX é o trabalho mais popular da música computadorizada no mundo. Pode ser verdade ou não, mas parece legal!
- Ele é criado em um computador ASP (Audio Signal Processor) que pode sintetizar sons em tempo real.
- Um programa de 20.000 linhas de código C gerou dados para reprodução no ASP. Os dados gerados consistiam em 250.000 linhas que foram processadas pelo ASP.
- Os osciladores de voz usam um tom de violoncelo digitalizado como sinal. Dr. Murer lembra que havia cerca de 12 harmônicos na amostra. O ASP pode executar 30 desses osciladores em tempo real (para comparação, meu laptop agora pode processar mais de 1000 deles sem falhas).
- O som em si é protegido por direitos autorais, mas eis o problema: o código do Dr. Murer depende de geradores de números aleatórios (processo generativo) e cada vez que o som é um pouco diferente. Portanto, não creio que seja seguro dizer que o próprio processo é ou pode ser "protegido por direitos autorais". O som em si, sim, a amostra específica está protegida.
- O som estreou no trailer da THX, "Return of the Jedi", antes de sua estréia em 1983.
- As características generativas do processo em algum momento tornaram-se problemáticas. Após o lançamento de The Return of the Jedi, o registro Deep Note original foi perdido. O Dr. Murer recriou o trabalho para a empresa, mas eles reclamavam constantemente que não parecia o original. No final, a gravação original foi encontrada e armazenada em um local seguro.
- Dr. Dre pediu permissão para usar a amostra em sua música, mas ele foi recusado. Ele usou de qualquer maneira e conseguiu uma ação judicial.
- Na obra de Metastaseis, de Janis Xenakis (1954), há um crescendo de abertura muito semelhante (como em outras obras de vários compositores). Mas começa com um tom único e termina com um cluster de tons semi-sintonizados em vez de completamente consoante, como no Deep Note. A gravação de som do pedido de patente pode ser ouvida aqui .
Certifique-se de ouvir o som, porque quando recriarmos o Deep Note, nos referiremos a essa gravação específica.
Aqui estão alguns fatos técnicos / teóricos antes de iniciar a síntese sonora:
- Minha observação: na entrada original do site do Escritório de Patentes, o tom principal está entre D e Eb, e nas versões mais recentes o valor fundamental está entre E e F. Usaremos a constante D / Eb original. Novas opções são geralmente mais curtas, se não erradas. Obviamente, prefiro a opção que foi registrada no escritório de patentes.
- Segundo o Dr. Murer (e também confirmado pelos meus ouvidos), o fragmento começa com osciladores sintonizados em frequências aleatórias entre 200 Hz e 400 Hz. Mas os osciladores não estão apenas vibrando - suas frequências são moduladas aleatoriamente e usam filtros de suavização para suavizar transições aleatórias de tons. Isso continua até o início do crescendo.
- Dentro do crescendo e no final do segmento sonoro, os randomizadores ainda modulam as frequências dos osciladores, de modo que nenhum deles é estável em um dado momento. Mas a faixa de varredura aleatória é tão estreita que simplesmente adiciona um som natural / coral.
- O Dr. Murer lembra que havia cerca de 12 harmônicos distintos no espectro do som do violoncelo digitalizado.
- Tanto quanto eu sei, os valores para o gerador (que foram usados para obter direitos autorais) por escrito nunca foram publicados. O Dr. Moorer diz que pode gravá-los se tivermos permissão da THX. Mas acho que não é necessário recriar o som.
- O som no final (tecnicamente não é um acorde) - no meu ouvido, apenas a adição das oitavas do tom fundamental. Assim, ao reconstruir, começamos com osciladores sintonizados aleatoriamente (entre 200 e 400 Hz), fazemos uma varredura e finalização mais ou menos complicada aplicando oitavas à afinação entre o D / Eb baixo.
Então, vamos começar. Minha ferramenta de trabalho aqui é o SuperCollider. Vamos começar com uma amostra simples. Eu quero usar uma onda dente de serra como fonte, ela tem um espectro rico e harmônico de componentes pares e ímpares. Mais tarde, pretendo filtrar os vértices. Aqui está um trecho da parte inicial do código:
Eu escolhi 30 osciladores para gerar som, de acordo com as capacidades do computador ASP, como disse o Dr. Murer. Criei uma matriz de 30 frequências aleatórias entre 200 e 400 Hz, distribuí-as aleatoriamente pelo campo estéreo usando Pan2.ar com o argumento rrand (-0,5, 0,5), atribui frequências a osciladores dente de serra (30 cópias).
É assim que parece .
Se você estudar as informações do Dr. Moorer e / ou ouvir atentamente o fragmento original, poderá ouvir que as frequências do oscilador são aleatoriamente deslocadas para cima e para baixo. Eu gostaria de adicionar este efeito para um som mais orgânico. A escala de frequência é logarítmica, portanto, nas frequências mais baixas, deve haver faixas mais estreitas de oscilação do que nas mais altas. Isso pode ser feito classificando nossas frequências geradas aleatoriamente com LFNoise2 (que gera valores aleatórios interpolados quadraticamente) de argumentos mul em ordem dentro da macro Mix. E também adicionei um filtro passa-baixo para osciladores com uma frequência de corte de cinco vezes a frequência do oscilador e 1 / q moderado:
Veja como o exemplo soa com as edições mais recentes.
Isso já parece um bom ponto de partida, então vamos começar a implementar uma varredura, muito rude no começo. Para implementar uma varredura, primeiro você precisa determinar as frequências finais para cada oscilador. Não é muito simples, mas também não é muito difícil. O tom principal deve estar entre D e Eb baixo, portanto a frequência média para esse tom será de 14,5 (0 é C, contando cromaticamente, sem a primeira oitava). Assim, para 30 osciladores, convertemos frequências aleatórias entre 200 e 400 Hz em um valor de 14,5 e as oitavas correspondentes. De ouvido, escolhi as 6 primeiras oitavas. Portanto, a matriz final de frequências é a seguinte:
(numVoices.collect({|nv| (nv/(numVoices/6)).round * 12; }) + 14.5).midicps;
Usaremos a varredura de 0 a 1. As frequências aleatórias são multiplicadas pelo valor
(1 − )
, e as frequências alvo são multiplicadas pela própria varredura. Portanto, quando a varredura for 0 (o início), a frequência será aleatória. Quando a varredura é 0,5, ocorre
(( + ) / 2)
e, quando é 1, a frequência será o valor final. Aqui está o código modificado:
O som está
aqui .
Como eu disse, essa é uma varredura muito grosseira. Aumenta linearmente de 0 a 1, o que não é consistente com a composição original. Você também deve ter notado que as últimas oitavas soam horríveis porque são sintonizadas para aperfeiçoar oitavas e se fundem umas com as outras como tons de base e conotações. Vamos corrigir isso adicionando um balanço aleatório na fase final - exatamente como foi feito no início, e parecerá muito mais orgânico.
Primeiro, você precisa corrigir a fórmula de varredura de frequência geral. O anterior foi apenas para julgamento. Se olharmos para o original, notamos que nos primeiros 5-6 segundos há muito poucas mudanças no som. Depois disso, ocorre uma varredura rápida e exponencial, que leva os osciladores a intervalos de oitava finitos. Aqui está a opção que eu escolhi:
sweepEnv = EnvGen.kr(Env([0, 0.1, 1], [5, 8], [2, 5]));
Aqui, uma transição de 0 para 0,1 leva 5 segundos e uma transição de 0,1 para 1 leva 8 segundos. As curvaturas para esses segmentos são definidas em 2 e 5. Mais tarde, ouvimos o que aconteceu, mas primeiro precisamos corrigir os intervalos finais novamente. Como antes, adicionamos oscilações aleatórias com o LFNoise2, cujo intervalo é proporcional à frequência final do oscilador. Isso tornará o final mais orgânico. Aqui está o código modificado:
Aqui também ajustei a frequência de corte do filtro passa-baixas ao meu gosto. Eu gosto de consertar as coisas se o resultado não piorar ... De qualquer forma,
foi o que aconteceu .
Eu realmente não gosto desse padrão de digitalização. Precisa esticar o início e acelerar o acabamento. Ou espere ... é realmente necessário implementar o mesmo circuito para todos os osciladores? Absolutamente não! Cada oscilador deve ter seu próprio circuito com valores ligeiramente diferentes de tempo e curvatura - tenho certeza de que será mais interessante. As conotações de alta frequência de um cluster de dente de serra aleatório ainda são um pouco irritantes, por isso adicionamos ao resultado geral um filtro passa-baixo, cujo corte é controlado por um valor "externo" global que não tem nada a ver com os circuitos do oscilador. Aqui está o código modificado:
Uma pequena alteração tornou a digitalização um pouco mais interessante. Um filtro passa-baixas de 2000 Hz ajuda a domar o cluster inicial.
É assim que parece .
Há mais uma coisa que tornará o processo mais interessante. Lembre-se, classificamos osciladores aleatórios no começo? Bem, agora podemos classificá-los em ordem inversa e garantir que os osciladores em frequências aleatórias mais altas acabem nas vozes mais baixas após o crescendo e vice-versa. Isso adicionará mais "movimento" ao crescendo e é consistente com a estrutura do fragmento original. Não tenho certeza de que o Dr. Murer tenha programado dessa maneira, mas existe esse processo no registro, e parece legal, seja um produto aleatório de um processo generativo ou uma escolha especial. (Ah, eu disse isso? Se o processo oferece essa opção, então essa é a escolha ... ou não?). Assim, mudaremos a ordem de classificação e a estrutura do código para que os dentes de serra com frequências mais altas caiam em vozes mais baixas no final e vice-versa.
Mais uma coisa: você precisa de um baixo mais alto. Agora todas as vozes têm a mesma amplitude. Quero que sons baixos soem um pouco mais altos e desbotem proporcionalmente ao aumento da frequência. Portanto, modificamos o argumento mul para Pan2 adequadamente. Reajuste as frequências de corte dos filtros passa-baixo para osciladores individuais. E vou adicionar um esquema de escala de amplitude que entrará em vigor sem problemas e desaparecerá no final, e se libertará do scserver. Mais algumas configurações numéricas aqui e ali - e aqui está o código final:
E aqui está a
gravação final do trabalho .
Você pode comparar com o
original .
Sim, esta é a minha interpretação. E, é claro, pode ser otimizado até a morte, alterando padrões, frequências, distribuição, o que for ... não obstante, acho que essa é uma tentativa digna de preservar o legado sonoro. Gostaria de ouvir seus comentários e / ou suas próprias tentativas de sintetizar esse crescendo.
Sim, e aqui está outra coisa que fiz por diversão. Lembre-se de que lhe disse que foram necessárias 20.000 linhas de código C. Para ter certeza de que o Dr. Moorer precisou escrever tudo à mão, esse número não é surpreendente. Mas você sabe, devido à popularidade do Twitter, estamos tentando compactar tudo em 140 caracteres de código. Por prazer, tentei reproduzir os elementos básicos da composição em 140 caracteres do código. Eu acho que a amostra ainda parece legal, aqui está o código (aqui com o tom principal F / E):
play{Mix({|k|k=k+1/2;2/k*Mix({|i|i=i+1;Blip.ar(i*XLine.kr(rand(2e2,4e2),87+LFNoise2.kr(2)*k,15),2,1/(i/a=XLine.kr(0.3,1,9))/9)}!9)}!40)!2*a}
E
aqui está o som que esta versão gera.
Em
um documento - todo o código desta página para suas experiências.
Bom crescendo, amigos!