I've had and solved this exact problem that you're having. What Steve said is the key, a piezo buzzer appears electrically as a capacitor.
Now with that in mind, look at your circuit. You're just going to charge the capacitor once, and then it's going to more or less stay charged and produce no more sound.
The loudest way to drive this circuit is using a full H bridge, this will provide a VPP of 2x your input voltage.
Another method that will work is to use a totem pole driver, or an op-amp so that you can drive one side of the piezo high and low. This is simpler, but it will produce half the amplitude.
What I ended up doing in my application is just driving both sides of the piezo directly using 2 microcontroller outputs. This will work fine with an appropriate current limiting resistor, and it may be loud enough for your application.