Hantera ljud i presentationer med C++

Översikt

Den här artikeln förklarar hur man arbetar med ljudramar i Aspose.Slides. Den visar hur man lägger till inbäddat ljud i bilder, anpassar ljudramens miniatyrbild, konfigurerar uppspelningsalternativ såsom volym, upprepning, dölja, trimning och toningsvaraktigheter, och extraherar ljud som används i bildspelsövergångar.

Skapa ljudramar

Aspose.Slides för C++ låter dig lägga till ljudfiler i bilder. Ljudfilerna bäddas in i bilder som ljudramar.

  1. Skapa en instans av klassen Presentation.
  2. Hämta en bilds referens via dess index.
  3. Läs in ljudfilströmmen du vill bädda in i bilden.
  4. Lägg till den inbäddade ljudramen (som innehåller ljudfilen) till bilden.
  5. Ställ in PlayMode och Volume som exponeras av objektet IAudioFrame.
  6. Spara den modifierade presentationen.

Den här C++-koden visar hur du lägger till en inbäddad ljudram i en bild:

// Instansierar en Presentation-klass som representerar en presentationsfil
auto pres = System::MakeObject<Presentation>();

// Hämtar den första bilden
auto sld = pres->get_Slides()->idx_get(0);

// Läser in wav-ljudfilen till en ström
auto fstr = System::MakeObject<FileStream>(u"sampleaudio.wav", FileMode::Open, FileAccess::Read);

// Lägger till ljudramen
auto audioFrame = sld->get_Shapes()->AddAudioFrameEmbedded(50.0f, 150.0f, 100.0f, 100.0f, fstr);

// Ställer in uppspelningsläge och volym för ljudet
audioFrame->set_PlayMode(AudioPlayModePreset::Auto);
audioFrame->set_Volume(AudioVolumeMode::Loud);

// Skriver PowerPoint-filen till disk
pres->Save(u"AudioFrameEmbed_out.pptx", SaveFormat::Pptx);

Ändra ljudramens miniatyrbild

När du lägger till en ljudfil i en presentation visas ljudet som en ram med en standardstandardbild (se bilden i avsnittet nedan). Du kan ändra ljudramens miniatyrbild (ange din föredragna bild).

Den här C++-koden visar hur du ändrar en ljudramens miniatyrbild eller förhandsgranskningsbild:

auto presentation = System::MakeObject<Presentation>();
        
auto slide = presentation->get_Slides()->idx_get(0);
        
// Lägger till en ljudram på bilden med en specifik position och storlek.
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);
            
// Lägger till en bild i presentationens resurser.
auto imageStream = System::IO::File::OpenRead(u"eagle.jpeg");
auto audioImage = presentation->get_Images()->AddImage(imageStream);
            
// Ställer in bilden för ljudramen.
audioFrame->get_PictureFormat()->get_Picture()->set_Image(audioImage); // <-----
        
//Sparar den modifierade presentationen till disk
presentation->Save(u"example_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);

Ändra ljuduppspelningsalternativ

Aspose.Slides för C++ låter dig ändra alternativ som styr ett ljuds uppspelning eller egenskaper. Till exempel kan du justera ett ljuds volym, ställa in ljudet att spelas i loop, eller till och med dölja ljudikonen.

The Audio Options panel i Microsoft PowerPoint:

example1_image

PowerPoint Audio Options som motsvarar metoder i Aspose.Slides AudioFrame methods:

PowerPoint Editing-alternativ som motsvarar egenskaper i Aspose.Slides AudioFrame properties:

PowerPoint Volume controll på ljudkontrollpanelen motsvarar metoden AudioFrame.set_VolumeValue method. Den låter dig ändra ljudvolymen i procent.

Så här ändrar du Audio Play options:

  1. Сreate eller hämta Audio Frame.
  2. Ställ in nya värden för de Audio Frame-egenskaper du vill justera.
  3. Spara den modifierade PowerPoint-filen.

Den här C++-koden demonstrerar en operation där ett ljuds alternativ justeras:

auto pres = System::MakeObject<Presentation>(u"AudioFrameEmbed_out.pptx");

// Hämta en form
auto shape = pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0);

// Kastar om formen till en AudioFrame-form
auto audioFrame = System::ExplicitCast<AudioFrame>(shape);

// Ställer in uppspelningsläget till att spela vid klick
audioFrame->set_PlayMode(AudioPlayModePreset::OnClick);

// Ställer in volymen till Låg
audioFrame->set_Volume(AudioVolumeMode::Low);

// Ställer in ljudet att spela över flera bilder
audioFrame->set_PlayAcrossSlides(true);

// Inaktiverar loop för ljudet
audioFrame->set_PlayLoopMode(false);

