Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have tried a number of ways of playing a fixed frequency sound (e.g. 1000Hz) and nothing works.

I have downloaded "beep" and that makes no noise.

I tried interfacing to pyao, and that had no effect.

I tried interfacing to audiere, and get a runtime error indicating the library could not be found, despite installing it from the software centre.

Any guidance for installation of appropriate libraries and relevant code would be most appreciated.

I cannot generate .mp3/ .wav files for this, but need to generate the tones at run time.

Many thanks for you

share|improve this question
You need to make WAVE a float. Why not call it FREQ? Also the equation is not right. Try this: math.sin((x*2*math.pi*FREQ)/RATE)*127)+128 – user216759 Nov 17 '13 at 20:46
import math
import pyaudio

#sudo apt-get install python-pyaudio
PyAudio = pyaudio.PyAudio

BITRATE = 16000 #number of frames per second/frameset.      

FREQUENCY = 261.63 #Hz, waves per second, 261.63=C4-note.
LENGTH = 1.2232 #seconds to play sound

WAVEDATA = ''    

for x in xrange(NUMBEROFFRAMES):
 WAVEDATA = WAVEDATA+chr(int(math.sin(x/((BITRATE/FREQUENCY)/math.pi))*127+128))    

#fill remainder of frameset with silence
for x in xrange(RESTFRAMES): 

p = PyAudio()
stream = = p.get_format_from_width(1), 
                channels = 1, 
                rate = BITRATE, 
                output = True)
share|improve this answer
it should be (2*math.pi) – J.F. Sebastian Oct 28 '14 at 15:29
I had to had future division and 2*math*pi to make it work correctly. Python 2.8 32 bit – chwi Nov 10 '15 at 10:26
Python 2.7 plays this as a "smooth" sound whereas Python 3.4 produces a much "buzzier" sound. Why? I tried adding the ____future____ division, but it made no difference. – Ubuntourist Dec 19 '15 at 20:29

You can do that with python-pyaudio (available at least in 12.04):

from __future__ import division #Avoid division problems in Python 2
import math
import pyaudio
import sys

PyAudio = pyaudio.PyAudio
RATE = 16000
WAVE = 1000
data = ''.join([chr(int(math.sin(x/((RATE/WAVE)/math.pi))*127+128)) for x in xrange(RATE)])
p = PyAudio()

stream = =
                channels = 1,
                rate = RATE,
                output = True)
for DISCARD in xrange(5):
share|improve this answer
Thank you for your help. – user98415 Oct 22 '12 at 10:43
Thank you for your help. Unfortunately, I get loads of errors when running, and making any changes to RATE or WAVE results in no sound. The errors are not listed due to a lack of space but refer to "ALSA lib". How would I change a) to eliminate errors and b) to change duration and frequency? Many thanks, – user98415 Oct 22 '12 at 10:52
I also get a bunch of error messages, but it plays just fine. Also, changing WAVE gives me different pitch. Are you using jack? Or just pulseaudio? – taneli Oct 23 '12 at 17:33
@user98415: add at the top from __future__ import division to avoid unnecessary truncation on Python 2. – J.F. Sebastian Oct 28 '14 at 15:05
@J.F.Sebastian That solved everything for me, thank you – chwi Nov 10 '15 at 10:02

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.