Gerador de música API de áudio da Web Experiência para iniciantes

Contexto e Histórico


Tenho 62 anos. Três anos atrás, decidi tentar escrever um sistema bastante complexo, antes disso havia apenas 20 linhas básicas em 1981, quando três meses de ciência da computação nos deixaram no quinto ano da faculdade de rádio (NSTU, anteriormente NETI). O profissional é considerado o dono do assunto e o ganha, então, na verdade, sou iniciante.

Por outro lado, tenho lidado com algoritmos relacionados à música a maior parte da minha vida, encontrei o processo de desenvolvimento, o hardware, o software e, tanto quanto pude, participei. Em 1978, ele desenvolveu e montou o sintetizador Mini-Moog (acho que foi o primeiro nos Urais), desenvolveu e produziu a primeira placa de som soviética com sintetizador para Agat7 (9) na URSS - o análogo soviético da Apple II, projetou o módulo de síntese FM para uma das fábricas, colaborou com Cakewalk (EUA), PGMusic (Canadá), PowerFX (Suécia) - mais frequentemente sob o esquema: “idéias e implementação são nossas, o orçamento é delas”, participou de exposições internacionais de música MusikMesse (Alemanha), NAMM (EUA) etc.Tudo isso é uma pequena parte do que eu fiz, é claro, não sozinho, mas com a equipe que reuni em um determinado momento.

Além disso, ele participou ativamente da organização do Departamento de Informática (1º na URSS) no Conservatório de Novosibirsk. De 1983 a 2004, ele também ensinou Acústica Musical, Informática, Engenharia de Som e preparou uma dissertação sobre modelagem computacional de performance musical (ISBN 5-9294-0023-7) ...

Sim, tudo começou com monitores em preto-e-branco, disquetes, 256 kB de RAM, um PC pessoal de montagem musical ... Os músicos tinham que explicar tudo em seus dedos, porque na maioria das vezes essas pessoas maravilhosas estavam longe de ser rigorosas e ordenadas. E se um trombonista foi capaz de preencher uma página de texto, ele foi legal, e o violoncelista que programou Chizhik-fawn é apenas uma estrela. A propósito, alguns professores resistiram ativamente a todo esse tópico - mas agora tentam privá-los de computadores!

Essa experiência se tornou muito útil para o meu desenvolvimento, treinamento e aprofundamento no assunto. A ciência da computação, como a educação física, era obrigatória para todas as faculdades e um fluxo constante de estudantes nos permitia realizar muitos testes, experimentos em psicoacústica, reconhecimento de padrões, comunicar com músicos teóricos e ... entender que eles praticamente não têm dados e fórmulas exatos. Pelo menos aqueles que são necessários para o desenvolvedor de equipamentos e programas musicais. Os musicólogos, infelizmente, são essencialmente historiadores que descrevem o passado. Se eles tivessem ciência, então ... provavelmente, chegar à consulta seria um acréscimo do que ao prefeito de uma cidade com uma população de mais de um milhão. Quanto um músico famoso pagaria por uma "fórmula de sucesso" e uma "previsão de vendas"? ..

Então, digamos que precisamos obter respostas que funcionem para esses algoritmos, por exemplo:

a) uma melodia soou (bem, mesmo que já tenha sido gravada com "notas" em MIDI), como determinar onde está o tônico? - O músico fará isso facilmente, mas uma resposta clara (algoritmo) não fornece;

b) existe uma melodia, como escolher os acordes certos para ela? .. Sim, o maestro provavelmente fará melhor que o vocalista, mas ambos, mesmo que dêem instruções, não são muito claros. Claro, do ponto de vista deles, será rigoroso. Somente quando o engenheiro começar a traduzi-lo em um algoritmo, haverá vários difíceis de superar indefinidos ...

