Gestionar audio en presentaciones usando PHP

Crear marcos de audio

Aspose.Slides para PHP a través de Java le permite añadir archivos de audio a las diapositivas. Los archivos de audio se incrustan en las diapositivas como marcos de audio.

  1. Cree una instancia de la clase Presentation.
  2. Obtenga una referencia a la diapositiva mediante su índice.
  3. Cargue el flujo del archivo de audio que desea incrustar en la diapositiva.
  4. Añada el marco de audio incrustado (que contiene el archivo de audio) a la diapositiva.
  5. Establezca PlayMode y Volume expuestos por el objeto AudioFrame.
  6. Guarde la presentación modificada.

Este código PHP le muestra cómo añadir un marco de audio incrustado a una diapositiva:

// Instancia una clase Presentation que representa un archivo de presentación
$pres = new Presentation();
try {
    # Obtiene la primera diapositiva
    $sld = $pres->getSlides()->get_Item(0);
    # Carga el archivo de sonido wav en un flujo
    $fstr = new Java("java.io.FileInputStream", new Java("java.io.File", "audio.wav"));
    # Añade el marco de audio
    $audioFrame = $sld->getShapes()->addAudioFrameEmbedded(50, 150, 100, 100, $fstr);
    $fstr->close();
    # Establece el modo de reproducción y el volumen del audio
    $audioFrame->setPlayMode(AudioPlayModePreset->Auto);
    $audioFrame->setVolume(AudioVolumeMode->Loud);
    # Escribe el archivo PowerPoint en el disco
    $pres->save("AudioFrameEmbed_out.pptx", SaveFormat::Pptx);
} catch(JavaException e) {
} finally {
    if (!java_is_null($pres)) $pres.dispose();
}

Cambiar la miniatura del marco de audio

Cuando se añade un archivo de audio a una presentación, el audio aparece como un marco con una imagen predeterminada estándar (ver la imagen en la sección siguiente). Puede cambiar la imagen de vista previa del marco de audio (establezca la imagen que prefiera).

Este código PHP le muestra cómo cambiar la miniatura o la imagen de vista previa de un marco de audio:

