JES tiene soporte básico para la edición de sonido, pero puedes usarlo para realizar algunas tareas útiles.
JES es un programa que te permite modificar imágenes, sonidos y videos mediante programación. JES tiene muchas funciones integradas y herramientas de depuración para ayudarlo a aprender el lenguaje Jython.
Al importar un archivo usando JES, puede examinar sus ondas de sonido visualmente, usando una ventana separada. También puede manipular los valores de amplitud de estas ondas de sonido en puntos específicos. Esto puede ayudarlo a editar el archivo de sonido para lograr diferentes efectos.
Cómo cambiar el volumen de un clip de sonido
Cuando usted renderizar una imagen en JES, puede acceder a los píxeles individuales que contiene. Puedes lograr ciertas tecnicas de procesamiento de imagen editando los valores de color rojo, verde y azul para cada píxel.
De manera similar, un archivo de sonido contiene muchas "muestras" individuales que son pequeñas piezas de datos de sonido. Puede editar un sonido importado cambiando el valor de amplitud en cada muestra.
El código utilizado en este proyecto está disponible en este repositorio de GitHub bajo la licencia del MIT.
- Abra la aplicación JES en su computadora.
- Cree una nueva función llamada changeVolume(), que toma el volumen al que desea cambiar como entrada:
definitivamentecambiarVolumen(vol):
- Dentro de la función, abra un aviso para pedirle al usuario que seleccione un archivo de sonido válido. Aunque JES no es compatible con archivos mp3, aún puede importar archivos WAV. Agregue alguna validación para asegurarse de que el archivo sea compatible:
archivo = escogerArchivo()
si archivo != Ningunoy archivo.termina con(".wav"):
# Código para archivo válido
demás:
imprimir("Archivo no válido seleccionado. Elija un archivo WAV válido".) - Si el archivo seleccionado es válido, cree un objeto de sonido a partir de él:
sonido = hacerSonido (archivo)
- Recorre cada muestra del sonido:
para i en rango(0, getLength (sonido)):
- Comprobar si el usuario pasó arriba en la función para subir el volumen más alto. Si es así, obtenga el valor de la muestra en ese índice usando la función integrada getSampleValueAt(). Aumente el volumen duplicando la amplitud y use setSampleValueAt() para establecer el nuevo valor:
si volumen == 'arriba':
sampleVal = getSampleValueAt (sonido, i)
setSampleValueAt (sonido, i, sampleVal * 2) - Comprobar si el usuario pasó abajo en la función para suavizar el volumen. Si es así, obtenga el valor de la muestra en ese índice y divídalo por 2 para reducir la amplitud:
si volumen == 'abajo':
sampleVal = getSampleValueAt (sonido, i)
setSampleValueAt (sonido, i, sampleVal / 2) - Use la función explore() para abrir la ventana del explorador para el sonido:
explorar (sonido)
- Clickea en el Cargar programa botón, situado entre el área de programación y la línea de comando. Guarde el archivo si se le solicita:
- Ejecute la función changeVolume() en la línea de comando, pasando "arriba" como argumento a la función:
cambiarVolumen("arriba")
- Usando la ventana del explorador de archivos, navegue hasta un archivo de sonido válido:
- Clickea en el Reproducir todo el sonido botón usando la nueva ventana:
- En la línea de comando, ejecute changeVolume() nuevamente con el valor "down" como argumento y seleccione un archivo:
cambiarVolumen("abajo")
- En la ventana del explorador, verá que las ondas de sonido son más pequeñas. Clickea en el Reproducir todo el sonido botón usando la nueva ventana:
Cómo invertir un clip de sonido
Puede invertir un sonido creando un nuevo sonido vacío y copiando cada muestra del sonido original en el nuevo sonido en orden inverso.
- En una nueva función, solicite al usuario que seleccione un archivo WAV y verifique que el archivo sea válido:
definitivamentesonido inverso():
archivo = escogerArchivo()si archivo != Ningunoy archivo.termina con(".wav"):
# Código para archivo válido
demás:
imprimir("Archivo no válido seleccionado. Elija un archivo WAV válido".) - Cree un nuevo objeto de sonido a partir del archivo seleccionado:
sonido = hacerSonido (archivo)
- Utilice la función integrada makeEmptySound() para crear un nuevo objeto de sonido vacío. Este consistirá en el mismo número de muestras que el sonido original. El valor de amplitud para cada muestra será 0:
newReversedSound = makeEmptySound (getLength (sonido))
- Recorra cada muestra del nuevo objeto de sonido vacío:
para i en rango(0, obtenerLongitud (nuevoSonidoInverso)):
- Para cada muestra en ese punto, obtenga la muestra en el extremo opuesto del sonido. Por ejemplo, si la longitud de la muestra es 100 y el índice actual es 0, obtendrá el valor de la muestra en el índice 99. De manera similar, si el índice actual es 3, obtendrá el valor de la muestra en el índice 96:
sampleVal = getSampleValueAt (sonido, getLength (sonido) - 1 - i)
- Copie el valor de muestra del otro extremo del sonido al índice actual del nuevo sonido:
setSampleValueAt (nuevoReversedSound, i, sampleVal)
- Explora el nuevo sonido invertido. También puede explorar el sonido original con fines comparativos:
explorar (sonido)
explorar (nuevo sonido invertido) - Clickea en el Cargar programa botón, situado entre el área de programación y la línea de comando. Guarde el archivo si se le solicita.
- Ejecute la función usando la línea de comando:
sonido inverso()
- Vea el sonido original y el sonido invertido usando las ventanas del explorador. Clickea en el Reproducir todo el sonido botón para escuchar las diferencias:
Cómo unir dos clips de sonido
Para unir dos clips de sonido, puede pedirle al usuario que seleccione dos archivos WAV separados. Copie cada muestra de ambos sonidos en el nuevo objeto de sonido.
- Cree una nueva función llamada joinSounds():
definitivamenteunirSonidos():
- Utilice la función pickAFile() para solicitar al usuario que seleccione el primer archivo. Si no es válido, imprima un mensaje de error:
archivo1 = escogerArchivo()
si archivo1 == Ningunoono archivo1.termina con(".wav"):
imprimir("Archivo no válido seleccionado. Elija un archivo WAV válido".) - Use la función pickAFile() nuevamente para pedirle al usuario un segundo archivo de sonido válido:
archivo2 = escogerArchivo()
si archivo2 == Ningunoono archivo2.termina con(".wav"):
imprimir("Archivo no válido seleccionado. Elija un archivo WAV válido".) - Cree dos objetos de sonido a partir de los dos archivos de sonido seleccionados:
sonido1 = hacerSonido (archivo1)
sonido2 = hacerSonido (archivo2) - Sume las longitudes de los dos sonidos para calcular la longitud del nuevo sonido unido. Cree un nuevo objeto de sonido vacío usando la longitud:
newSoundLength = getLength (sonido1) + getLength (sonido2)
SonidoUnido = HacerSonidoVacío (nuevaLongitudSonido) - Recorre cada muestra del primer sonido. Copie el valor de la muestra en cada índice en el nuevo sonido:
para i en rango(0, obtenerLongitud (sonido1)):
sampleVal = getSampleValueAt (sonido1, i)
setSampleValueAt (sonidounido, i, sampleVal) - Recorre cada muestra del segundo sonido. Copie el valor de la muestra en cada índice en el nuevo sonido, después del primer sonido:
para i en rango(0, obtenerLongitud (sonido2)):
sampleVal = getSampleValueAt (sonido2, i)
endOfFirstSound = getLength (sonido1) - 1
setSampleValueAt (joinedSound, endOfFirstSound + i, sampleVal) - Explora el sonido usando la función explore():
explorar (sonido unido)
- Clickea en el Cargar programa botón, situado entre el área de programación y la línea de comando. Guarde el archivo si se le solicita.
- Ejecute la función usando la línea de comando:
unirSonidos()
- Vea el sonido unido usando la nueva ventana y haga clic en el Reproducir todo el sonido botón para escuchar el sonido:
Importación y edición de archivos de sonido mediante JES
Ahora comprende cómo importar archivos de sonido y editarlos usando JES. Hay tantas otras funciones integradas que JES tiene para ofrecer, que le permitirán realizar una edición de sonido aún más avanzada.
Puede obtener más información sobre las otras funciones disponibles mediante la ventana de ayuda de JES.