c) ou o baterista toca algo moderadamente complicado, ou o saxofonista improvisa - como "decolar" o tamanho, as batidas fortes / fracas, o começo / fim de uma frase musical, desaceleração / aceleração expressivas? Não se trata de EDM (Electronic Dance Music). O músico intérprete sente e cumpre as "regras" transmitidas pelo professor do modo "faça o que eu faço", mas um engenheiro precisa de números, gráficos, proporções, e tudo isso é praticamente impossível de obter do intérprete ou do teólogo musicólogo.

Mas foi nessas perguntas que eu queria encontrar respostas. De fato, uma obra que soa real pode ter um modelo rudimentar - uma composição musical no formato MIDI, que é, em essência, uma "partitura eletrônica". Estes são dados exatos, mas como trabalhar com eles? Em geral, o mais interessante para mim no final foi a análise e conversão de dados MIDI e algoritmos * como:

Modelagem de desempenho 1) ,
Morphing 2) ,
Geração de música 3)

E por tudo isso, a definição de tonalidade, auto-harmonização e fraseado automático são apenas subtarefas separadas ... Com o tempo, foram recebidas respostas aceitáveis ​​para todos esses tópicos, algoritmos e programas que chegou até ao Cakewalk / Sonar.

* Uma pequena descriptografia:

1) análise de dados MIDI quantizados, reconhecimento de "objetos musicais" (frases, figuras) e sua alteração na parte de Velocity, NoteOn, Duration, bem como a imposição de curvas de Tempo, PitchWeel, Expressão e Modulação, a fim de aproveitar ao máximo os recursos do sintetizador e alcançar maior expressividade.

2) análise de todo o trabalho e de partes individuais com o objetivo de transformá-las de um tamanho para outro (por exemplo, de 4/4 para 6/8 ou 7/4), de uma harmonia / harmonia para outras. Além disso, que o resultado seria "comestível" - tal que, na opinião do músico, seja a música "correta" sem violações óbvias.

3) geração de "partitura eletrônica" - um sistema que, ao usar 1) e 2) e reproduzir dados MIDI, produziria uma saída semelhante ao som produzido por um músico, arranjador usando um computador ou um instrumento ao vivo. Essa. não é algo abstrato, gerado pela IA, não apenas para demonstração em um círculo estreito de especialistas, mas completamente "humano" e adequado para uso.

Nesta longa história, houve alguns momentos engraçados, se você olhar a partir do presente, por exemplo, nos primeiros 386 PCs, tive que dar 2 novos moscovitas "Chignon" (IL 2715), cada 290 mil rublos. Ou, como conservatório, quase adquiri um Minsk 32 usado no ramo siberiano da Academia de Ciências - acredito que esse monstro, mais fraco que um smartphone, parecia ocupar 60-80 m 2 e consumia eletricidade, provavelmente como um bar + sauna ...

Então, meus funcionários programavam (trabalhamos com Z80, MOS 6502, "Electronics-60", nos primeiros PCs Win da GDR, com processadores de sinal TMS e Analog Devices ...), todos os dias eu via "krakozyabra" nas telas e pensava que todos eles (programadores) "não são deste mundo". Embora a partitura não seja mais fácil! E, afinal, alguns músicos ouvem música, observam as notas e até obtêm prazer estético, se gostam! Em geral, pareceu-me que todos que escrevem o código são gênios e isso não é meu ... Mas, como o futuro mostrou, eu estava enganado. Não posso dizer que muito tempo foi perdido, mas provavelmente o destino de muitos projetos teria sido completamente diferente ...

Primeira experiência prática


Com a experiência anterior, aprendi que as coisas mais “difíceis” e “desagradáveis” para um programador são duas: GUIs e interfaces (ou seja, alternar de um ambiente para outro. Por exemplo, receber dados MIDI de um dispositivo externo), especialmente quando Não há soluções prontas adequadas.

Primeiro, peguei o AutoPlay Media Studio (Indigo Rose Software) - é um pouco de designer para manequins. Inicialmente, aparentemente projetado para criar rapidamente um menu de CD, DVD e autorun.exe. Mas aconteceu que há um mar de funções, e por dentro (no LUA) você pode fazer quase tudo: animação, tocando ogg. Assim, a maior parte do trabalho "desagradável" (a propósito, acho que os recém-chegados simplesmente param nesses momentos) não poderia ser feita - tudo está pronto.