$presentation = new Presentation();
try {
	$slide = $presentation->getSlides()->get_Item(0);
	# Añade un marco de audio a la diapositiva con una posición y tamaño especificados.
	$audioStream = new Java("java.io.FileInputStream", "sample2.mp3");
	$audioFrame = $slide->getShapes()->addAudioFrameEmbedded(150, 100, 50, 50, $audioStream);
	$audioStream->close();
	# Añade una imagen a los recursos de la presentación.
	$picture;
	$image = Images->fromFile("eagle.jpeg");
	try {
		$picture = $presentation->getImages()->addImage($image);
	} finally {
		if (!java_is_null($image)) {
			$image->dispose();
		}
	}
	# Establece la imagen para el marco de audio.
	$audioFrame->getPictureFormat()->getPicture()->setImage($picture);// <-----

	# Guarda la presentación modificada en disco
	$presentation->save("example_out.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
	if (!java_is_null($presentation)) {
		$presentation->dispose();
	}
}

Cambiar opciones de reproducción de audio

Aspose.Slides para PHP a través de Java le permite cambiar las opciones que controlan la reproducción o las propiedades de un audio. Por ejemplo, puede ajustar el volumen del audio, establecer que el audio se reproduzca en bucle o incluso ocultar el ícono de audio.

El panel Audio Options en Microsoft PowerPoint:

example1_image

Las opciones de Audio Options de PowerPoint que corresponden a las propiedades de Aspose.Slides AudioFrame:

Opciones de Editing de PowerPoint que corresponden a las propiedades de Aspose.Slides AudioFrame:

El control de volumen de PowerPoint en el panel de control de audio corresponde al método AudioFrame::setVolumeValue. Permite cambiar el volumen del audio como porcentaje.

Así es como se cambian las opciones de reproducción de audio:

  1. Crear o obtener el Marco de audio.
  2. Establezca nuevos valores para las propiedades del Marco de audio que desee ajustar.
  3. Guarde el archivo de PowerPoint modificado.

Este código PHP demuestra una operación en la que se ajustan las opciones de un audio:

$pres = new Presentation("AudioFrameEmbed_out.pptx");
try {
    # Obtiene la forma AudioFrame
    $audioFrame = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
    # Establece el modo de reproducción para reproducir al hacer clic
    $audioFrame->setPlayMode(AudioPlayModePreset->OnClick);
    # Establece el volumen a Bajo
    $audioFrame->setVolume(AudioVolumeMode->Low);
    # Configura el audio para reproducirse en todas las diapositivas
    $audioFrame->setPlayAcrossSlides(true);
    # Desactiva el bucle para el audio
    $audioFrame->setPlayLoopMode(false);
    # Oculta el AudioFrame durante la presentación
    $audioFrame->setHideAtShowing(true);
    # Rebobina el audio al inicio después de reproducir
    $audioFrame->setRewindAudio(true);
    # Guarda el archivo PowerPoint en disco
    $pres->save("AudioFrameEmbed_changed.pptx", SaveFormat::Pptx);
} finally {
	if (!java_is_null($pres)) {
		$pres->dispose();
	}
}

Este ejemplo PHP muestra cómo añadir un nuevo marco de audio con audio incrustado, recortarlo y establecer las duraciones de desvanecimiento:

$pres = new Presentation();
try {
    $slide = $pres->getSlides()->get_Item(0);

    $audioData = file_get_contents("sampleaudio.mp3");
    $audio = $pres->getAudios()->addAudio($audioData);
    $audioFrame = $slide->getShapes()->addAudioFrameEmbedded(50, 50, 100, 100, $audio);

    // Establece el desplazamiento de inicio del recorte a 1,5 segundos
    // Establece el desplazamiento de fin del recorte a 2 segundos
    // Establece la duración del fundido de entrada a 200 ms
    // Establece la duración del fundido de salida a 500 ms

    $pres->save("AudioFrameTrimFade_out.pptx", SaveFormat::Pptx);
} finally {
    $pres->dispose();
}

El siguiente fragmento de código muestra cómo obtener un marco de audio incrustado y establecer su volumen al 85 %:

$pres = new Presentation("AudioFrameEmbed_out.pptx");
try {
    $slide = $pres->getSlides()->get_Item(0);

    // Obtiene la forma del marco de audio
    $audioFrame = $slide->getShapes()->get_Item(0);

    // Establece el volumen del audio al 85%
    $audioFrame->setVolumeValue(85);

    $pres->save("AudioFrameValue_out.pptx", SaveFormat::Pptx);
}
finally {
    $pres->dispose();
}

Gestionar subtítulos de audio

Aspose.Slides permite añadir subtítulos cerrados a un marco de audio mediante el método getCaptionTracks. Este método devuelve una CaptionsCollection, que permite añadir pistas de subtítulos WebVTT, iterar sobre las pistas existentes y eliminarlas cuando sea necesario.

Añadir subtítulos de audio

Utilice el método getCaptionTracks para adjuntar una o más pistas de subtítulos a un marco de audio. En el siguiente ejemplo se añade un archivo de audio a una diapositiva y, a continuación, se carga una nueva pista de subtítulos desde un archivo .vtt.

$presentation = new Presentation();
try {
    $audioData = file_get_contents("audio.mp3");
    $audio = $presentation->getAudios()->addAudio($audioData);

    $slide = $presentation->getSlides()->get_Item(0);
    $audioFrame = $slide->getShapes()->addAudioFrameEmbedded(10, 10, 50, 50, $audio);

    // Añadir una nueva pista de subtítulos desde un archivo WebVTT.
    $audioFrame->getCaptionTracks()->add("New track", "track.vtt");

    $presentation->save("audio_with_captions.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Extraer subtítulos de audio

Puede iterar a través de las pistas de subtítulos asociadas a un marco de audio y guardarlas como archivos .vtt. Cada pista de subtítulos expone sus datos binarios y su identificador único, que pueden usarse al exportar los subtítulos.

$presentation = new Presentation("audio_with_captions.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $shapeCount = java_values($slide->getShapes()->size());
    for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
        $shape = $slide->getShapes()->get_Item($shapeIndex);
        if (java_instanceof($shape, new JavaClass("com.aspose.slides.AudioFrame"))) {
            $audioFrame = $shape;
            $trackCount = java_values($audioFrame->getCaptionTracks()->getCount());
            for ($trackIndex = 0; $trackIndex < $trackCount; $trackIndex++) {
                $captionTrack = $audioFrame->getCaptionTracks()->get_Item($trackIndex);
                // Guardar cada pista de subtítulos como archivo .vtt.
                $filePath = $captionTrack->getCaptionId() . ".vtt";
                file_put_contents($filePath, $captionTrack->getBinaryData());
            }
        }
    }
} finally {
    $presentation->dispose();
}

Eliminar subtítulos de audio

Para eliminar los subtítulos de un marco de audio, utilice los métodos proporcionados por CaptionsCollection, como clear, remove o removeAt. El siguiente ejemplo elimina todas las pistas de subtítulos de un marco de audio.

$presentation = new Presentation($folderPath . "audio_with_captions.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $audioFrame = $slide->getShapes()->get_Item(0); // tipo: AudioFrame

    // Eliminar todas las pistas de subtítulos del marco de audio.
    $audioFrame->getCaptionTracks()->clear();

    $presentation->save($folderPath . "audio_without_captions.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Extraer audio

Aspose.Slides para PHP a través de Java le permite extraer el sonido utilizado en las transiciones de la presentación. Por ejemplo, puede extraer el sonido usado en una diapositiva concreta.

  1. Cree una instancia de la clase Presentation y cargue la presentación que contiene el audio.
  2. Obtenga la referencia a la diapositiva pertinente mediante su índice.
  3. Acceda a las slideshow transitions de la diapositiva.
  4. Extraiga el sonido en datos de bytes.

Este código le muestra cómo extraer el audio utilizado en una diapositiva:

# Instancia una clase Presentation que representa un archivo de presentación
$pres = new Presentation("AudioSlide.pptx");
$Array = new java_class("java.lang.reflect.Array");
try {
	# Accede a la diapositiva deseada
	$slide = $pres->getSlides()->get_Item(0);
	# Obtiene los efectos de transición de la presentación para la diapositiva
	$transition = $slide->getSlideShowTransition();
	# Extrae el sonido en una matriz de bytes
	$audio = $transition->getSound()->getBinaryData();
	echo("Length: " . $Array->getLength($audio));
} finally {
	if (!java_is_null($pres)) {
		$pres->dispose();
	}
}

Preguntas frecuentes

¿Puedo reutilizar el mismo recurso de audio en varias diapositivas sin aumentar el tamaño del archivo?

Sí. Añada el audio una sola vez a la colección de audio compartida de la presentación y cree marcos de audio adicionales que hagan referencia a ese recurso existente. Así se evita la duplicación de los datos multimedia y el tamaño de la presentación se mantiene bajo control.

¿Puedo reemplazar el sonido de un marco de audio existente sin recrear la forma?

Sí. Para un sonido enlazado, actualice la ruta del enlace para que apunte al nuevo archivo. Para un sonido incrustado, reemplace el objeto embedded audio por otro de la colección de audio de la presentación. El formato del marco y la mayoría de los ajustes de reproducción permanecen intactos.

¿El recorte modifica los datos de audio subyacentes almacenados en la presentación?

No. El recorte solo ajusta los límites de reproducción. Los bytes originales del audio permanecen sin cambios y accesibles a través del audio incrustado o de la colección de audio de la presentación.