จัดการเฟรมเสียงในงานนำเสนอใน .NET

ภาพรวม

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

สร้างเฟรมเสียง

Aspose.Slides for .NET อนุญาตให้คุณเพิ่มไฟล์เสียงลงในสไลด์ ไฟล์เสียงจะถูกฝังในสไลด์เป็นเฟรมเสียง

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

โค้ด C# นี้แสดงวิธีเพิ่มเฟรมเสียงที่ฝังลงในสไลด์:

// สร้างอินสแตนซ์ของคลาส Presentation ที่แสดงถึงไฟล์งานนำเสนอ
using (Presentation pres = new Presentation())
{
    // ดึงสไลด์แรก
    ISlide sld = pres.Slides[0];
    
    // โหลดไฟล์เสียง wav ไปยังสตรีม
    FileStream fstr = new FileStream("sampleaudio.wav", FileMode.Open, FileAccess.Read);

    // เพิ่ม Audio Frame
    IAudioFrame audioFrame = sld.Shapes.AddAudioFrameEmbedded(50, 150, 100, 100, fstr);

    // ตั้งค่า Play Mode และ Volume ของ Audio
    audioFrame.PlayMode = AudioPlayModePreset.Auto;
    audioFrame.Volume = AudioVolumeMode.Loud;

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

เปลี่ยนรูปย่อของเฟรมเสียง

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

โค้ด C# นี้แสดงวิธีเปลี่ยนรูปย่อหรือรูปภาพตัวอย่างของเฟรมเสียง:

using (var presentation = new Presentation())
{
    var slide = presentation.Slides[0];

    // เพิ่มเฟรมเสียงลงในสไลด์ด้วยตำแหน่งและขนาดที่กำหนด
    var audioStream = new FileStream("sample2.mp3", FileMode.Open, FileAccess.Read);
    var audioFrame = slide.Shapes.AddAudioFrameEmbedded(150, 100, 50, 50, audioStream);
    audioStream.Dispose();

    // เพิ่มภาพลงในทรัพยากรของงานนำเสนอ
    var imageStream = File.OpenRead("eagle.jpeg");
    var audioImage = presentation.Images.AddImage(imageStream);
    imageStream.Dispose();

    // ตั้งค่าภาพสำหรับเฟรมเสียง
    audioFrame.PictureFormat.Picture.Image = audioImage; // <-----
	
	//บันทึกงานนำเสนอที่แก้ไขแล้วลงดิสก์
    presentation.Save("example_out.pptx", SaveFormat.Pptx);
}

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

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

แผง Audio Options ใน Microsoft PowerPoint:

example1_image

ตัวเลือก Audio Options ของ PowerPoint ที่สอดคล้องกับคุณสมบัติของ Aspose.SlidesAudioFrame มีดังนี้

ตัวเลือก Editing ของ PowerPoint ที่สอดคล้องกับคุณสมบัติของ Aspose.SlidesAudioFrame มีดังนี้

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

วิธีปรับตัวเลือกการเล่นเสียงมีดังนี้

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

โค้ด C# นี้สาธิตการปรับตัวเลือกของเสียง:

using (Presentation pres = new Presentation("AudioFrameEmbed_out.pptx"))
{
    // ดึงรูปร่าง AudioFrame
    AudioFrame audioFrame = (AudioFrame)pres.Slides[0].Shapes[0];

    // ตั้งค่า Play mode ให้เล่นเมื่อคลิก
    audioFrame.PlayMode = AudioPlayModePreset.OnClick;

    // ตั้งค่าปริมาณเสียงเป็น Low
    audioFrame.Volume = AudioVolumeMode.Low;

    // ตั้งค่าให้เสียงเล่นต่อเนื่องข้ามสไลด์
    audioFrame.PlayAcrossSlides = true;

    // ปิดการวนลูปสำหรับเสียง
    audioFrame.PlayLoopMode = false;

    // ซ่อน AudioFrame ระหว่างการนำเสนอ
    audioFrame.HideAtShowing = true;

    // ทำการรีวินด์เสียงกลับไปเริ่มต้นหลังการเล่น
    audioFrame.RewindAudio = true;

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

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

using (Presentation pres = new Presentation())
{
    ISlide slide = pres.Slides[0];

    byte[] audioData = File.ReadAllBytes("sampleaudio.mp3");
    IAudio audio = pres.Audios.AddAudio(audioData);
    IAudioFrame audioFrame = slide.Shapes.AddAudioFrameEmbedded(50, 50, 100, 100, audio);

    // ตั้งค่าออฟเซ็ตการตัดเริ่มต้นเป็น 1.5 วินาที
    audioFrame.TrimFromStart = 1500f;
    // ตั้งค่าออฟเซ็ตการตัดสิ้นสุดเป็น 2 วินาที
    audioFrame.TrimFromEnd = 2000f;

    // ตั้งค่าเวลาการเฟดอินเป็น 200 มิลลิวินาที
    audioFrame.FadeInDuration = 200f;
    // ตั้งค่าเวลาการเฟดเอาท์เป็น 500 มิลลิวินาที
    audioFrame.FadeOutDuration = 500f;

    pres.Save("AudioFrameTrimFade_out.pptx", SaveFormat.Pptx);
}

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

using (Presentation pres = new Presentation("AudioFrameEmbed_out.pptx"))
{
    // ดึงรูปร่าง Audio Frame
    IAudioFrame audioFrame = (IAudioFrame)pres.Slides[0].Shapes[0];

    // ตั้งค่าปริมาณเสียงเป็น 85%
    audioFrame.VolumeValue = 85f;
    
    pres.Save("AudioFrameValue_out.pptx", SaveFormat.Pptx);
}

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

Aspose.Slides อนุญาตให้คุณเพิ่มคำบรรยายปิด (closed captions) ให้กับ Audio Frame ผ่านคุณสมบัติCaptionTracks ซึ่งจะคืนค่าเป็นICaptionsCollection ให้คุณเพิ่มแทร็กคำบรรยาย WebVTT, วนลูปผ่านแทร็กที่มีอยู่, และลบออกเมื่อจำเป็น

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

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

using (Presentation presentation = new Presentation())
{
    byte[] audioData = File.ReadAllBytes("audio.mp3");
    IAudio audio = presentation.Audios.AddAudio(audioData);

    ISlide slide = presentation.Slides[0];
    IAudioFrame audioFrame = slide.Shapes.AddAudioFrameEmbedded(10, 10, 50, 50, audio);

    // เพิ่มแทร็กคำบรรยายใหม่จากไฟล์ WebVTT.
    presentation.Save("audio_with_captions.pptx", SaveFormat.Pptx);
}

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

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

using (Presentation presentation = new Presentation("audio_with_captions.pptx"))
{
    ISlide slide = presentation.Slides[0];
    foreach (IShape shape in slide.Shapes)
    {
        if (shape is IAudioFrame audioFrame)
        {
            foreach (ICaptions captionTrack in audioFrame.CaptionTracks)
            {
                // บันทึกแทร็กคำบรรยายเป็นไฟล์ .vtt.
                File.WriteAllBytes($"{captionTrack.CaptionId}.vtt", captionTrack.BinaryData);
            }
        }
    }
}

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

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

using (Presentation presentation = new Presentation("audio_with_captions.pptx"))
{
    ISlide slide = presentation.Slides[0];
    IAudioFrame audioFrame = slide.Shapes[0] as IAudioFrame;

    // ลบแทร็กคำบรรยายทั้งหมดจากเฟรมเสียง.
    audioFrame.CaptionTracks.Clear();

    presentation.Save("audio_without_captions.pptx", SaveFormat.Pptx);
}

สกัดเสียง

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

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

โค้ด C# นี้แสดงวิธีสกัดเสียงที่ใช้ในสไลด์:

string presName = "AudioSlide.pptx";

// สร้างอินสแตนซ์ของคลาส Presentation ที่แสดงถึงไฟล์งานนำเสนอ
Presentation pres = new Presentation(presName);

// เข้าถึงสไลด์
ISlide slide = pres.Slides[0];

// ดึงเอฟเฟกต์การเปลี่ยนสไลด์โชว์สำหรับสไลด์
ISlideShowTransition transition = slide.SlideShowTransition;

//สกัดเสียงเป็นอาร์เรย์ไบต์
byte[] audio = transition.Sound.BinaryData;

System.Console.WriteLine("Length: " + audio.Length);

FAQ

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

ได้ เพียงเพิ่มเสียงครั้งเดียวในaudio collectionที่ใช้ร่วมกันของงานนำเสนอ แล้วสร้าง Audio Frame เพิ่มเติมที่อ้างอิงไปยังแอสเซทนั้น ซึ่งจะช่วยหลีกเลี่ยงการทำสำเนาข้อมูลสื่อและทำให้ขนาดงานนำเสนอคงที่

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

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

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

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