Sound is vibration in a medium - e.g. rapidly varying pressure of air against the eardrum
Digital sound is a set of samples of that vibration (similar to pixels)
Represented as a 1D array - varying amplitude over time
Stereo sound is 2 such arrays in parallel
A "pure tone" is a sine wave of a particular frequency
e.g. 1 KHz = 1000 Hz = 1000 cycles per second
All sounds can be mathematically reduced to a combination of many such sine waves (Fourier transform)
Humans are capable of hearing frequencies up to ~ 20,000 Hz
Digital sound quality depends on the sample rate & sample resolution
To reproduce a particular sound frequency, we must sample at twice that frequency or better
Telephone quality sound is 8 KHz (8000 samples/second), 8 bits/sample
CD quality sound is 44KHz, 16 bits per sample
Playing sound requires constantly feeding new data to the sound hardware
Sound is therefore usually handled by a separate process or thread
Audacity is a free, open-source audio editor
It works under Windows, MacOS, and Linux
It can record, edit, import and export WAV, AIFF, Ogg Vorbis, and MP3 files
http://audacity.sourceforge.net/
pygame includes modules for graphics, sound, movies, devices, etc.
Sound is managed by the mixer system
One can load sound files, play them, and adjust their volume
pygame.mixer runs a separate process, to perform sound playback in parallel with graphics
import pygame, time pygame.mixer.init() s = pygame.mixer.Sound("lion.wav") s.play() while pygame.mixer.get_busy() > 0: time.sleep(1)
Important functions:
freq - frequency (sample rate) of sound playback; defaults to 22050
size - 8 or 16, for 8- or 16-bit unsigned data; -8 or -16 for 8- or 16-bit signed; defaults to -16
buffersize - number of samples to send to hardware at one time; defaults to 1024
Note: a larger sample size improves playback (less chance of dropouts), but increases latency
pygame.mixer.music - intended for background music
music functions are similar to Sound functions, except that they don't load all the data into memory at once
This makes a difference for very large sound files, such as background music
pygame.mixer supports exactly 1 music track at a time
pygame.mixer.music.load('musicfile.mp3') pygame.mixer.music.play() pygame.mixer.music.stop() pygame.mixer.music.fadeout(1000)
http://www.fmod.org/
http://www.fmod.org/docs/
fmod is a cross-platform (Linux, Windows, Mac, & gaming consoles) C/C++ sound toolkit, marketed for game development.
Some advantages:
OpenAL is another cross-platform 3D audio system
It is an API, modelled after OpenGL
Open source implementations exist for Windows, MacOS, Linux, BSD, Solaris, IRIX
There are also implementations for game consoles
Python's urllib2 can be used to grab data from the web
e.g. textures or sounds
try: webdata = urllib2.urlopen(url).read() except: return None webdataAsFile = StringIO.StringIO(webdata) tex = Texture2D(webdataAsFile)
An example application is Sommerer & Mignonneau's Riding the Net