จัดการเสียงในงานนำเสนอด้วย Java
ภาพรวม
บทความนี้อธิบายวิธีทำงานกับเฟรมเสียงใน Aspose.Slides ซึ่งจะแสดงวิธีเพิ่มเสียงฝังในสไลด์ ปรับแต่งภาพย่อของเฟรมเสียง กำหนดค่าตัวเลือกการเล่น เช่น ระดับเสียง การวนซ้ำ การซ่อน การตัดส่วน และระยะเวลาเฟด รวมทั้งสกัดเสียงที่ใช้ในการเปลี่ยนสไลด์โชว์
สร้างเฟรมเสียง
Aspose.Slides for Java อนุญาตให้คุณเพิ่มไฟล์เสียงในสไลด์ ไฟล์เสียงจะถูกฝังในสไลด์เป็นเฟรมเสียง
- สร้างอินสแตนซ์ของคลาส Presentation
- ดึงอ้างอิงของสไลด์ผ่านดัชนีของมัน
- โหลดสตรีมไฟล์เสียงที่คุณต้องการฝังในสไลด์
- เพิ่มเฟรมเสียงที่ฝัง (ซึ่งประกอบด้วยไฟล์เสียง) เข้าในสไลด์
- ตั้งค่า PlayMode และ
Volumeที่เปิดเผยโดยวัตถุ IAudioFrame - บันทึกการนำเสนอที่แก้ไขแล้ว
โค้ด Java นี้แสดงวิธีเพิ่มเฟรมเสียงฝังลงในสไลด์:
// สร้างอินสแทนซ์ของคลาส Presentation ที่แสดงไฟล์การนำเสนอ
Presentation pres = new Presentation();
try {
// ดึงสไลด์แรก
ISlide sld = pres.getSlides().get_Item(0);
// โหลดไฟล์เสียง wav ไปยังสตรีม
FileInputStream fstr = new FileInputStream(new File("audio.wav"));
// เพิ่มเฟรมเสียง
IAudioFrame audioFrame = sld.getShapes().addAudioFrameEmbedded(50, 150, 100, 100, fstr);
fstr.close();
// ตั้งค่าโหมดการเล่นและระดับเสียงของเสียง
audioFrame.setPlayMode(AudioPlayModePreset.Auto);
audioFrame.setVolume(AudioVolumeMode.Loud);
// เขียนไฟล์ PowerPoint ลงดิสก์
pres.save("AudioFrameEmbed_out.pptx", SaveFormat.Pptx);
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
เปลี่ยนภาพย่อของเฟรมเสียง
เมื่อคุณเพิ่มไฟล์เสียงลงในการนำเสนอ เสียงจะแสดงเป็นเฟรมพร้อมภาพเริ่มต้นมาตรฐาน (ดูภาพในส่วนด้านล่าง) คุณสามารถเปลี่ยนภาพตัวอย่างของเฟรมเสียง (ตั้งค่าภาพที่คุณต้องการ)
โค้ด Java นี้แสดงวิธีเปลี่ยนภาพย่อหรือภาพตัวอย่างของเฟรมเสียง:
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
// เพิ่มเฟรมเสียงลงในสไลด์โดยระบุตำแหน่งและขนาดที่กำหนด.
FileInputStream audioStream = new FileInputStream("sample2.mp3");
IAudioFrame audioFrame = slide.getShapes().addAudioFrameEmbedded(150, 100, 50, 50, audioStream);
audioStream.close();
// เพิ่มรูปภาพไปยังทรัพยากรของการนำเสนอ.
IPPImage picture;
IImage image = Images.fromFile("eagle.jpeg");
try {
picture = presentation.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// ตั้งค่ารูปภาพสำหรับเฟรมเสียง.
audioFrame.getPictureFormat().getPicture().setImage(picture); // <-----
//บันทึกการนำเสนอที่แก้ไขแล้วลงดิสก์
presentation.save("example_out.pptx", SaveFormat.Pptx);
} catch(IOException e) {
} finally {
if (presentation != null) presentation.dispose();
}
เปลี่ยนตัวเลือกการเล่นเสียง
Aspose.Slides for Java อนุญาตให้คุณเปลี่ยนตัวเลือกที่ควบคุมการเล่นหรือคุณสมบัติของเสียง เช่น สามารถปรับระดับเสียงของเสียง ตั้งค่าให้เสียงเล่นวนซ้ำ หรือแม้แต่ซ่อนไอคอนเสียง
แผง Audio Options ใน Microsoft PowerPoint:

PowerPoint Audio Options ที่สอดคล้องกับคุณสมบัติของ Aspose.Slides AudioFrame มีดังนี้:
- Start รายการดรอป‑ดาวน์ ตรงกับเมธอด AudioFrame.setPlayMode
- Volume ตรงกับเมธอด AudioFrame.setVolume
- Play Across Slides ตรงกับเมธอด AudioFrame.setPlayAcrossSlides
- Loop until Stopped ตรงกับเมธอด AudioFrame.setPlayLoopMode
- Hide During Show ตรงกับเมธอด AudioFrame.setHideAtShowing
- Rewind after Playing ตรงกับเมธอด AudioFrame.setRewindAudio
ตัวเลือก Editing ของ PowerPoint ที่สอดคล้องกับคุณสมบัติของ Aspose.Slides [AudioFrame] มีดังนี้:
- Fade In ตรงกับเมธอด AudioFrame.setFadeInDuration
- Fade Out ตรงกับเมธอด AudioFrame.setFadeOutDuration
- Trim Audio Start Time ตรงกับเมธอด AudioFrame.setTrimFromStart
- Trim Audio End Time มีค่าเท่ากับระยะเวลาของเสียงลบค่าที่ตั้งในเมธอด AudioFrame.setTrimFromEnd
ตัวควบคุม Volume controll บนแผงควบคุมเสียงของ PowerPoint สอดคล้องกับเมธอด AudioFrame.setVolumeValue ซึ่งทำให้คุณเปลี่ยนระดับเสียงเป็นเปอร์เซ็นต์
วิธีการเปลี่ยนตัวเลือกการเล่นเสียงมีดังนี้:
- Сreate หรือดึง Audio Frame
- ตั้งค่าคุณสมบัติของ Audio Frame ที่ต้องการปรับเป็นค่ใหม่
- บันทึกไฟล์ PowerPoint ที่แก้ไขแล้ว
โค้ด Java นี้แสดงการดำเนินการที่ปรับตัวเลือกของเสียง:
Presentation pres = new Presentation("AudioFrameEmbed_out.pptx");
try {
// ดึงรูปแบบ AudioFrame
AudioFrame audioFrame = (AudioFrame)pres.getSlides().get_Item(0).getShapes().get_Item(0);
// ตั้งค่าโหมดการเล่นให้เล่นเมื่อคลิก
audioFrame.setPlayMode(AudioPlayModePreset.OnClick);
// ตั้งระดับเสียงเป็นต่ำ
audioFrame.setVolume(AudioVolumeMode.Low);
// ตั้งค่าให้เสียงเล่นต่อเนื่องข้ามสไลด์
audioFrame.setPlayAcrossSlides(true);
// ปิดการวนซ้ำสำหรับเสียง
audioFrame.setPlayLoopMode(false);
// ซ่อน AudioFrame ระหว่างการนำเสนอ
audioFrame.setHideAtShowing(true);
// รีวินด์เสียงกลับไปเริ่มต้นหลังการเล่น
audioFrame.setRewindAudio(true);
// บันทึกไฟล์ PowerPoint ลงดิสก์
pres.save("AudioFrameEmbed_changed.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
ตัวอย่าง Java นี้แสดงวิธีเพิ่มเฟรมเสียงใหม่พร้อมเสียงฝัง, ตัดส่วน, และตั้งค่าระยะเวลาเฟด:
Presentation pres = new Presentation();
try {
ISlide slide = pres.getSlides().get_Item(0);
byte[] audioData = Files.readAllBytes(Paths.get("sampleaudio.mp3"));
IAudio audio = pres.getAudios().addAudio(audioData);
IAudioFrame audioFrame = slide.getShapes().addAudioFrameEmbedded(50, 50, 100, 100, audio);
// ตั้งค่าออฟเซ็ตการตัดเริ่มต้นเป็น 1.5 วินาที
// ตั้งค่าออฟเซ็ตการตัดสุดท้ายเป็น 2 วินาที
// ตั้งค่าระยะเวลา fade‑in เป็น 200 มิลลิวินาที
// ตั้งค่าระยะเวลา fade‑out เป็น 500 มิลลิวินาที
pres.save("AudioFrameTrimFade_out.pptx", SaveFormat.Pptx);
} finally {
pres.dispose();
}
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีดึงเฟรมเสียงที่มีเสียงฝังและตั้งค่าระดับเสียงเป็น 85%:
Presentation pres = new Presentation("AudioFrameEmbed_out.pptx");
try {
ISlide slide = pres.getSlides().get_Item(0);
// ดึงรูปร่างของ audio frame
IAudioFrame audioFrame = (IAudioFrame)slide.getShapes().get_Item(0);
// ตั้งค่าระดับเสียงของ audio เป็น 85%
audioFrame.setVolumeValue(85f);
pres.save("AudioFrameValue_out.pptx", SaveFormat.Pptx);
}
finally {
pres.dispose();
}
จัดการคำบรรยายเสียง
Aspose.Slides อนุญาตให้คุณเพิ่มคำบรรยายปิด (closed captions) ให้กับเฟรมเสียงผ่านเมธอด getCaptionTracks . เมธอดนี้จะคืนค่าเป็น ICaptionsCollection ซึ่งให้คุณเพิ่มแทร็กคำบรรยาย WebVTT, วนซ้ำผ่านแทร็กที่มีอยู่, และลบเมื่อจำเป็น
เพิ่มคำบรรยายเสียง
ใช้เมธอด getCaptionTracks เพื่อแนบแทร็กคำบรรยายหนึ่งหรือหลายแทร็กให้กับเฟรมเสียง ในตัวอย่างต่อไปนี้ จะเพิ่มไฟล์เสียงลงในสไลด์ แล้วโหลดแทร็กคำบรรยายใหม่จากไฟล์ .vtt.
Presentation presentation = new Presentation();
try {
byte[] audioData = Files.readAllBytes(Paths.get("audio.mp3"));
IAudio audio = presentation.getAudios().addAudio(audioData);
ISlide slide = presentation.getSlides().get_Item(0);
IAudioFrame audioFrame = slide.getShapes().addAudioFrameEmbedded(10, 10, 50, 50, audio);
// เพิ่มแทร็กคำบรรยายใหม่จากไฟล์ WebVTT.
presentation.save("audio_with_captions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
สกัดคำบรรยายเสียง
คุณสามารถวนซ้ำผ่านแทร็กคำบรรยายที่เชื่อมโยงกับเฟรมเสียงและบันทึกเป็นไฟล์ .vtt แต่ละแทร็กคำบรรยายจะเปิดเผยข้อมูลไบนารีและตัวระบุที่ไม่ซ้ำกัน ซึ่งสามารถใช้เมื่อนำออกคำบรรยาย
Presentation presentation = new Presentation("audio_with_captions.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
for (IShape shape : slide.getShapes()) {
if (shape instanceof IAudioFrame ) {
IAudioFrame audioFrame = (IAudioFrame) shape;
for (ICaptions captionTrack : audioFrame.getCaptionTracks()) {
// บันทึกแทร็กคำบรรยายเป็นไฟล์ .vtt
Path filePath = Paths.get(captionTrack.getCaptionId() + ".vtt");
Files.write(filePath, captionTrack.getBinaryData());
}
}
}
} finally {
presentation.dispose();
}
ลบคำบรรยายเสียง
เพื่อทำการลบคำบรรยายจากเฟรมเสียง ใช้วิธีการที่ให้โดย ICaptionsCollection เช่น clear, remove, หรือ removeAt. ตัวอย่างต่อไปนี้จะลบแทร็กคำบรรยายทั้งหมดจากเฟรมเสียง.
Presentation presentation = new Presentation("audio_with_captions.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAudioFrame audioFrame = (IAudioFrame) slide.getShapes().get_Item(0);
// ลบแทร็กคำบรรยายทั้งหมดจากเฟรมเสียง.
audioFrame.getCaptionTracks().clear();
presentation.save("audio_without_captions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
สกัดเสียง
Aspose.Slides for Java อนุญาตให้คุณสกัดเสียงที่ใช้ในการเปลี่ยนสไลด์โชว์ ตัวอย่างเช่น คุณสามารถสกัดเสียงที่ใช้ในสไลด์เฉพาะ
- สร้างอินสแตนซ์ของคลาส Presentation และโหลดการนำเสนอที่มีเสียงอยู่
- ดึงอ้างอิงของสไลด์ที่เกี่ยวข้องผ่านดัชนีของมัน
- เข้าถึง slideshow transitions ของสไลด์
- สกัดเสียงเป็นข้อมูลไบต์
โค้ด Java นี้แสดงวิธีสกัดเสียงที่ใช้ในสไลด์:
// สร้างอินสแทนซ์ของคลาส Presentation ที่แสดงไฟล์การนำเสนอ
Presentation pres = new Presentation("AudioSlide.pptx");
try {
// เข้าถึงสไลด์ที่ต้องการ
ISlide slide = pres.getSlides().get_Item(0);
// ดึงเอฟเฟ็กต์การเปลี่ยนสไลด์โชว์สำหรับสไลด์นี้
ISlideShowTransition transition = slide.getSlideShowTransition();
//สกัดเสียงในอาร์เรย์ไบต์
byte[] audio = transition.getSound().getBinaryData();
System.out.println("Length: " + audio.length);
} finally {
if (pres != null) pres.dispose();
}
FAQ
ฉันสามารถใช้ทรัพยากรเสียงเดียวกันบนหลายสไลด์โดยไม่ทำให้ไฟล์ขนาดใหญ่ขึ้นได้หรือไม่?
ได้. เพิ่มเสียงครั้งเดียวใน [audio collection] ที่ใช้ร่วมกันของการนำเสนอและสร้างเฟรมเสียงเพิ่มเติมที่อ้างอิงทรัพยากรนั้น ซึ่งช่วยหลีกเลี่ยงการทำสำเนาข้อมูลสื่อและทำให้ขนาดการนำเสนออยู่ในระดับที่ควบคุมได้
ฉันสามารถแทนที่เสียงในเฟรมเสียงที่มีอยู่โดยไม่ต้องสร้างรูปร่างใหม่ได้หรือไม่?
ได้. สำหรับเสียงที่เชื่อมโยง ให้อัปเดต [link path] ให้ชี้ไปที่ไฟล์ใหม่ สำหรับเสียงที่ฝัง ให้สลับวัตถุ [embedded audio] ด้วยวัตถุอื่นจาก [audio collection] ของการนำเสนอ การจัดรูปแบบของเฟรมและการตั้งค่าการเล่นส่วนใหญ่จะคงเดิม
การตัดส่วน (trimming) จะทำให้ข้อมูลเสียงพื้นฐานที่เก็บไว้ในการนำเปลี่ยนแปลงหรือไม่?
ไม่. การตัดส่วนจะปรับเฉพาะขอบเขตการเล่นเท่านั้น ไบต์เสียงต้นฉบับจะยังคงไม่ถูกแก้ไขและสามารถเข้าถึงได้ผ่านเสียงฝังหรือ [audio collection] ของการนำเสนอ