จัดการ Audio ในการนำเสนอด้วย C++

ภาพรวม

บทความนี้อธิบายวิธีการทำงานกับ Audio Frames ใน Aspose.Slides รวมถึงการเพิ่ม Audio ฝังในสไลด์ การปรับแต่ง Thumbnail ของ Audio Frame การกำหนดค่าการเล่นเช่น ระดับเสียง การวนลูป การซ่อน การตัดต่อ และระยะเวลา Fade รวมถึงการสกัด Audio ที่ใช้ในการเปลี่ยนสไลด์โชว์

สร้าง Audio Frames

Aspose.Slides for C++ ให้คุณเพิ่มไฟล์เสียงลงในสไลด์ ไฟล์เสียงจะถูกฝังในสไลด์เป็น Audio Frames

  1. สร้างอินสแตนซ์ของ Presentation class
  2. รับอ้างอิงของสไลด์ผ่านดัชนี
  3. โหลดสตรีมไฟล์เสียงที่ต้องการฝังลงในสไลด์
  4. เพิ่ม Audio Frame ที่ฝังไฟล์เสียงลงในสไลด์
  5. ตั้งค่า PlayMode และ Volume ที่เปิดเผยโดยอ็อบเจกต์ IAudioFrame
  6. บันทึกการนำเสนอที่แก้ไขแล้ว

โค้ด C++ ตัวอย่างนี้แสดงวิธีการเพิ่ม Audio Frame ฝังในสไลด์:

// สร้างอินสแตนซ์ของคลาส Presentation ที่เป็นไฟล์การนำเสนอ
auto pres = System::MakeObject<Presentation>();

// ดึงสไลด์แรก
auto sld = pres->get_Slides()->idx_get(0);

// โหลดไฟล์เสียง wav ไปเป็นสตรีม
auto fstr = System::MakeObject<FileStream>(u"sampleaudio.wav", FileMode::Open, FileAccess::Read);

// เพิ่ม Audio Frame
auto audioFrame = sld->get_Shapes()->AddAudioFrameEmbedded(50.0f, 150.0f, 100.0f, 100.0f, fstr);

// ตั้งค่าโหมดการเล่นและระดับเสียงของ Audio
audioFrame->set_PlayMode(AudioPlayModePreset::Auto);
audioFrame->set_Volume(AudioVolumeMode::Loud);

// เขียนไฟล์ PowerPoint ลงดิสก์
pres->Save(u"AudioFrameEmbed_out.pptx", SaveFormat::Pptx);

เปลี่ยนภาพย่อของ Audio Frame

เมื่อคุณเพิ่มไฟล์เสียงลงในการนำเสนอ เสียงจะปรากฏเป็นเฟรมพร้อมภาพเริ่มต้นมาตรฐาน (ดูรูปด้านล่าง) คุณสามารถเปลี่ยนภาพย่อของ Audio Frame (ตั้งค่าภาพที่คุณต้องการ)

โค้ด C++ ตัวอย่างนี้แสดงวิธีการเปลี่ยนภาพย่อหรือภาพพรีวิวของ Audio Frame:

auto presentation = System::MakeObject<Presentation>();
        
auto slide = presentation->get_Slides()->idx_get(0);
        
// เพิ่ม Audio Frame ลงในสไลด์ด้วยตำแหน่งและขนาดที่กำหนด.
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);
            
// เพิ่มรูปภาพลงในทรัพยากรของการนำเสนอ.
auto imageStream = System::IO::File::OpenRead(u"eagle.jpeg");
auto audioImage = presentation->get_Images()->AddImage(imageStream);
            
// ตั้งค่ารูปภาพสำหรับ Audio Frame. // <-----
        
