2n2u

Untitled

Nov 2nd, 2015
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.57 KB | None | 0 0
  1. class Recorder(object):
  2.  
  3.     def __init__(self, g_layout):
  4.         # get the needed Java classes
  5.         Clock.schedule_once(partial(self.my_init, g_layout))
  6.     #
  7.     def my_init(self, g_layout, dt):
  8.         self.buffer_size = 4096
  9.         self.MediaRecorder = autoclass('android.media.MediaRecorder')
  10.         self.AudioSource = autoclass('android.media.MediaRecorder$AudioSource')
  11.         self.AudioFormat = autoclass('android.media.AudioFormat')
  12.         self.AudioRecord = autoclass('android.media.AudioRecord')
  13.         # set the system config
  14.         self.SampleRate = 44100
  15.         self.ChannelConfig = self.AudioFormat.CHANNEL_IN_MONO
  16.         self.AudioEncoding = self.AudioFormat.ENCODING_PCM_16BIT
  17.         self.minBufferSize = self.AudioRecord.getMinBufferSize(self.SampleRate, self.ChannelConfig, self.AudioEncoding)
  18.         self.sData = []
  19.         self.mic = get_input(callback=self.mic_callback, source='mic', buffersize=self.buffer_size)#self.minBufferSize)
  20.         self.rform = g_layout
  21.         self.converted_buf = []
  22.         self.xmax = 0
  23.         self.ymax = 0
  24.         self.testbuff = []
  25.  
  26.     def mic_callback(self, buf):
  27.         self.sData.append(str(buf))
  28.         self.converted_buf = np.frombuffer(buf, dtype=np.int16)
  29.         if np.amax(self.converted_buf) > self.ymax:
  30.             self.ymax = np.amax(self.converted_buf)
  31.         self.rform.plot.points.append((self.xmax, np.amax(self.converted_buf)))
  32.         print(self.mic.rate)
  33.         print(self.mic.channels)
  34.         print(self.mic.encoding)
  35.         #print(self.converted_buf)
  36.  
  37.         # Auto-Scale Y-Axis
  38.         self.rform.graph.ymax = int(self.ymax)
  39.         # Scale Y Ticks
  40.         self.rform.graph.y_ticks_major = int(int(self.ymax)/5)
  41.         self.rform.graph.y_ticks_minor = int(int(self.ymax)/100)
  42.         #print(str(self.rform.graph.y_ticks_minor))
  43.  
  44.         # New sample
  45.         self.xmax += 1
  46.  
  47.     def start(self):
  48.         self.mic.start()
  49.         self.rform.plot.points = [(1,80),(2,90)]
  50.         Clock.schedule_interval(self.readbuffer, 1/60.)
  51.  
  52.     def readbuffer(self, dt):
  53.         self.mic.poll()
  54.  
  55.     def stop(self):
  56.         Clock.unschedule(self.readbuffer)
  57.         self.mic.stop()
  58.         wf = wave.open(PATH, 'w')
  59.         wf.setnchannels(self.mic.channels)
  60.         wf.setsampwidth(2)
  61.         wf.setframerate(self.mic.rate)
  62.         wf.writeframes(b''.join(self.sData))
  63.         wf.close()
  64.         #np.savetxt("/sdcard/kivyrecords/" + "test.txt", self.newpoints, fmt='%2.2i')
  65.         self.sData = []
  66.         self.xmax = 0
  67.         self.ymax = 0
  68.         self.converted_buf = []
Advertisement
Add Comment
Please, Sign In to add comment