3 técnicas interessantes de processamento de som usando JES
JES possui suporte básico para edição de som, mas você pode utilizá-lo para realizar algumas tarefas úteis.
JES é um programa que permite modificar imagens, sons e vídeos de forma programática. JES possui muitas funções integradas e ferramentas de depuração para ajudá-lo a aprender a linguagem Jython.
Ao importar um arquivo usando JES, você pode examinar visualmente suas ondas sonoras, usando uma janela separada. Você também pode manipular os valores de amplitude dessas ondas sonoras em pontos específicos. Isso pode ajudá-lo a editar o arquivo de som para obter efeitos diferentes.
Como alterar o volume de um clipe de som
Ao renderizar uma imagem no JES, você pode acessar os pixels individuais que ela contém. Você pode obter certas técnicas de processamento de imagem editando os valores das cores vermelho, verde e azul para cada pixel.
Da mesma forma, um arquivo de som contém muitas "amostras" individuais que são pequenos pedaços de dados sonoros. Você pode editar um som importado alterando o valor da amplitude em cada amostra.
O código usado neste projeto está disponível neste repositório GitHub sob a licença MIT.
- Abra o aplicativo JES no seu computador.
Crie uma nova função chamada changeVolume(), que recebe como entrada o volume que você deseja alterar:
def changeVolume(vol):
Dentro da função, abra um prompt para solicitar ao usuário que selecione um arquivo de som válido. Embora JES não seja compatível com arquivos mp3, você ainda pode importar arquivos WAV. Adicione alguma validação para garantir que o arquivo seja compatível:
file = pickAFile() if file != None and file.endswith(".wav"): # Code for valid file else: print("Invalid file selected. Please choose a valid WAV file.")
Se o arquivo selecionado for válido, crie um objeto sonoro a partir dele:
sound = makeSound(file)
Faça um loop por cada amostra do som:
for i in range(0, getLength(sound)):
Verifique se o usuário passouna função de aumentar o volume. Nesse caso, obtenha o valor de amostra nesse índice usando a função getSampleValueAt() integrada. Aumente o volume dobrando a amplitude e use setSampleValueAt() para definir o novo valor:
if vol == 'up': sampleVal = getSampleValueAt(sound, i) setSampleValueAt(sound, i, sampleVal * 2)
Verifique se o usuário passou para baixo na função para diminuir o volume. Nesse caso, obtenha o valor da amostra nesse índice e divida-o por 2, para reduzir a amplitude:
if vol == 'down': sampleVal = getSampleValueAt(sound, i) setSampleValueAt(sound, i, sampleVal / 2)
Use a função explore() para abrir a janela do explorer para o som:
explore(sound)
Clique no botão Carregar Programa, localizado entre a área de programação e a linha de comando. Salve o arquivo se solicitado:
-
Execute a função changeVolume() na linha de comando, passando "up" como argumento para a função:
changeVolume("up")
Usando a janela do explorador de arquivos, navegue até um arquivo de som válido:
Clique no botão Reproduzir todo o som usando a nova janela:
Na linha de comando, execute changeVolume() novamente com o valor "down" como argumento e selecione um arquivo:
changeVolume("down")
Na janela do explorer, você verá que as ondas sonoras são menores. Clique no botão Reproduzir todo o som usando a nova janela:
Como reverter um clipe de som
Você pode reverter um som criando um novo som vazio e copiando cada amostra do som original para o novo som na ordem inversa.
Em uma nova função, solicite ao usuário que selecione um arquivo WAV e verifique se o arquivo é válido:
def reverseSound(): file = pickAFile() if file != None and file.endswith(".wav"): # Code for valid file else: print("Invalid file selected. Please choose a valid WAV file.")
-
Crie um novo objeto sonoro a partir do arquivo selecionado:
sound = makeSound(file)
Use a função integrada makeEmptySound() para criar um novo objeto de som vazio. Isso consistirá no mesmo número de amostras que o som original. O valor da amplitude para cada amostra será 0:
newReversedSound = makeEmptySound(getLength(sound))
Faça um loop por cada amostra do novo objeto de som vazio:
for i in range(0, getLength(newReversedSound)):
Para cada amostra nesse ponto, obtenha a amostra na extremidade oposta do som. Por exemplo, se o comprimento da amostra for 100 e o índice atual for 0, obterá o valor da amostra no índice 99. Da mesma forma, se o índice atual for 3, obterá o valor da amostra no índice 96:
sampleVal = getSampleValueAt(sound, getLength(sound) - 1 - i)
Copie o valor da amostra da outra extremidade do som para o índice atual do novo som:
setSampleValueAt(newReversedSound, i, sampleVal)
Explore o novo som invertido. Você também pode explorar o som original para fins de comparação:
explore(sound) explore(newReversedSound)
- Clique no botão Carregar Programa, localizado entre a área de programação e a linha de comando. Salve o arquivo se solicitado.
Execute a função usando a linha de comando:
reverseSound()
Veja o som original e o som invertido usando as janelas do explorer. Clique no botão Reproduzir todo o som para ouvir as diferenças:
Como juntar dois clipes de som
Para juntar dois clipes de som, você pode pedir ao usuário para selecionar dois arquivos WAV separados. Copie cada amostra de ambos os sons no novo objeto sonoro.
Crie uma nova função chamada joinSounds():
def joinSounds():
Use a função pickAFile() para solicitar ao usuário que selecione o primeiro arquivo. Se for inválido, imprima uma mensagem de erro:
file1 = pickAFile() if file1 == None or not file1.endswith(".wav"): print("Invalid file selected. Please choose a valid WAV file.")
Use a função pickAFile() novamente para solicitar ao usuário um segundo arquivo de som válido:
file2 = pickAFile() if file2 == None or not file2.endswith(".wav"): print("Invalid file selected. Please choose a valid WAV file.")
Crie dois objetos sonoros a partir dos dois arquivos de som selecionados:
sound1 = makeSound(file1) sound2 = makeSound(file2)
Adicione as durações dos dois sons para calcular a duração do novo som unido. Crie um novo objeto de som vazio usando o comprimento:
newSoundLength = getLength(sound1) + getLength(sound2) joinedSound = makeEmptySound(newSoundLength)
Faça um loop por cada amostra do primeiro som. Copie o valor da amostra em cada índice para o novo som:
for i in range(0, getLength(sound1)): sampleVal = getSampleValueAt(sound1, i) setSampleValueAt(joinedSound, i, sampleVal)
Faça um loop por cada amostra do segundo som. Copie o valor da amostra em cada índice para o novo som, após o primeiro som:
for i in range(0, getLength(sound2)): sampleVal = getSampleValueAt(sound2, i) endOfFirstSound = getLength(sound1) - 1 setSampleValueAt(joinedSound, endOfFirstSound + i, sampleVal)
Explore o som usando a função explore():
explore(joinedSound)
- Clique no botão Carregar Programa, localizado entre a área de programação e a linha de comando. Salve o arquivo se solicitado.
Execute a função usando a linha de comando:
joinSounds()
Visualize o som unido usando a nova janela e clique no botão Reproduzir todo o som para ouvir o som:
Importando e editando arquivos de som usando JES
Agora você sabe como importar arquivos de som e editá-los usando JES. Existem tantas outras funções integradas que o JES tem a oferecer, que permitirão fazer edições de som ainda mais avançadas.
Você pode aprender mais sobre as outras funções disponíveis usando a janela de ajuda do JES.