Como resultado, durante 2 meses em casa, depois de horas, escrevi um análogo de um programa de treinamento musical que desenvolvemos e entregamos oficialmente. Além disso, com outra GUI, funcionalidade mais interessante - é bom criar conteúdo de áudio e gráfico e testar para mim não é difícil. Ele o mostrou no escritório e perguntou a um dos apresentadores quanto tempo ele precisava para criar essa versão. A resposta foi 6 meses! Aqui, aparentemente, pensei pela primeira vez: talvez eu não devesse me dedicar apenas a isso, mas começar a estudar alguma coisa e tentar fazer algo sério e ... organizei o trabalho corretamente. De fato, sua resposta foi honesta - simplesmente, "eles" não usariam o construtor, mas escreveriam tudo eles mesmos.

Desde 2009, dediquei parte do tempo a trabalhar em um estúdio de gravação e criar anúncios em vídeo. Certa vez, um amigo perguntou se era possível criar rapidamente (e não de forma cara) cem clipes de 1 minuto (aparentemente para promoção no YouTube). Amor terrível essas tarefas! (A propósito, eu sei há muito tempo que, se um programador for forçado a fazer algo não muito criativo três vezes, ele escreverá um script). Perguntei aos programadores e, se existe, como ele pode "pressionar" os botões na tela? Uau, isso é AutoIt!

Em geral, por diversão, escrevi um script que:

  1. Opera lançada, abriu o site de alguma empresa (ao que parece, holandesa) especializada em conversão de texto em fala;
  2. Na página, rolei para RU (dublagem em russo);
  3. abriu um arquivo * .txt no bloco de notas, onde 20 a 30 piadas foram copiadas antecipadamente da rede, parágrafos;
  4. copiou uma piada e colou no campo do site;
  5. Lançou o SoundForge gravado e no site ativou a reprodução;
  6. gravou e salvou o resultado em uma pasta em mp3 com o nome - “número de série + os 15 primeiros caracteres do texto da própria piada”.

Funcionou e fiquei feliz quando criança. Depois disso, eu disse ao meu amigo - não há problema em fazer 100 clipes baratos (de boa qualidade), basta pegar fotos, músicas, manchetes, legendas, descrições etc. - vou colocar tudo em ordem (em tamanho, cor), colocar em pastas, criar um modelo + Eu determinarei suas variações (aleatórias!) E ... posso fazer você não 100, mas 200 desses clipes (no Vegas Pro com AutoIt é fácil), observá-los seletivamente e você já selecionará a quantidade certa para si mesmo ... Você não precisava fazer tudo isso, mas obrigado por sua pergunta!

Mais tarde, gradualmente comecei a corrigir algo no site, ler algo, tentar algo por interesse esportivo. Em particular, para executar scripts em JavaScript / CSS para a animação simples necessária para a criação de vídeo. Então, algumas idéias gerais e um pouco de experiência apareceram em PHP, HTML, jQuery, JavaScript, CSS, MySQL. Os “crack-overs” quase desapareceram e eu parei de ter medo desse mesmo tópico de “programação”. O ponto de virada final em relação a ela e suas habilidades ocorreu quando eu entendi dois pontos:

  • toda essa esfera é um mundo sem fim e mesmo um programador forte nem sempre responderá à pergunta se não for a sua área. Assim como em qualquer outro campo. De um modo geral - sim, bem, e as nuances - procure um especialista restrito, mas procure se aprofundar. Felizmente, existe uma rede.
  • Resolvi 99% das perguntas que tive durante o desenvolvimento e, às vezes, com mais eficiência do que nos exemplos encontrados na Internet. Ao mesmo tempo, entendo que, pelo estilo de escrever, meu código pode ser horrível.

Gerador de música