// บันทึกการนำเสนอที่แก้ไขแล้วลงดิสก์
presentation->Save(u"example_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);

เปลี่ยนตัวเลือกการเล่นเสียง

Aspose.Slides for C++ ให้คุณเปลี่ยนตัวเลือกที่ควบคุมการเล่นหรือคุณสมบัติของเสียง เช่น ปรับระดับเสียง ตั้งค่าให้เสียงเล่นแบบวนลูป หรือซ่อนไอคอนเสียง

แผง ตัวเลือกเสียง ใน Microsoft PowerPoint:

example1_image

PowerPoint ตัวเลือกเสียง ที่สอดคล้องกับเมธอดของ Aspose.Slides AudioFrame :

ตัวเลือก การแก้ไข ของ PowerPoint ที่สอดคล้องกับคุณลักษณะของ Aspose.Slides AudioFrame :

ตัวควบคุม ระดับเสียง ของ PowerPoint บนแผงควบคุมเสียงสอดคล้องกับเมธอด AudioFrame.set_VolumeValue ซึ่งให้คุณปรับระดับเสียงเป็นเปอร์เซ็นต์

นี่คือตัวอย่างการเปลี่ยนตัวเลือกการเล่นเสียง:

  1. สร้าง หรือรับ Audio Frame
  2. ตั้งค่าค่าใหม่สำหรับคุณสมบัติของ Audio Frame ที่ต้องการปรับ
  3. บันทึกไฟล์ PowerPoint ที่แก้ไขแล้ว

โค้ด C++ ตัวอย่างนี้แสดงการปรับตัวเลือกของ Audio:

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

// รับรูปทรง
auto shape = pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0);

// แปลงรูปทรงเป็นรูปทรง AudioFrame
auto audioFrame = System::ExplicitCast<AudioFrame>(shape);

// ตั้งค่าโหมดการเล่นให้เล่นเมื่อคลิก
audioFrame->set_PlayMode(AudioPlayModePreset::OnClick);

// ตั้งค่าระดับเสียงเป็น Low
audioFrame->set_Volume(AudioVolumeMode::Low);

// ตั้งค่าให้เสียงเล่นข้ามสไลด์
audioFrame->set_PlayAcrossSlides(true);

// ปิดการวนลูปสำหรับเสียง
audioFrame->set_PlayLoopMode(false);

// ซ่อน AudioFrame ระหว่างการแสดงสไลด์
audioFrame->set_HideAtShowing(true);

// รีวินด์เสียงให้เริ่มต้นใหม่หลังการเล่น
audioFrame->set_RewindAudio(true);

// บันทึกไฟล์ PowerPoint ลงดิสก์
pres->Save(u"AudioFrameEmbed_changed.pptx", SaveFormat::Pptx);

ตัวอย่าง C++ นี้แสดงวิธีเพิ่ม Audio Frame ใหม่พร้อม Audio ฝัง ตัดต่อ และตั้งค่าระยะเวลา Fade:

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

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีดึง Audio Frame ที่ฝัง Audio และตั้งค่าระดับเสียงเป็น 85%:

auto pres = MakeObject<Presentation>(u"AudioFrameEmbed_out.pptx");
    
// ดึงรูปทรง Audio Frame
auto audioFrame = ExplicitCast<IAudioFrame>(pres->get_Slide(0)->get_Shape(0));

// ตั้งค่าระดับเสียงของ Audio เป็น 85%
audioFrame->set_VolumeValue(85);

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

จัดการคำบรรยายเสียง

Aspose.Slides ให้คุณเพิ่ม Closed Captions ให้กับ Audio Frame ผ่านเมธอด [get_CaptionTracks] วิธีนี้จะคืนค่า [ICaptionsCollection] ซึ่งช่วยให้คุณเพิ่ม WebVTT Caption Tracks, วนลูปผ่านแทร็กที่มีอยู่, และลบออกเมื่อจำเป็น

เพิ่มคำบรรยายเสียง

ใช้เมธอด [get_CaptionTracks] เพื่อผนวกแทร็กคำบรรยายหนึ่งหรือหลายแทร็กเข้ากับ Audio Frame ในตัวอย่างต่อไปนี้ไฟล์เสียงจะถูกเพิ่มลงในสไลด์ จากนั้นโหลดแทร็กคำบรรยายใหม่จากไฟล์ .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);

// เพิ่มแทร็กคำบรรยายใหม่จากไฟล์ WebVTT
audioFrame->get_CaptionTracks()->Add(u"New track", u"track.vtt");

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

ดึงคำบรรยายเสียง

