Zarządzanie dźwiękiem w prezentacjach przy użyciu C++
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 wyciszenia, oraz wyodrębnić dźwięk używany w przejściach pokazu slajdów.
Tworzenie ramek audio
Aspose.Slides for C++ umożliwia dodawanie plików audio do slajdów. Pliki audio są osadzane w slajdach jako ramki audio.
- Utwórz instancję klasy Presentation.
- Pobierz odniesienie do slajdu przez jego indeks.
- Wczytaj strumień pliku audio, który chcesz osadzić w slajdzie.
- Dodaj osadzoną ramkę audio (zawierającą plik audio) do slajdu.
- Ustaw PlayMode oraz
Volumeudostępnione przez obiekt IAudioFrame. - Zapisz zmodyfikowaną prezentację.
Ten kod C++ pokazuje, jak dodać osadzoną ramkę audio do slajdu:
// Tworzy instancję klasy Presentation, która reprezentuje plik prezentacji
auto pres = System::MakeObject<Presentation>();
// Pobiera pierwszy slajd
auto sld = pres->get_Slides()->idx_get(0);
// Ładuje plik dźwiękowy wav do strumienia
auto fstr = System::MakeObject<FileStream>(u"sampleaudio.wav", FileMode::Open, FileAccess::Read);
// Dodaje ramkę audio
auto audioFrame = sld->get_Shapes()->AddAudioFrameEmbedded(50.0f, 150.0f, 100.0f, 100.0f, fstr);
// Ustawia tryb odtwarzania i głośność dźwięku
audioFrame->set_PlayMode(AudioPlayModePreset::Auto);
audioFrame->set_Volume(AudioVolumeMode::Loud);
// Zapisuje plik PowerPoint na dysku
pres->Save(u"AudioFrameEmbed_out.pptx", SaveFormat::Pptx);
Zmiana miniatury ramki audio
Gdy dodajesz plik audio do prezentacji, audio pojawia się jako ramka z domyślnym standardowym obrazem (zobacz obraz w sekcji poniżej). Możesz zmienić miniaturę ramki audio (ustawić własny obraz).
Ten kod C++ pokazuje, jak zmienić miniaturę lub podglądowy obraz ramki audio:
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slides()->idx_get(0);
// Dodaje ramkę audio do slajdu z określonym położeniem i rozmiarem.
auto audioStream = System::MakeObject<System::IO::FileStream>(u"sample2.mp3",
System::IO::FileMode::Open, System::IO::FileAccess::Read);
auto audioFrame = slide->get_Shapes()->AddAudioFrameEmbedded(150.0f, 100.0f, 50.0f, 50.0f, audioStream);
// Dodaje obraz do zasobów prezentacji.
auto imageStream = System::IO::File::OpenRead(u"eagle.jpeg");
auto audioImage = presentation->get_Images()->AddImage(imageStream);
// Ustawia obraz dla ramki audio.
audioFrame->get_PictureFormat()->get_Picture()->set_Image(audioImage); // <-----
//Zapisuje zmodyfikowaną prezentację na dysk
presentation->Save(u"example_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Zmiana opcji odtwarzania audio
Aspose.Slides for C++ umożliwia zmianę opcji kontrolujących odtwarzanie lub właściwości audio. Na przykład możesz regulować głośność audio, ustawić odtwarzanie w pętli lub nawet ukryć ikonę audio.
Panel Audio Options w Microsoft PowerPoint:

Opcje Audio Options w PowerPoint, które odpowiadają metodom Aspose.Slides AudioFrame:
- Start w menu rozwijanym odpowiada metodzie AudioFrame::set_PlayMode
- Volume odpowiada metodzie AudioFrame::set_Volume
- Play Across Slides odpowiada metodzie AudioFrame::set_PlayAcrossSlides
- Loop until Stopped odpowiada metodzie AudioFrame::set_PlayLoopMode
- Hide During Show odpowiada metodzie AudioFrame::set_HideAtShowing
- Rewind after Playing odpowiada metodzie AudioFrame::set_RewindAudio
Opcje Editing w PowerPoint, które odpowiadają właściwościom Aspose.Slides AudioFrame:
- Fade In odpowiada metodzie AudioFrame.set_FadeInDuration
- Fade Out odpowiada metodzie AudioFrame.set_FadeOutDuration
- Trim Audio Start Time odpowiada metodzie AudioFrame.set_TrimFromStart
- Trim Audio End Time – wartość równa jest długości audio pomniejszonej o wartość zwróconą przez metodę AudioFrame.set_TrimFromEnd
Suwak Volume w panelu sterowania audio w PowerPoint odpowiada metodzie AudioFrame.set_VolumeValue. Pozwala on zmienić głośność audio w procentach.
Tak zmieniasz opcje odtwarzania audio:
- Create lub pobierz ramkę audio.
- Ustaw nowe wartości właściwości ramki audio, które chcesz zmodyfikować.
- Zapisz zmodyfikowany plik PowerPoint.
Ten kod C++ demonstruje operację, w której dostosowywane są opcje audio:
auto pres = System::MakeObject<Presentation>(u"AudioFrameEmbed_out.pptx");
// Pobiera kształt
auto shape = pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0);
// Konwertuje kształt na kształt AudioFrame
auto audioFrame = System::ExplicitCast<AudioFrame>(shape);
// Ustawia tryb odtwarzania na odtwarzanie po kliknięciu
audioFrame->set_PlayMode(AudioPlayModePreset::OnClick);
// Ustawia głośność na niski poziom
audioFrame->set_Volume(AudioVolumeMode::Low);
// Ustawia odtwarzanie dźwięku na wszystkie slajdy
audioFrame->set_PlayAcrossSlides(true);
// Wyłącza pętlę dla dźwięku
audioFrame->set_PlayLoopMode(false);
// Ukrywa ramkę audio podczas pokazu slajdów
audioFrame->set_HideAtShowing(true);
// Przewija dźwięk do początku po odtworzeniu
audioFrame->set_RewindAudio(true);
// Zapisuje plik PowerPoint na dysku
pres->Save(u"AudioFrameEmbed_changed.pptx", SaveFormat::Pptx);
Ten przykład C++ pokazuje, jak dodać nową ramkę audio z osadzonym dźwiękiem, przyciąć go oraz ustawić czasy wyciszenia:
auto pres = MakeObject<Presentation>();
auto slide = pres->get_Slide(0);
auto audioData = File::ReadAllBytes(u"sampleaudio.mp3");
auto audio = pres->get_Audios()->AddAudio(audioData);
auto audioFrame = slide->get_Shapes()->AddAudioFrameEmbedded(50, 50, 100, 100, audio);
// Ustawia początkowy offset przycinania na 1,5 sekundy
audioFrame->set_TrimFromStart(1500);
// Ustawia końcowy offset przycinania na 2 sekundy
audioFrame->set_TrimFromEnd(2000);
// Ustawia czas trwania efektu fade-in na 200 ms
audioFrame->set_FadeInDuration(200);
// Ustawia czas trwania efektu fade-out na 500 ms
audioFrame->set_FadeOutDuration(500);
pres->Save(u"AudioFrameTrimFade_out.pptx", SaveFormat::Pptx);
pres->Dispose();
Poniższy fragment kodu pokazuje, jak pobrać ramkę audio z osadzonym dźwiękiem i ustawić jej głośność na 85%:
auto pres = MakeObject<Presentation>(u"AudioFrameEmbed_out.pptx");
// Pobiera kształt ramki audio
auto audioFrame = ExplicitCast<IAudioFrame>(pres->get_Slide(0)->get_Shape(0));
// Ustawia głośność audio na 85%
audioFrame->set_VolumeValue(85);
pres->Save(u"AudioFrameValue_out.pptx", SaveFormat::Pptx);
pres->Dispose();
Zarządzanie napisami audio
Aspose.Slides umożliwia dodawanie zamkniętych napisów do ramki audio za pomocą metody get_CaptionTracks. Metoda ta zwraca ICaptionsCollection, co pozwala dodawać ścieżki napisów WebVTT, iterować istniejące ścieżki i usuwać je w razie potrzeby.
Dodawanie napisów audio
Użyj metody get_CaptionTracks, 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.
auto presentation = MakeObject<Presentation>();
auto audioData = File::ReadAllBytes(u"audio.mp3");
auto audio = presentation->get_Audios()->AddAudio(audioData);
auto slide = presentation->get_Slide(0);
auto audioFrame = slide->get_Shapes()->AddAudioFrameEmbedded(10, 10, 50, 50, audio);
// Dodaj nową ścieżkę napisów z pliku WebVTT.
audioFrame->get_CaptionTracks()->Add(u"New track", u"track.vtt");
presentation->Save(u"audio_with_captions.pptx", SaveFormat::Pptx);
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óry może być użyty przy eksportowaniu napisów.
auto presentation = MakeObject<Presentation>(u"audio_with_captions.pptx");
auto slide = presentation->get_Slide(0);
for (auto&& shape : slide->get_Shapes())
{
if (ObjectExt::Is<IAudioFrame>(shape))
{
auto audioFrame = ExplicitCast<IAudioFrame>(shape);
for (auto&& captionTrack : audioFrame->get_CaptionTracks())
{
// Zapisz każdą ścieżkę napisów jako plik .vtt.
auto fileName = captionTrack->get_CaptionId().ToString() + u".vtt";
File::WriteAllBytes(fileName, captionTrack->get_BinaryData());
}
}
}
presentation->Dispose();
Usuwanie napisów audio
Aby usunąć napisy z ramki audio, użyj metod udostępnionych przez ICaptionsCollection, takich jak Clear, Remove lub RemoveAt. Poniższy przykład usuwa wszystkie ścieżki napisów z ramki audio.
auto presentation = MakeObject<Presentation>(u"audio_with_captions.pptx");
auto slide = presentation->get_Slide(0);
auto audioFrame = ExplicitCast<IAudioFrame>(slide->get_Shape(0));
// Usuń wszystkie ścieżki napisów z ramki audio.
audioFrame->get_CaptionTracks()->Clear();
presentation->Save(u"audio_without_captions.pptx", SaveFormat::Pptx);
presentation->Dispose();
Wyodrębnianie audio
Aspose.Slides 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żywany w konkretnym slajdzie.
- Utwórz instancję klasy Presentation i wczytaj prezentację zawierającą audio.
- Pobierz odniesienie do odpowiedniego slajdu przez jego indeks.
- Uzyskaj dostęp do przejść pokazu slajdów dla tego slajdu.
- Wyodrębnij dźwięk w postaci danych bajtowych.
Ten kod C++ pokazuje, jak wyodrębnić audio używane w slajdzie:
String presName = u"AudioSlide.pptx";
// Tworzy instancję klasy Presentation, która reprezentuje plik prezentacji
auto pres = System::MakeObject<Presentation>(presName);
// Uzyskuje dostęp do żądanego slajdu
auto slide = pres->get_Slides()->idx_get(0);
// Pobiera efekty przejścia pokazu slajdów dla slajdu
auto transition = slide->get_SlideShowTransition();
// Wyodrębnia dźwięk w tablicy bajtów
auto audio = transition->get_Sound()->get_BinaryData();
Console::WriteLine(String(u"Length: ") + audio->get_Length());
FAQ
Czy mogę używać tego samego zasobu audio na wielu slajdach bez zwiększania rozmiaru pliku?
Tak. Dodaj audio raz do współdzielonej audio collection prezentacji i twórz kolejne ramki audio, które odwołują się do tego istniejącego zasobu. Dzięki temu unikasz duplikowania danych multimedialnych i utrzymujesz rozmiar prezentacji pod kontrolą.
Czy mogę zamienić dźwięk w istniejącej ramce audio bez ponownego tworzenia kształtu?
Tak. W przypadku dźwięku połączonego zewnętrznie, zaktualizuj link path, aby wskazywał na nowy plik. W przypadku dźwięku osadzonego, podmień obiekt embedded audio na inny z audio collection prezentacji. Formatowanie ramki oraz większość ustawień odtwarzania pozostaną niezmienione.
Czy przycinanie zmienia podstawowe dane audio przechowywane w prezentacji?
Nie. Przycinanie modyfikuje wyłącznie granice odtwarzania. Oryginalne bajty audio pozostają nienaruszone i dostępne zarówno w osadzonym audio, jak i w kolekcji audio prezentacji.