plays decently, could use debouncing/interrupts