จัดการเสียงในงานนำเสนอโดยใช้ PHP

ภาพรวม

บทความนี้อธิบายวิธีทำงานกับ audio frames ใน Aspose.Slides แสดงวิธีเพิ่ม audio ที่ฝังไว้ในสไลด์ ปรับแต่ง thumbnail ของ audio frame ตั้งค่าตัวเลือกการเล่น เช่น volume, looping, hiding, trimming และระยะเวลา fade รวมถึงการสกัด audio ที่ใช้ในการเปลี่ยนสไลด์โชว์

สร้าง Audio Frames

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

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

โค้ด PHP นี้แสดงวิธีเพิ่ม audio frame ที่ฝังไว้ลงในสไลด์:

// สร้างออบเจ็กต์ Presentation ที่เป็นตัวแทนไฟล์งานนำเสนอ
$pres = new Presentation();
try {
    # ดึงสไลด์แรก
    $sld = $pres->getSlides()->get_Item(0);
    # โหลดไฟล์เสียง wav ไปสตรีม
    $fstr = new Java("java.io.FileInputStream", new Java("java.io.File", "audio.wav"));
    # เพิ่ม Audio Frame
    $audioFrame = $sld->getShapes()->addAudioFrameEmbedded(50, 150, 100, 100, $fstr);
    $fstr->close();
    # ตั้งค่า Play Mode และ Volume ของ Audio
    $audioFrame->setPlayMode(AudioPlayModePreset->Auto);
    $audioFrame->setVolume(AudioVolumeMode->Loud);
    # เขียนไฟล์ PowerPoint ไปยังดิสก์
    $pres->save("AudioFrameEmbed_out.pptx", SaveFormat::Pptx);
} catch(JavaException e) {
} finally {
    if (!java_is_null($pres)) $pres.dispose();
}

เปลี่ยน Thumbnail ของ Audio Frame

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

โค้ด PHP นี้แสดงวิธีเปลี่ยน thumbnail หรือรูปภาพตัวอย่างของ audio frame:

