Add volume parameter to gen_sound
authorNeil <neil@dip.sun.ac.za>
Thu, 15 May 2014 18:58:01 +0000 (20:58 +0200)
committerNeil <neil@dip.sun.ac.za>
Thu, 15 May 2014 18:58:40 +0000 (20:58 +0200)
tools/gen_sound.py

index 6efc05ebff69587062fe13d326db171a9b28ab5a..bf2c10d0b728612269777913e5aaa533fe6f299a 100644 (file)
@@ -13,14 +13,14 @@ import struct
 OUTPUT_RATE = 8125
 MAX = 95
 
-def gen_sine(freq, secs):
+def gen_sine(freq, secs, volume):
     filename = 'beep%s.pcm' % freq
     # We generate freq cycles and sample that OUTPUT_RATE times
     per_cycle = OUTPUT_RATE / freq
     data = []
     for x in range(per_cycle):
         rad = float(x) / per_cycle * 2 * math.pi
-        y = 256 * int(MAX * math.sin(rad))
+        y = 256 * int(volume * math.sin(rad))
         data.extend([struct.pack('<i', y)] * 4)
     output = open(filename, 'w')
     # This is correct because OUTPUT_RATE = CDDA rate / 4 and we repeat
@@ -33,9 +33,10 @@ def gen_sine(freq, secs):
 
 def usage():
     print 'Unexpected input'
-    print 'Usage gen_sound <freq> [<length>]'
+    print 'Usage gen_sound <freq> [<length>] [<volume>]'
     print ' where <freq> is the frequency in Hz (int)'
-    print ' and [<length>] is the time in seconds (float) - default 0.25'
+    print ' [<length>] is the time in seconds (float) - default 0.25'
+    print ' and [<volume>] is the volume (integer between 0 and 127) - default %s' % MAX
 
 
 if __name__ == "__main__":
@@ -45,10 +46,25 @@ if __name__ == "__main__":
           secs = float(sys.argv[2])
        else:
           secs = 0.25
+       if len(sys.argv) > 3:
+          volume = int(sys.argv[3])
+       else:
+          volume = MAX
     except Exception, exc:
        usage()
        print 'Error was', exc
        sys.exit(1)
 
-    gen_sine(freq, secs)
+    if volume > 128 or volume < 0:
+        usage()
+        print 'Invalid volume: %s' % volume
+        sys.exit(1)
+
+    if freq > 2000 or freq < 100:
+        usage()
+        print 'Invalid freq: %s' % volume
+        sys.exit(1)
+
+
+    gen_sine(freq, secs, volume)