Added BGM with custom fadeIn and fadeOut logic

Other fixes and code refactor