Working on a tone generator program. The 'duration' variable (in seconds) doesn't correctly determine how long the tone plays for

Viewed 72

Here's what I've got. The duration variable is set to play the tone for 4 seconds, but when the code is run, it only plays for about 1.5 seconds. I've sorta hit a wall with this one; any help would be greatly appreciated.

import pyaudio
import numpy as np

p = pyaudio.PyAudio()

volume = 0.5     # range [0.0, 1.0]
fs = 44100       # sampling rate, Hz, must be integer
duration = 4.0   # in seconds, may be float
f = 440.0        # sine frequency, Hz, may be float

# generate samples, note conversion to float32 array
samples = (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32)

# for paFloat32 sample values must be in range [-1.0, 1.0]
stream = p.open(format=pyaudio.paFloat32,
                channels=1,
                rate=fs,
                output=True)

# play. May repeat with different volume values (if done interactively) 
stream.write(volume*samples)

stream.stop_stream()
stream.close()

p.terminate()
1 Answers
Related