/**
 * For each slide iterate over shapes and found associated sound data.
 *
 * @author Yegor Kozlov
 */
public class SoundFinder {

    public static void main(String[] args) throws Exception {
        SlideShow ppt = new SlideShow(new FileInputStream(args[0]));
        SoundData[] sounds = ppt.getSoundData();

        Slide[] slide = ppt.getSlides();
        for (int i = 0; i < slide.length; i++) {
            Shape[] shape = slide[i].getShapes();
            for (int j = 0; j < shape.length; j++) {
                int soundRef = getSoundReference(shape[j]);
                if(soundRef != -1) {
                    System.out.println("Slide["+i+"], shape["+j+"], soundRef: 
"+soundRef);
                    System.out.println("  " + sounds[soundRef].getSoundName());
                    System.out.println("  " + sounds[soundRef].getSoundType());
                }
            }
        }
    }

    /**
     * Check if a given shape is associated with a sound.

     * @return 0-based reference to a sound in the sound collection
     * or -1 if the shape is not associated with a sound
     */
    protected static int getSoundReference(Shape shape){
        int soundRef = -1;
        //dive into the shape container and search for InteractiveInfoAtom
        EscherContainerRecord spContainer = shape.getSpContainer();
        List spchild = spContainer.getChildRecords();
        for (Iterator it = spchild.iterator(); it.hasNext();) {
            EscherRecord obj = (EscherRecord) it.next();
            if (obj.getRecordId() == EscherClientDataRecord.RECORD_ID) {
                byte[] data = obj.serialize();
                Record[] records = Record.findChildRecords(data, 8, data.length 
- 8);
                for (int j = 0; j < records.length; j++) {
                    if (records[j] instanceof InteractiveInfo) {
                        InteractiveInfoAtom info = ((InteractiveInfo) 
records[j]).getInteractiveInfoAtom();
                        if (info.getAction() == 
InteractiveInfoAtom.ACTION_MEDIA) {
                            soundRef = info.getSoundRef();
                        }
                    }
                }
            }
        }
        return soundRef;
    }
}

Yegor
> I am able to retrieve all sounds from a power point presentation using
> the method described in the
> Busy Developers' Guide to HSLF. I can not find a way, however, to 
> associate a sound with the slide it comes from. Is there a way to do this?

> Thanks

> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to