Não me lembro de como me deparei com a API de áudio da Web; nesse momento, eu não tinha uma LLC, um IP ou uma equipe, mas depois de 2-3 experiências, quando o "som tocou", eu me tornei o mais sério para mim. o projeto é um gerador de música (que agora chamo de AlexAr ). De fato, no Web Audio havia todo o necessário - geradores, filtros, envelopes, mixers, um processador (em C ++) e jQuery, JavaScript e CSS nos permitiram resolver todos os problemas com a GUI. De fato, no Web Audio, você pode fazer, como me parece, o processamento e a síntese de sons de qualquer complexidade.

Aqui o verdadeiro trabalho começou, quase, como na juventude, quando você tem mais de 25 anos. 3-4 vezes, comecei de novo, descartando uma versão do sistema e coletando uma nova. Às vezes, mudar radicalmente a abordagem para projetar um módulo específico. Ao mesmo tempo, fiz muitas experiências e testei novos algoritmos que não havia usado antes. Ele fez várias descobertas para si mesmo que não teriam acontecido sem iniciar o sistema. Em particular, na psicoacústica, na percepção da “similaridade” das faixas musicais - quais parâmetros darão músicas “diferentes” e quais, com suas diferenças formais, são “iguais” de ouvido. Algumas coisas muito úteis foram encontradas no uso da harmonia, na imitação durante a arrancada, no fraseado ao mudar de acordes e no melhor entendimento da "precisão do estilo". É possível que tudo isso esteja aberto e descrito. Mas na vida acontece frequentementeo que é mais fácil (e mais útil) pensar em si mesmo.

Sim, seria ótimo se a API de áudio da Web permitisse a ligação, usando o VSTi para síntese ou algo mais pronto. Por outro lado, houve uma ocasião para recordar a juventude e escrever todos os sintetizadores necessários, para inventar, otimizar, tanto na estrutura quanto em algoritmos e conteúdo. Quase como nos velhos tempos, quando um artista não apenas pintou, mas também pintou a si próprio ...

Como resultado, após várias propinas e alterações, modernizações (que era uma boa escola e treinamento cerebral), o sistema tornou-se estável e totalmente operacional. Bem, não na forma, é claro, quando pode ser transferido para terceiros. É quase como um carro caseiro que apenas "obedece" ao criador e, se ele quebrar, não haverá ninguém para consertá-lo ...

imagem

Em geral, a composição finalizada por 4-5 minutos, é criada em 40-50 segundos. (no Intel Core i5, 2,8 GHz, 12 GB de RAM). Eu pedi uma tarefa, por exemplo, "faça 100 faixas de dança", mudei para almoçar ou fui passear. Ele chegou em uma hora e, se o sistema não travasse, ele ouvia e determinava %% da adequação do resultado. Então eu mudei algo nos parâmetros e comecei novamente. Se eu me comportei "razoavelmente", ou seja, defina parâmetros que não levem ao desfoque do estilo (por exemplo, isso acontecerá se a harmonia do jazz for aplicada no EDM); 90-95% das faixas parecerão decentes; caso contrário, 60-70 %% poderão ser jogadas fora.

O sistema funcionou, você pode se alegrar, mas parece que começaram problemas ridículos, mas reais: "Como posso ouvir tanta música?" E a realização de mais um momento: "E quem é o autor?" Um bom amigo "no assunto", disse que "o autor é um computador, incl. não pertence a você "... Se for o caso, é uma pena, inseri músicas, frases, harmonias, formulários lá, configurei algumas centenas de parâmetros, onde às vezes 5 ms são refletidos no resultado, e o sistema apenas gerou o resultado, novamente de acordo com o algoritmo, que Investi nele ... pesquisei na rede - não entendi isso em um caso semelhante com direitos autorais ...

Como resultado, lancei cerca de 3.500 músicas com um tempo total de reprodução de mais de 200 horas e parei, ou melhor, mudei - pretendo lançar o SongModeler - um gerador de arranjos on-line baseado em abordagens elaboradas no AlexAr. Bem, exemplos de geração automática de música no AlexAr podem ser encontrados aqui .

