Play from a play buffer, can do multpile plays

Also improve code design and add code comments.