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.

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.

Preparar
Criando uma chave de API
Acesse a página seguinte para obter sua chave de API.
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@latestNo 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 installIsso 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.
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



コメント