// Döljer AudioFrame under bildspelet
audioFrame->set_HideAtShowing(true);

// Spolar tillbaka ljudet till början efter uppspelning
audioFrame->set_RewindAudio(true);

// Sparar PowerPoint-filen till disk
pres->Save(u"AudioFrameEmbed_changed.pptx", SaveFormat::Pptx);

Detta C++-exempel visar hur du lägger till en ny ljudram med inbäddat ljud, trimmar den och anger toningsvaraktigheterna:

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

// Ställer in trimningsstartoffset till 1,5 sekunder
audioFrame->set_TrimFromStart(1500);
// Ställer in trimningsslutoffset till 2 sekunder
audioFrame->set_TrimFromEnd(2000);

// Ställer in toningsinslagningsvaraktigheten till 200 ms
audioFrame->set_FadeInDuration(200);
// Ställer in toningsutslagningsvaraktigheten till 500 ms
audioFrame->set_FadeOutDuration(500);

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

Följande kodexempel visar hur du hämtar en ljudram med inbäddat ljud och ställer in dess volym till 85 %:

auto pres = MakeObject<Presentation>(u"AudioFrameEmbed_out.pptx");
    
// Hämtar en ljudramform
auto audioFrame = ExplicitCast<IAudioFrame>(pres->get_Slide(0)->get_Shape(0));

// Ställer in ljudvolymen till 85%
audioFrame->set_VolumeValue(85);

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

Hantera ljudtextning

Aspose.Slides låter dig lägga till stängda undertexter till en ljudram via metoden get_CaptionTracks. Denna metod returnerar en ICaptionsCollection, som låter dig lägga till WebVTT-undertextspår, iterera genom befintliga spår och ta bort dem vid behov.

Lägg till ljudtextning

Använd metoden get_CaptionTracks för att fästa ett eller flera undertextspår till en ljudram. I följande exempel läggs en ljudfil till en bild, och sedan laddas ett nytt undertextspår från en .vtt‑fil.

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

Extrahera ljudtextning

Du kan iterera genom undertextspåren som är associerade med en ljudram och spara dem som .vtt‑filer. Varje undertextspår exponerar sina binära data och unika identifierare, vilket kan användas vid export av undertexter.

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())
        {
            // Spara varje undertextspår som en .vtt fil.
            auto fileName = captionTrack->get_CaptionId().ToString() + u".vtt";
            File::WriteAllBytes(fileName, captionTrack->get_BinaryData());
        }
    }
}
presentation->Dispose();

Ta bort ljudtextning

För att ta bort undertexter från en ljudram, använd metoderna som tillhandahålls av ICaptionsCollection, såsom Clear, Remove, eller RemoveAt. Följande exempel tar bort alla undertextspår från en ljudram.

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

// Ta bort alla undertextspår från ljudramen.
audioFrame->get_CaptionTracks()->Clear();

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

Extrahera ljud

Aspose.Slides låter dig extrahera ljudet som används i bildspelsövergångar. Till exempel kan du extrahera ljudet som används i en specifik bild.

  1. Skapa en instans av klassen Presentation och läs in presentationen som innehåller ljudet.
  2. Hämta den relevanta bildens referens via dess index.
  3. Åtkomst till bildspelsövergångarna för bilden.
  4. Extrahera ljudet som byte‑data.

Den här C++-koden visar hur du extraherar ljudet som används i en bild:

String presName = u"AudioSlide.pptx";

// Instansierar en Presentation-klass som representerar en presentationsfil
auto pres = System::MakeObject<Presentation>(presName);

// Hämtar den önskade bilden
auto slide = pres->get_Slides()->idx_get(0);

// Hämtar bildspelsövergångseffekterna för bilden
auto transition = slide->get_SlideShowTransition();

// Extraherar ljudet i en bytearray
auto audio = transition->get_Sound()->get_BinaryData();

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

FAQ

Kan jag återanvända samma ljudresurs på flera bilder utan att öka filstorleken?

Ja. Lägg till ljudet en gång i presentationens delade audio collection och skapa ytterligare ljudramar som refererar till den befintliga resursen. Detta undviker duplicering av mediedata och håller presentationens storlek under kontroll.

Kan jag ersätta ljudet i en befintlig ljudram utan att återskapa formen?

Ja. För ett länkat ljud, uppdatera link path så att det pekar på den nya filen. För ett inbäddat ljud, byt ut objektet embedded audio mot ett annat från presentationens audio collection. Ramens formatering och de flesta uppspelningsinställningar förblir intakta.

Ändrar trimning den underliggande ljuddata som lagras i presentationen?

Nej. Trimning justerar endast uppspelningsgränserna. De ursprungliga ljudbytena förblir orörda och åtkomliga via det inbäddade ljudet eller presentationens ljudsamling.