Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- from __future__ import with_statement
- import sys
- import wave
- import alsaaudio
- def pcm(wav, card='default', period=320):
- pcm = alsaaudio.PCM(card=card)
- pcm.setchannels(wav.getnchannels())
- pcm.setrate(wav.getframerate())
- pcm.setformat([
- None,
- alsaaudio.PCM_FORMAT_U8,
- alsaaudio.PCM_FORMAT_S16_LE,
- alsaaudio.PCM_FORMAT_S24_LE,
- alsaaudio.PCM_FORMAT_S32_LE,
- ][wav.getsampwidth()])
- pcm.setperiodsize(period)
- return pcm
- def play(dev, wav, n=1, period=320):
- data = wav.readframes(period)
- if not data:
- wav.rewind()
- data = wav.readframes(period)
- c = 0
- while data:
- dev.write(data)
- data = wav.readframes(period)
- c = c + 1
- if c > n: break
- def narg(n, default):
- try:
- return sys.argv[n]
- except IndexError:
- return default
- def main():
- '''
- Usage:
- sudo typewriter.py <wavfile> <eventdev> <alsacard>
- Example:
- sudo typewriter.py ./rain.wav /dev/input/event11 default
- Defaults:
- <eventdev> = /dev/console
- <alsacard> = default
- '''
- wavfile = sys.argv[1]
- eventdev = narg(2, '/dev/console')
- alsacard = narg(3, 'default')
- wav = wave.open(wavfile, 'r')
- dev = pcm(wav, alsacard)
- with open(eventdev, 'r') as kbd:
- while True:
- kbd.read(30)
- play(dev, wav, 2)
- #print "hit!"
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement