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.

  1. Utwórz instancję klasy Presentation.
  2. Pobierz odniesienie do slajdu przez 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 oraz Volume udostępnione przez obiekt IAudioFrame.
  6. 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:

example1_image

Opcje Audio Options w PowerPoint, które odpowiadają metodom Aspose.Slides AudioFrame:

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

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:

  1. Create lub pobierz ramkę audio.
  2. Ustaw nowe wartości właściwości ramki audio, które chcesz zmodyfikować.
  3. 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.

  1. Utwórz instancję klasy Presentation i wczytaj prezentację zawierającą audio.
  2. Pobierz odniesienie do odpowiedniego slajdu przez jego indeks.
  3. Uzyskaj dostęp do przejść pokazu slajdów dla tego slajdu.
  4. 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.