Para ouvintes muito exigentes, quero dizer que gastei mais tempo em programação, harmonia, melodia, forma (ou seja, notas), mas síntese e mixagem, é claro, podem ser muito melhores. No final, verifiquei as idéias, a própria abordagem - é verdade. E para tais projetos, é necessária uma equipe, os solitários raramente abordam tópicos interdisciplinares. É verdade, por outro lado, o trabalho se torna muito mais confortável quando não há ninguém “nem acima nem acima de você”. Mas a verdadeira ironia é que, quando eu tinha uma equipe e recursos, não tinha como objetivo algo assim porque achava muito complicado.

Já em algum lugar no meio do trabalho no AlexAr, percebi que é bem possível que, se eu começasse a programar antes, 10 programadores (às vezes eu tinha muito mais na equipe) pudessem ser substituídos por três :

Eu mesmo (design, programação, teste, conteúdo);
muito inteligente - a gargalos, abordagens de inteligência, novas bibliotecas, serviços (imediatamente após o ensino médio ou de 3 a 4 cursos);
workaholic produtivo para tarefas rotineiras, sem imaginação, que não coça as mãos para aplicar hoje o que apareceu ontem.

Estou certo de que a tarefa seria resolvida mais rapidamente e quantos nervos e dinheiro seriam economizados! De onde vem a economia? Então, antes do almoço, sentei-me para testar alguma coisa - "bem, o botão não é conveniente e o indicador seria deslocado mais e para a direita". OK - sentei-me e fiz isso em meia hora, o clima era de 5 ou mais. E como isso seria decidido mais cedo no meu escritório com a equipe, quando você mesmo não escrever? No começo, eu perguntava quanto tempo levaria, depois desenhei no PhotoShop, contei os pixels, escrevi um TK, incluí-o no plano, esperei alguns dias ou ... recusou - ele funciona - já funciona. E tão constantemente.

Conclusões e motivação


Não sei quão harmoniosamente poderei formular as conclusões reais, mas ainda não no meu campo, mas tentarei.

  1. , . , , , , . , . , 10 , ( ?).
  2. — . , - macOS Android, . , , . , .
  3. GUI , — . , - . , , -.
  4. - - , - — , , . , , - — . — «». 7 , 6 . — , — . , - . ? — , . - , « » — .. , «» .
  5. , , (software engineer, !) . , , ( ) -, . , , engineer, , «, », .. «Copy Paste».
  6. , , «» , , - . . - … , . . — . , , , , , .
  7. , . , , IDE, . , , — NotePad++, FireFox ZIP- — , . «» . , « », .
  8. ? . , , — UnDo/ReDo. JavaScript , , — . , , , . UnDo — , , , .

Em geral, parece-me que os adultos, especialmente aqueles com formação em engenharia que não se envolveram em programação na vida, deveriam tentar. Se você conhece o seu assunto, 50% já está feito. Você precisa de lógica, um entendimento claro da “física, natureza” da sua área e isso, muito provavelmente, você tem. Não há com o que se preocupar em “casacos tortos” e o JavaScript é muito mais simples que o russo ou o inglês. No final, você pode não se tornar um verdadeiro engenheiro de software, mas essas habilidades, mesmo as pequenas, adicionarão outra opção às suas qualificações de engenharia. Sim, você imediatamente deixará de encarar as pessoas de TI como pessoas com uma auréola e poderá definir uma tarefa para elas em um nível mais competente. Afinal, eles vão para a sua área, onde você é profissional. Ou talvez você esteja implementando seu projeto com seus dados, com os quais sempre sonhou,mas as condições para sua implementação não deram certo - não sei, acho que tive sorte porque não tinha medo de tentar. E de qualquer maneira - programação para um engenheiro, ISTO É LIBERDADE!

Muitas felicidades a todos.

PS: Se alguém está interessado na história do meu trabalho ao longo dos anos de uma forma mais detalhada, então está aqui .

All Articles