public static Sequence parse(List<Map<?, ?>> list) {
        if (list == null || list.isEmpty()) {
            throw new NullPointerException();
        }
        List<Frame> frameList = new ArrayList<Frame>();
        
        for (Map<?, ?> frame : list) {
            int time = (Integer) frame.get("time");
            PlayableSound sound = (frame.containsKey("sound") ? PlayableSound
                    .parse((String) frame.get("sound")) : null);
            PlayableEffect effect = (frame.containsKey("effect") ? PlayableEffect
                    .parse((String) frame.get("effect")) : null);
            frameList.add(new Frame(time, sound, effect));
        }
        return new Sequence(frameList);
    }