Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.52 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. from __future__ import with_statement
  4.  
  5. import sys
  6. import wave
  7. import alsaaudio
  8.  
  9. def pcm(wav, card='default', period=320):
  10.     pcm = alsaaudio.PCM(card=card)
  11.     pcm.setchannels(wav.getnchannels())
  12.     pcm.setrate(wav.getframerate())
  13.     pcm.setformat([
  14.         None,
  15.         alsaaudio.PCM_FORMAT_U8,
  16.         alsaaudio.PCM_FORMAT_S16_LE,
  17.         alsaaudio.PCM_FORMAT_S24_LE,
  18.         alsaaudio.PCM_FORMAT_S32_LE,
  19.         ][wav.getsampwidth()])
  20.  
  21.     pcm.setperiodsize(period)
  22.     return pcm
  23.  
  24. def play(dev, wav, n=1, period=320):
  25.     data = wav.readframes(period)
  26.     if not data:
  27.         wav.rewind()
  28.         data = wav.readframes(period)
  29.  
  30.     c = 0
  31.     while data:
  32.         dev.write(data)
  33.         data = wav.readframes(period)
  34.         c = c + 1
  35.         if c > n: break
  36.  
  37. def narg(n, default):
  38.     try:
  39.         return sys.argv[n]
  40.     except IndexError:
  41.         return default
  42.  
  43. def main():
  44.     '''
  45.    Usage:
  46.        sudo typewriter.py <wavfile> <eventdev> <alsacard>
  47.  
  48.    Example:
  49.        sudo typewriter.py ./rain.wav /dev/input/event11 default
  50.  
  51.    Defaults:
  52.        <eventdev> = /dev/console
  53.        <alsacard> = default
  54.    '''
  55.     wavfile = sys.argv[1]
  56.     eventdev = narg(2, '/dev/console')
  57.     alsacard = narg(3, 'default')
  58.  
  59.     wav = wave.open(wavfile, 'r')
  60.     dev = pcm(wav, alsacard)
  61.     with open(eventdev, 'r') as kbd:
  62.         while True:
  63.             kbd.read(30)
  64.             play(dev, wav, 2)
  65.             #print "hit!"
  66.  
  67. if __name__ == '__main__':
  68.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement