Zarządzanie dźwiękiem w prezentacjach przy użyciu PHP

Przegląd

Ten artykuł wyjaśnia, jak pracować z ramkami audio w Aspose.Slides. Pokazuje, jak dodać osadzony dźwięk do slajdów, dostosować miniaturę ramki audio, skonfigurować opcje odtwarzania, takie jak głośność, pętla, ukrywanie, przycinanie i czasy zanikania, oraz wyodrębnić dźwięk używany w przejściach pokazu slajdów.

Tworzenie ramek audio

Aspose.Slides for PHP via Java umożliwia dodawanie plików audio do slajdów. Pliki audio są osadzane w slajdach jako ramki audio.

  1. Utwórz instancję klasy Presentation.
  2. Uzyskaj odniesienie do slajdu poprzez jego indeks.
  3. Wczytaj strumień pliku audio, który chcesz osadzić w slajdzie.
  4. Dodaj osadzoną ramkę audio (zawierającą plik audio) do slajdu.
  5. Ustaw PlayMode i Volume udostępniane przez obiekt AudioFrame.
  6. Zapisz zmodyfikowaną prezentację.

Ten kod PHP pokazuje, jak dodać osadzoną ramkę audio do slajdu:

// Tworzy instancję klasy Presentation, która reprezentuje plik prezentacji
$pres = new Presentation();
try {
    # Pobiera pierwszy slajd
    $sld = $pres->getSlides()->get_Item(0);
    # Wczytuje plik dźwiękowy wav do strumienia
    $fstr = new Java("java.io.FileInputStream", new Java("java.io.File", "audio.wav"));
    # Dodaje ramkę audio
    $audioFrame = $sld->getShapes()->addAudioFrameEmbedded(50, 150, 100, 100, $fstr);
    $fstr->close();
    # Ustawia tryb odtwarzania i głośność audio
    $audioFrame->setPlayMode(AudioPlayModePreset->Auto);
    $audioFrame->setVolume(AudioVolumeMode->Loud);
    # Zapisuje plik PowerPoint na dysku
    $pres->save("AudioFrameEmbed_out.pptx", SaveFormat::Pptx);
} catch(JavaException e) {
} finally {
    if (!java_is_null($pres)) $pres.dispose();
}

Zmiana miniatury ramki audio

Po dodaniu pliku audio do prezentacji, audio wyświetlane jest jako ramka z domyślnym standardowym obrazem (zobacz obraz w poniższej sekcji). Możesz zmienić podgląd obrazu ramki audio (ustawić wybrany obraz).

Ten kod PHP pokazuje, jak zmienić miniaturę lub podgląd obrazu ramki audio:

$presentation = new Presentation();
try {
	$slide = $presentation->getSlides()->get_Item(0);
	# Dodaje ramkę audio do slajdu w określonej pozycji i rozmiarze.
	$audioStream = new Java("java.io.FileInputStream", "sample2.mp3");
	$audioFrame = $slide->getShapes()->addAudioFrameEmbedded(150, 100, 50, 50, $audioStream);
	$audioStream->close();
	# Dodaje obraz do zasobów prezentacji.
	$picture;
	$image = Images->fromFile("eagle.jpeg");
	try {
		$picture = $presentation->getImages()->addImage($image);
	} finally {
		if (!java_is_null($image)) {
			$image->dispose();
		}
	}
	# Ustawia obraz dla ramki audio.
	$audioFrame->getPictureFormat()->getPicture()->setImage($picture);// <-----

	# Zapisuje zmodyfikowaną prezentację na dysku
	$presentation->save("example_out.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
	if (!java_is_null($presentation)) {
		$presentation->dispose();
	}
}

Zmiana opcji odtwarzania audio

Aspose.Slides for PHP via Java umożliwia zmianę ustawień kontrolujących odtwarzanie lub właściwości dźwięku. Na przykład możesz dostosować głośność audio, ustawić odtwarzanie w pętli lub ukryć ikonę audio.

Panel Opcje audio w programie Microsoft PowerPoint:

example1_image

PowerPoint Opcje audio, które odpowiadają właściwościom Aspose.Slides AudioFrame :

Opcje Edycja w PowerPoint, które odpowiadają właściwościom Aspose.Slides AudioFrame :

Pole Volume controll w panelu sterowania audio w PowerPoint odpowiada metodzie AudioFrame::setVolumeValue. Pozwala zmienić głośność audio w procentach.

Tak zmienisz opcje odtwarzania audio:

  1. Сreate lub pobierz ramkę audio.
  2. Ustaw nowe wartości właściwości ramki audio, które chcesz dostosować.
  3. Zapisz zmodyfikowany plik PowerPoint.

Ten kod PHP demonstruje operację, w której zmieniane są opcje audio:

$pres = new Presentation("AudioFrameEmbed_out.pptx");
try {
    # Pobiera kształt AudioFrame
    $audioFrame = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
    # Ustawia tryb odtwarzania na odtwarzanie po kliknięciu
    $audioFrame->setPlayMode(AudioPlayModePreset->OnClick);
    # Ustawia głośność na niski poziom
    $audioFrame->setVolume(AudioVolumeMode->Low);
    # Ustawia odtwarzanie audio na wszystkie slajdy
    $audioFrame->setPlayAcrossSlides(true);
    # Wyłącza pętlę dla audio
    $audioFrame->setPlayLoopMode(false);
    # Ukrywa AudioFrame podczas pokazu slajdów
    $audioFrame->setHideAtShowing(true);
    # Przewija audio do początku po odtworzeniu
    $audioFrame->setRewindAudio(true);
    # Zapisuje plik PowerPoint na dysku
    $pres->save("AudioFrameEmbed_changed.pptx", SaveFormat::Pptx);
} finally {
	if (!java_is_null($pres)) {
		$pres->dispose();
	}
}

Ten przykład PHP pokazuje, jak dodać nową ramkę audio z osadzonym dźwiękiem, przyciąć ją i ustawić czasy zanikania:

$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);

    // Ustawia początkowe przesunięcie przycięcia na 1,5 sekundy
    $audioFrame->setTrimFromStart(1500);
    // Ustawia końcowe przesunięcie przycięcia na 2 sekundy
    $audioFrame->setTrimFromEnd(2000);

    // Ustawia czas trwania fade-in na 200 ms
    $audioFrame->setFadeInDuration(200);
    // Ustawia czas trwania fade-out na 500 ms
    $audioFrame->setFadeOutDuration(500);

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