คุณสามารถวนลูปผ่านแทร็กคำบรรยายที่เชื่อมโยงกับ Audio Frame และบันทึกเป็นไฟล์ .vtt แต่ละแทร็กจะแสดงข้อมูลไบนารีและตัวระบุที่ไม่ซ้ำกัน ซึ่งสามารถนำไปใช้เมื่อส่งออกคำบรรยาย

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())
        {
            // บันทึกแต่ละแทร็กคำบรรยายเป็นไฟล์ .vtt
            auto fileName = captionTrack->get_CaptionId().ToString() + u".vtt";
            File::WriteAllBytes(fileName, captionTrack->get_BinaryData());
        }
    }
}
presentation->Dispose();

ลบคำบรรยายเสียง

เพื่อที่จะลบคำบรรยายจาก Audio Frame ให้ใช้เมธอดที่มาจาก [ICaptionsCollection] เช่น [Clear], [Remove] หรือ [RemoveAt] ตัวอย่างต่อไปนี้ลบแทร็กคำบรรยายทั้งหมดจาก Audio Frame

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

// ลบแทร็กคำบรรยายทั้งหมดจาก Audio Frame.
audioFrame->get_CaptionTracks()->Clear();

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

ดึงเสียง

Aspose.Slides ให้คุณสกัดเสียงที่ใช้ในการเปลี่ยนสไลด์โชว์ ตัวอย่างเช่น คุณสามารถสกัดเสียงที่ใช้ในสไลด์เฉพาะได้

  1. สร้างอินสแตนซ์ของ Presentation แล้วโหลดการนำเสนอที่มี Audio
  2. รับอ้างอิงของสไลด์ที่ต้องการผ่านดัชนี
  3. เข้าถึงการเปลี่ยนสไลด์สำหรับสไลด์นั้น
  4. สกัดเสียงเป็นข้อมูลไบต์

โค้ด C++ ตัวอย่างนี้แสดงวิธีสกัด Audio ที่ใช้ในสไลด์:

String presName = u"AudioSlide.pptx";

// สร้างอินสแตนซ์ของคลาส Presentation ที่เป็นไฟล์การนำเสนอ
auto pres = System::MakeObject<Presentation>(presName);

// Accesses the desired slide
auto slide = pres->get_Slides()->idx_get(0);

// Gets the slideshow transition effects for the slide
auto transition = slide->get_SlideShowTransition();

// Extracts the sound in byte array
auto audio = transition->get_Sound()->get_BinaryData();

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

คำถามที่พบบ่อย

ฉันสามารถใช้ไฟล์ Audio เดียวกันในหลายสไลด์โดยไม่ทำให้ขนาดไฟล์เพิ่มขึ้นได้หรือไม่?

ได้ครับ เพิ่ม Audio ครั้งเดียวใน [audio collection] ร่วมของการนำเสนอ แล้วสร้าง Audio Frame เพิ่มเติมที่อ้างอิงถึง Asset นั้น วิธีนี้ช่วยหลีกเลี่ยงการซ้ำซ้อนของข้อมูลมีเดียและทำให้ขนาดไฟล์อยู่ในระดับที่ควบคุมได้

ฉันสามารถเปลี่ยนเสียงใน Audio Frame ที่มีอยู่โดยไม่ต้องสร้าง Shape ใหม่ได้หรือไม่?

ได้ครับ สำหรับเสียงที่เป็นลิงก์ ให้อัปเดต [link path] ให้ชี้ไปยังไฟล์ใหม่ สำหรับเสียงที่ฝัง ให้สลับอ็อบเจกต์ [embedded audio] ด้วยออบเจกต์อื่นจาก [audio collection] ของการนำเสนอ การจัดรูปแบบของเฟรมและการตั้งค่าการเล่นส่วนใหญ่จะคงเดิม

การตัดต่อจะทำให้ข้อมูล Audio ดิบที่เก็บในการนำเสนอเปลี่ยนแปลงหรือไม่?

ไม่ครับ การตัดแค่ปรับขอบเขตการเล่นเท่านั้น ไบต์ของ Audio ดั้งเดิมยังคงอยู่และสามารถเข้าถึงได้ผ่าน Audio ฝังหรือ [audio collection] ของการนำเสนอ