You can do what you want, just sleep for slightly longer then the length of the beep.
In this case Sleep(1501)
Generally It isn't 'dangerous' to not release resources. However if you create them in a loop (say 10000 steps), there might be a memory overflow.
Why don't you use one Global Beeper for all your needs. You won't have to worry about Sleep() and B.Release, there will only be one resource, which will be released when the App is killed by the OS.