Poniższy przykład kodu pokazuje, jak pobrać ramkę audio z osadzonym dźwiękiem i ustawić jej głośność na 85%:

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

    // Pobiera kształt ramki audio
    $audioFrame = $slide->getShapes()->get_Item(0);

    // Ustawia głośność audio na 85%
    $audioFrame->setVolumeValue(85);

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

Zarządzanie napisami audio

Aspose.Slides umożliwia dodawanie zamkniętych napisów do ramki audio za pomocą metody getCaptionTracks. Metoda ta zwraca CaptionsCollection, co pozwala dodać ścieżki napisów WebVTT, iterować istniejące ścieżki i usuwać je w razie potrzeby.

Dodawanie napisów audio

Użyj metody getCaptionTracks aby dołączyć jedną lub więcej ścieżek napisów do ramki audio. W poniższym przykładzie plik audio jest dodawany do slajdu, a następnie nowa ścieżka napisów jest wczytywana z pliku .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);

    // Dodaj nową ścieżkę napisów z pliku WebVTT.
    $audioFrame->getCaptionTracks()->add("New track", "track.vtt");

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

Wyodrębnianie napisów audio

Możesz iterować po ścieżkach napisów powiązanych z ramką audio i zapisywać je jako pliki .vtt. Każda ścieżka napisów udostępnia swoje dane binarne oraz unikalny identyfikator, które mogą być użyte przy eksporcie napisów.

$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);
                // Zapisz każdą ścieżkę napisów jako plik .vtt.
                $filePath = $captionTrack->getCaptionId() . ".vtt";
                file_put_contents($filePath, $captionTrack->getBinaryData());
            }
        }
    }
} finally {
    $presentation->dispose();
}

Usuwanie napisów audio

Aby usunąć napisy z ramki audio, użyj metod udostępnionych przez CaptionsCollection, takich jak clear, remove, lub removeAt. Poniższy przykład usuwa wszystkie ścieżki napisów z ramki audio.

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

    // Usuń wszystkie ścieżki napisów z ramki audio.
    $audioFrame->getCaptionTracks()->clear();

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

Wyodrębnianie dźwięku

Aspose.Slides for PHP via Java umożliwia wyodrębnienie dźwięku używanego w przejściach pokazu slajdów. Na przykład możesz wyodrębnić dźwięk użyty w określonym slajdzie.

  1. Utwórz instancję klasy Presentation i wczytaj prezentację zawierającą dźwięk.
  2. Uzyskaj odniesienie do odpowiedniego slajdu poprzez jego indeks.
  3. Uzyskaj dostęp do slideshow transitions dla slajdu.
  4. Wyodrębnij dźwięk jako dane bajtowe.

Ten kod pokazuje, jak wyodrębnić dźwięk użyty w slajdzie:

# Tworzy instancję klasy Presentation, która reprezentuje plik prezentacji
$pres = new Presentation("AudioSlide.pptx");
$Array = new java_class("java.lang.reflect.Array");
try {
	# Uzyskuje dostęp do żądanego slajdu
	$slide = $pres->getSlides()->get_Item(0);
	# Pobiera efekty przejścia pokazu slajdów dla slajdu
	$transition = $slide->getSlideShowTransition();
	# Wyodrębnia dźwięk jako tablicę bajtów
	$audio = $transition->getSound()->getBinaryData();
	echo("Length: " . $Array->getLength($audio));
} finally {
	if (!java_is_null($pres)) {
		$pres->dispose();
	}
}

FAQ

Czy mogę ponownie używać tego samego zasobu audio na wielu slajdach bez zwiększania rozmiaru pliku?

Tak. Dodaj audio raz do wspólnej audio collection prezentacji i utwórz dodatkowe ramki audio, które odwołują się do istniejącego zasobu. Dzięki temu unikniesz duplikowania danych multimedialnych i utrzymasz rozmiar prezentacji pod kontrolą.

Czy mogę zastąpić dźwięk w istniejącej ramce audio bez ponownego tworzenia kształtu?

Tak. W przypadku dźwięku powiązanego, zaktualizuj link path tak, aby wskazywał na nowy plik. W przypadku dźwięku osadzonego, zamień obiekt embedded audio na inny z audio collection prezentacji. Formatowanie ramki oraz większość ustawień odtwarzania pozostanie niezmieniona.

Czy przycinanie zmienia podstawowe dane audio przechowywane w prezentacji?

Nie. Przycinanie zmienia jedynie granice odtwarzania. Oryginalne bajty audio pozostają niezmienione i są dostępne przez osadzony dźwięk lub kolekcję audio prezentacji.