Správa zvuku v prezentacích pomocí C++

Přehled

Tento článek vysvětluje, jak pracovat s audio rámci v Aspose.Slides. Ukazuje, jak přidat vložený zvuk do snímků, přizpůsobit miniaturu audio rámce, nakonfigurovat možnosti přehrávání, jako je hlasitost, opakování, skrytí, oříznutí a dobu přechodů, a získat zvuk použitý v přechodech prezentace.

Vytvoření audio rámců

Aspose.Slides pro C++ vám umožňuje přidávat zvukové soubory na snímky. Zvukové soubory jsou do snímků vloženy jako audio rámce.

  1. Vytvořte instanci třídy Presentation.
  2. Získejte odkaz na snímek přes jeho index.
  3. Načtěte stream zvukového souboru, který chcete do snímku vložit.
  4. Přidejte vložený audio rámec (obsahující zvukový soubor) na snímek.
  5. Nastavte PlayMode a Volume poskytované objektem IAudioFrame.
  6. Uložte upravenou prezentaci.
// Vytvoří instanci třídy Presentation, která představuje soubor prezentace
auto pres = System::MakeObject<Presentation>();

// Získá první snímek
auto sld = pres->get_Slides()->idx_get(0);

// Načte wav zvukový soubor do streamu
auto fstr = System::MakeObject<FileStream>(u"sampleaudio.wav", FileMode::Open, FileAccess::Read);

// Přidá Audio Frame
auto audioFrame = sld->get_Shapes()->AddAudioFrameEmbedded(50.0f, 150.0f, 100.0f, 100.0f, fstr);

// Nastaví režim přehrávání a hlasitost zvuku
audioFrame->set_PlayMode(AudioPlayModePreset::Auto);
audioFrame->set_Volume(AudioVolumeMode::Loud);

// Zapíše soubor PowerPoint na disk
pres->Save(u"AudioFrameEmbed_out.pptx", SaveFormat::Pptx);

Změna miniatury audio rámce

Když do prezentace přidáte zvukový soubor, zvuk se zobrazí jako rámec se standardním výchozím obrázkem (viz obrázek v následující sekci). Změníte miniaturu audio rámce (nastavíte svůj preferovaný obrázek).

auto presentation = System::MakeObject<Presentation>();
        
auto slide = presentation->get_Slides()->idx_get(0);
        
// Přidá audio rámec do snímku s určenou polohou a velikostí.
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);
            
// Přidá obrázek do zdrojů prezentace.
auto imageStream = System::IO::File::OpenRead(u"eagle.jpeg");
auto audioImage = presentation->get_Images()->AddImage(imageStream);
            
// Nastaví obrázek pro audio rámec.
audioFrame->get_PictureFormat()->get_Picture()->set_Image(audioImage); // <-----
        
//Uloží upravenou prezentaci na disk
presentation->Save(u"example_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);

Změna možností přehrávání zvuku

Aspose.Slides pro C++ vám umožňuje měnit možnosti, které řídí přehrávání zvuku nebo jeho vlastnosti. Například můžete upravit hlasitost zvuku, nastavit přehrávání zvuku v cyklu nebo dokonce skrýt ikonu zvuku.

The Audio Options pane in Microsoft PowerPoint:

example1_image

Možnosti Audio v PowerPointu, které odpovídají metodám Aspose.Slides AudioFrame:

Možnosti Úpravy v PowerPointu, které odpovídají vlastnostem Aspose.Slides AudioFrame:

Ovládání hlasitosti v panelu zvukové kontroly v PowerPointu odpovídá metodě AudioFrame.set_VolumeValue. Umožňuje vám změnit hlasitost zvuku v procentech.

  1. Vytvořit nebo získat Audio Frame.
  2. Nastavte nové hodnoty vlastností Audio Frame, které chcete upravit.
  3. Uložte upravený soubor PowerPoint.
auto pres = System::MakeObject<Presentation>(u"AudioFrameEmbed_out.pptx");

// Získá tvar
auto shape = pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0);

// Přetypuje tvar na AudioFrame
auto audioFrame = System::ExplicitCast<AudioFrame>(shape);

// Nastaví režim přehrávání na přehrání při kliknutí
audioFrame->set_PlayMode(AudioPlayModePreset::OnClick);

// Nastaví hlasitost na nízkou
audioFrame->set_Volume(AudioVolumeMode::Low);

// Nastaví, aby se zvuk přehrával napříč snímky
audioFrame->set_PlayAcrossSlides(true);

// Zakáže opakování pro zvuk
audioFrame->set_PlayLoopMode(false);

// Skryje AudioFrame během prezentace
audioFrame->set_HideAtShowing(true);

// Přetočí zvuk na začátek po přehrání
audioFrame->set_RewindAudio(true);

// Uloží soubor PowerPoint na disk
pres->Save(u"AudioFrameEmbed_changed.pptx", SaveFormat::Pptx);
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);

