$\tt awgn$ and $\tt wgn$ functions in MATLAB always output the same signal, no matter what I input as SNR
So basically you have discrete samples of an audio signal previously recorded and you want to add noise to it. More specifically, you want to add white Gaussian noise (WGN) with a given power to obtain a noisy signal with a specific SNR. That's what the MATLAB function awgn do. You can use it this way: 

noiseSignal  = awgn(signal,snr,'measured');


The input snr should be un dBW and the 'measured' config allows MATLAB to automatically measured the power of the input signal (signal should be a vector). The function generated then noise samples (complex or real depending on the signal input), with a power adapted to the SNR value specified, and add them to the signal samples. If you need the noise samples for a reason, you can simply do noise = noiseSignal - signal;.

For more details on the awgn function, you can look at the official documentation.

Furthermore, the noise is generated with pseudo random MATLAB functions, so if you want to always have the same noise samples you will need to have the "same" randomness each time you run the script. For example, you can do that by adding at the beginning of your script,

s = RandStream.create('mt19937ar','seed',529558);
prevStream = RandStream.setGlobalStream(s);

and restoring the default randomness by adding RandStream.setGlobalStream(prevStream); at the end of your script.

Finally, typical values for SNR in dB are integers between [-10;30]. A negative SNR just means that the power of the noise is higher than the power of the signal. The values you took for the SNR (0.004 or 0.9 dB) are really closed, and you will not be able to see the difference on the graphic (but if you look at the noise samples you should). Then, based on your code, changing the power variable is useless since the addnoise function seems to modify the noise power to match the SNR value.

Hope it helped.