$presentation = new Presentation();
try {
	$slide = $presentation->getSlides()->get_Item(0);
	# เพิ่ม audio frame ไปยังสไลด์โดยกำหนดตำแหน่งและขนาดที่ระบุ.
	$audioStream = new Java("java.io.FileInputStream", "sample2.mp3");
	$audioFrame = $slide->getShapes()->addAudioFrameEmbedded(150, 100, 50, 50, $audioStream);
	$audioStream->close();
	# เพิ่มรูปภาพไปยังแหล่งข้อมูลของ presentation.
	$picture;
	$image = Images->fromFile("eagle.jpeg");
	try {
		$picture = $presentation->getImages()->addImage($image);
	} finally {
		if (!java_is_null($image)) {
			$image->dispose();
		}
	}
	# ตั้งค่าภาพสำหรับ audio frame.
	$audioFrame->getPictureFormat()->getPicture()->setImage($picture);// <-----

	# บันทึก presentation ที่แก้ไขแล้วลงดิสก์
	$presentation->save("example_out.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
	if (!java_is_null($presentation)) {
		$presentation->dispose();
	}
}

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

Aspose.Slides for PHP via Java อนุญาตให้คุณเปลี่ยนตัวเลือกที่ควบคุมการเล่นหรือคุณสมบัติต่าง ๆ ของ audio เช่น ปรับ volume ตั้งค่าให้ audio เล่นวนซ้ำ หรือแม้แต่ซ่อนไอคอน audio

แผง Audio Options ใน Microsoft PowerPoint:

example1_image

PowerPoint Audio Options ที่สอดคล้องกับคุณสมบัติของ Aspose.Slides AudioFrame :

PowerPoint Editing options ที่สอดคล้องกับคุณสมบัติของ Aspose.Slides AudioFrame :

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

วิธีการเปลี่ยนตัวเลือกการเล่น Audio:

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

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

$pres = new Presentation("AudioFrameEmbed_out.pptx");
try {
    # ดึงรูปทรง AudioFrame
    $audioFrame = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
    # ตั้งค่า Play mode ให้เล่นเมื่อคลิก
    $audioFrame->setPlayMode(AudioPlayModePreset->OnClick);
    # ตั้งค่า volume เป็น Low
    $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 (!java_is_null($pres)) {
		$pres->dispose();
	}
}

ตัวอย่าง PHP นี้แสดงวิธีเพิ่ม audio frame ใหม่พร้อม audio ฝังไว้ ตัดเวลาและกำหนดระยะเวลา fade:

$pres = new Presentation();
try {
    $slide = $pres->getSlides()->get_Item(0);

    $audioData = file_get_contents("sampleaudio.mp3");
    $audio = $pres->getAudios()->addAudio($audioData);
    $audioFrame = $slide->getShapes()->addAudioFrameEmbedded(50, 50, 100, 100, $audio);

    // ตั้งค่าการตัดส่วนเริ่มต้นที่ 1.5 วินาที
    $audioFrame->setTrimFromStart(1500);
    // ตั้งค่าการตัดส่วนสิ้นสุดที่ 2 วินาที
    $audioFrame->setTrimFromEnd(2000);

    // ตั้งค่าความยาว fade-in ที่ 200 มิลลิวินาที
    $audioFrame->setFadeInDuration(200);
    // ตั้งค่าความยาว fade-out ที่ 500 มิลลิวินาที
    $audioFrame->setFadeOutDuration(500);

    $pres->save("AudioFrameTrimFade_out.pptx", SaveFormat::Pptx);
} finally {
    $pres->dispose();
}

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

$pres = new Presentation("AudioFrameEmbed_out.pptx");
try {
    $slide = $pres->getSlides()->get_Item(0);

    // ดึงรูปทรง audio frame
    $audioFrame = $slide->getShapes()->get_Item(0);

    // ตั้งค่า volume ของ audio เป็น 85%
    $audioFrame->setVolumeValue(85);

    $pres->save("AudioFrameValue_out.pptx", SaveFormat::Pptx);
}
finally {
    $pres->dispose();
}

จัดการ Audio Captions

Aspose.Slides อนุญาตให้คุณเพิ่ม closed captions ให้กับ audio frame ผ่านเมธอด getCaptionTracks เมธอดนี้คืนค่าเป็น CaptionsCollection ซึ่งให้คุณเพิ่ม WebVTT caption tracks, วนลูปผ่าน tracks ที่มีอยู่, และลบออกเมื่อจำเป็น

Add Audio Captions

ใช้เมธอด getCaptionTracks เพื่อต่อ caption tracks หนึ่งหรือหลายรายการกับ audio frame ตัวอย่างต่อไปนี้จะเพิ่มไฟล์เสียงลงในสไลด์ แล้วโหลด caption track ใหม่จากไฟล์ .vtt

$presentation = new Presentation();
try {
    $audioData = file_get_contents("audio.mp3");
    $audio = $presentation->getAudios()->addAudio($audioData);

    $slide = $presentation->getSlides()->get_Item(0);
    $audioFrame = $slide->getShapes()->addAudioFrameEmbedded(10, 10, 50, 50, $audio);

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

    $presentation->save("audio_with_captions.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Extract Audio Captions

คุณสามารถวนลูปผ่าน caption tracks ที่เชื่อมโยงกับ audio frame และบันทึกเป็นไฟล์ .vtt แต่ละ caption track จะเปิดเผยข้อมูลไบนารีและรหัสประจำตัวที่สามารถใช้เมื่อต้องการส่งออก captions

$presentation = new Presentation("audio_with_captions.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $shapeCount = java_values($slide->getShapes()->size());
    for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
        $shape = $slide->getShapes()->get_Item($shapeIndex);
        if (java_instanceof($shape, new JavaClass("com.aspose.slides.AudioFrame"))) {
            $audioFrame = $shape;
            $trackCount = java_values($audioFrame->getCaptionTracks()->getCount());
            for ($trackIndex = 0; $trackIndex < $trackCount; $trackIndex++) {
                $captionTrack = $audioFrame->getCaptionTracks()->get_Item($trackIndex);
                // บันทึกแต่ละแทร็กคำบรรยายเป็นไฟล์ .vtt.
                $filePath = $captionTrack->getCaptionId() . ".vtt";
                file_put_contents($filePath, $captionTrack->getBinaryData());
            }
        }
    }
} finally {
    $presentation->dispose();
}

Remove Audio Captions

เพื่อลบ captions จาก audio frame ใช้วิธีการของ CaptionsCollection เช่น clear, remove หรือ removeAt ตัวอย่างต่อไปนี้ลบ caption tracks ทั้งหมดจาก audio frame

$presentation = new Presentation($folderPath . "audio_with_captions.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $audioFrame = $slide->getShapes()->get_Item(0); // ประเภท: AudioFrame

    // ลบแทร็กคำบรรยายทั้งหมดจาก audio frame.
    $audioFrame->getCaptionTracks()->clear();

    $presentation->save($folderPath . "audio_without_captions.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

สกัด Audio

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

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

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

# สร้างออบเจ็กต์ Presentation ที่เป็นตัวแทนไฟล์งานนำเสนอ
$pres = new Presentation("AudioSlide.pptx");
$Array = new java_class("java.lang.reflect.Array");
try {
	# เข้าถึงสไลด์ที่ต้องการ
	$slide = $pres->getSlides()->get_Item(0);
	# ดึงเอฟเฟกต์การเปลี่ยนสไลด์โชว์สำหรับสไลด์นี้
	$transition = $slide->getSlideShowTransition();
	# สกัดเสียงเป็นอาเรย์ไบต์
	$audio = $transition->getSound()->getBinaryData();
	echo("Length: " . $Array->getLength($audio));
} finally {
	if (!java_is_null($pres)) {
		$pres->dispose();
	}
}

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

ฉันสามารถนำ audio asset เดิมมาใช้ซ้ำในหลายสไลด์โดยไม่ทำให้ไฟล์ขนาดใหญ่ขึ้นได้หรือไม่?

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

ฉันสามารถแทนที่เสียงใน audio frame ที่มีอยู่โดยไม่ต้องสร้าง shape ใหม่ได้หรือไม่?

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

การตัด (trimming) ทำให้ข้อมูล audio ดั้งเดิมที่เก็บใน presentation เปลี่ยนแปลงหรือไม่?

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