Geração de música com a API Gemini usando o Vite

この記事は約10分で読めます。
スポンサーリンク

Coisas que eu quero fazer

Usaremos a API Gemini do Google com NodeJS para gerar música.

A implementação será apenas de front-end; o back-end utilizará o Google.

Você precisará obter uma chave da API do Google.

Perceber:Até o momento da redação deste artigo, a geração de música do Gemini é uma função em versão prévia. As especificações e outros detalhes podem mudar no futuro.

Este artigo descreve uma implementação do lado do cliente usando NodeJS.

No entanto, esse método não é recomendado pelo Google, pois pode potencialmente expor a chave da API ao usuário.

Por favor, limite o uso a fins pessoais ou experimentais.

Este artigo baseia-se principalmente na seguinte página.

No entanto, o exemplo de JavaScript na página abaixo está incorreto e não funciona no momento da redação deste texto.

Lyria RealTime を使用した音楽生成  |  Gemini API  |  Google AI for Developers
Gemini API で Lyria のリアルタイム音楽生成を使用して構築を開始する

Licença da música gerada

Entende-se que o criador detém os direitos autorais da música gerada e é responsável por seu uso.

O código-fonte encontra-se na página seguinte. Verifique se há uma versão mais recente antes de utilizá-lo.

Gemini API 追加利用規約  |  Google AI for Developers
スポンサーリンク

Preparar

Criando uma chave de API

Acesse a página seguinte para obter sua chave de API.

Sign in - Google Accounts

Criação de projeto

Crie uma pasta para usar no projeto.

Abra o prompt de comando e execute o seguinte comando na pasta que você criou para criar um projeto Vite.

npm init vite@latest

No momento em que este artigo foi escrito, a versão do Vite era a 6.3.5.

Se desejar que as configurações sejam as mesmas, especifique a versão.

Você deverá informar o nome do projeto que deseja criar; digite-o.

(Neste artigo, usamos o termo música. )

Você será questionado sobre qual framework usar, então selecione Vanilla.

Em seguida, selecione JavaScript como idioma.

A criação do projeto está agora concluída.

Instalação da Biblioteca

Após a conclusão da criação do projeto, instale as bibliotecas necessárias.

cd Gemini
npm install @google/genai
npm install

Isso conclui a preparação.

スポンサーリンク

Modificação de código

Exemplo de correção

Conforme mencionado acima, o exemplo na página oficial não funciona.

O código corrigido é o seguinte. Por favor, altere a chave da API para a que você forneceu. (Ela precisa ser carregada a partir do HTML para funcionar.)

prompts ponderados:[{ text: ‘piano solo, slow’, weight: 1.0 }]A dica para um solo de piano lento, na linha marcada com uma vírgula, é o enunciado. Por favor, altere-o para o que você quiser.

No entanto, embora `musicGenerationConfig` seja a configuração, alterá-la não pareceu afetar a música gerada. (Não consegui determinar se não estava funcionando de forma alguma ou se o código estava incorreto.)

pós-escrito

As configurações em musicGenerationConfig parecem corretas. (Eu não tinha certeza se a configuração mais simples, BPM, estava funcionando, mas configurações como onlyBassAndDrums funcionaram. Além disso, o prompt parece ter prioridade sobre essas configurações. Isso pode ser devido ao peso.)

Aliás, a documentação oficial afirma que a função para atualização é session.reset_context(), mas isso também está incorreto; a função correta é session.resetContext().

import { GoogleGenAI } from '@google/genai';

const ai = new GoogleGenAI({
  apiKey: "API Key", // Do not store your API client-side!
  apiVersion: 'v1alpha',
});

const session = await ai.live.music.connect({
  model: 'models/lyria-realtime-exp',
  callbacks: {
    onmessage: async (e) => {
      console.log(e)
    },
    onerror: (error) => {
      console.error('music session error:', error);
    },
    onclose: () => {
      console.log('Lyria RealTime stream closed.');
    }
  }
});

await session.setWeightedPrompts({
  weightedPrompts: [{ text: 'piano solo, slow', weight: 1.0 }],
});
await session.setMusicGenerationConfig({
  musicGenerationConfig: {
    bpm: 200,
    temperature: 1.0
  },
});

await session.play();

Utilização de música gerada por computador

A música gerada será enviada para a seguinte função de retorno de chamada.

    onmessage: async (e) => {
      console.log(e)
    },

Consegui reproduzir a música consultando a página seguinte.

No entanto, como não tinha certeza sobre os termos de licenciamento do código que usei como referência, optei por não incluir o próprio código.

Sign in - Google Accounts

O processo é o seguinte:

  • e.serverContent.audioChunks[0]Converter dados (base64) para binário (int16)
  • Converter dados binários (int16) para float32 e criar um AudioBuffer.
  • Defina o AudioBuffer criado como AudioBufferSourceNode e reproduza-o.
スポンサーリンク

solução de problemas

Segue uma lista com marcadores das coisas em que tive dificuldade.

  • Como a música criada em um único evento é curta (1-2 segundos), você precisa participar de vários eventos para criar músicas com uma duração razoável.
  • O primeiro evento que acompanha um comando onmessage é um evento de configuração (Setup) e não inclui música.
  • A música é gerada incessantemente, sem fim. (A canção não tem fim.)
  • A música não tocava sem interação do usuário. (Resolvemos isso exibindo um botão assim que a geração da música fosse concluída; ao clicar no botão, a música começaria a tocar.)
  • Erros de compilação do Vite/erros em navegadores mais antigos podem ser causados ​​pelo uso de `await` no nível superior. Para resolver esses erros, você precisará modificar o código ou alterar as configurações. Se quiser que funcione em navegadores mais antigos, precisará modificar o código novamente.
スポンサーリンク

Resultado

Consegui gerar música usando a API Gemini.

スポンサーリンク

Sites que utilizei como referência

Lyria RealTime を使用した音楽生成  |  Gemini API  |  Google AI for Developers
Gemini API で Lyria のリアルタイム音楽生成を使用して構築を開始する

コメント

タイトルとURLをコピーしました