// Sets the trimming start offset to 1.5 seconds
audioFrame->set_TrimFromStart(1500);
// Sets the trimming end offset to 2 seconds
audioFrame->set_TrimFromEnd(2000);

// Sets the fade-in duration to 200 ms
audioFrame->set_FadeInDuration(200);
// Sets the fade-out duration to 500 ms
audioFrame->set_FadeOutDuration(500);

pres->Save(u"AudioFrameTrimFade_out.pptx", SaveFormat::Pptx);
pres->Dispose();
auto pres = MakeObject<Presentation>(u"AudioFrameEmbed_out.pptx");
    
// Získá tvar audio rámce
auto audioFrame = ExplicitCast<IAudioFrame>(pres->get_Slide(0)->get_Shape(0));

// Nastaví hlasitost zvuku na 85%
audioFrame->set_VolumeValue(85);

pres->Save(u"AudioFrameValue_out.pptx", SaveFormat::Pptx);
pres->Dispose();

Správa titulků zvuku

Aspose.Slides vám umožňuje přidat uzavřené titulky k audio rámci pomocí metody get_CaptionTracks. Tato metoda vrací ICaptionsCollection, což vám umožňuje přidávat WebVTT stopy titulků, procházet existující stopy a odstraňovat je podle potřeby.

Přidání titulků zvuku

Použijte metodu get_CaptionTracks k připojení jedné nebo více stop titulků k audio rámci. V následujícím příkladu je zvukový soubor přidán na snímek a poté je načtena nová stopa titulků ze souboru .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);

// Add a new caption track from a WebVTT file.
audioFrame->get_CaptionTracks()->Add(u"New track", u"track.vtt");

presentation->Save(u"audio_with_captions.pptx", SaveFormat::Pptx);
presentation->Dispose();

Extrahování titulků zvuku

Můžete procházet stopy titulků přidružené k audio rámci a ukládat je jako soubory .vtt. Každá stopa titulků poskytuje své binární údaje a jedinečný identifikátor, který lze použít při exportu titulků.

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())
        {
            // Uložte každou stopu titulků jako soubor .vtt.
            auto fileName = captionTrack->get_CaptionId().ToString() + u".vtt";
            File::WriteAllBytes(fileName, captionTrack->get_BinaryData());
        }
    }
}
presentation->Dispose();

Odstranění titulků zvuku

Pro odstranění titulků z audio rámce použijte metody poskytované rozhraním ICaptionsCollection, jako jsou Clear, Remove, nebo RemoveAt. Následující příklad odstraňuje všechny stopy titulků z audio rámce.

auto presentation = MakeObject<Presentation>(u"audio_with_captions.pptx");
auto slide = presentation->get_Slide(0);
auto audioFrame = ExplicitCast<IAudioFrame>(slide->get_Shape(0));

// Odstraní všechny stopy titulků z audio rámce.
audioFrame->get_CaptionTracks()->Clear();

presentation->Save(u"audio_without_captions.pptx", SaveFormat::Pptx);
presentation->Dispose();

Extrahování zvuku

Aspose.Slides vám umožňuje extrahovat zvuk použitý v přechodech prezentace. Například můžete extrahovat zvuk použitý v konkrétním snímku.

  1. Vytvořte instanci třídy Presentation a načtěte prezentaci obsahující zvuk.
  2. Získejte odkaz na příslušný snímek přes jeho index.
  3. Přistupte k přechodům prezentace pro daný snímek.
  4. Extrahujte zvuk jako sekvenci bajtů.
String presName = u"AudioSlide.pptx";

// Vytvoří instanci třídy Presentation, která představuje soubor prezentace
auto pres = System::MakeObject<Presentation>(presName);

// Získá požadovaný snímek
auto slide = pres->get_Slides()->idx_get(0);

// Získá efekty přechodu prezentace pro snímek
auto transition = slide->get_SlideShowTransition();

// Extrahuje zvuk do pole bajtů
auto audio = transition->get_Sound()->get_BinaryData();

Console::WriteLine(String(u"Length: ") + audio->get_Length());

Často kladené otázky

Mohu znovu použít stejný zvukový soubor na více snímcích, aniž by se zvětšila velikost souboru?

Ano. Přidejte zvuk jednou do sdílené audio kolekce prezentace a vytvořte další audio rámce, které odkazují na tento existující objekt. Tím se zabrání duplikaci mediálních dat a velikost prezentace zůstane pod kontrolou.

Mohu nahradit zvuk v existujícím audio rámci, aniž bych musel znovu vytvářet tvar?

Ano. U propojeného zvuku aktualizujte cestu odkazu tak, aby ukazovala na nový soubor. U vloženého zvuku vyměňte objekt embedded audio za jiný z audio kolekce prezentace. Formátování rámce a většina nastavení přehrávání zůstane beze změny.

Mění ořezávání podkladová zvuková data uložená v prezentaci?

Ne. Ořezávání upravuje pouze hranice přehrávání. Původní bajty zvuku zůstávají nedotčeny a jsou přístupné přes vložený zvuk nebo audio kolekci prezentace.