我们从Python开源项目中,提取了以下25个代码示例,用于说明如何使用audioop.avg()。
def audio_int(num_samples=50): """ Gets average audio intensity of your mic sound. You can use it to get average intensities while you're talking and/or silent. The average is the avg of the 20% largest intensities recorded. """ print "Getting intensity values from mic." p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) values = [math.sqrt(abs(audioop.avg(stream.read(CHUNK), 4))) for x in range(num_samples)] values = sorted(values, reverse=True) r = sum(values[:int(num_samples * 0.2)]) / int(num_samples * 0.2) print " Finished " print " Average audio intensity is ", r stream.close() p.terminate() return r
def test_issue7673(self): state = None for data, size in INVALID_DATA: size2 = size self.assertRaises(audioop.error, audioop.getsample, data, size, 0) self.assertRaises(audioop.error, audioop.max, data, size) self.assertRaises(audioop.error, audioop.minmax, data, size) self.assertRaises(audioop.error, audioop.avg, data, size) self.assertRaises(audioop.error, audioop.rms, data, size) self.assertRaises(audioop.error, audioop.avgpp, data, size) self.assertRaises(audioop.error, audioop.maxpp, data, size) self.assertRaises(audioop.error, audioop.cross, data, size) self.assertRaises(audioop.error, audioop.mul, data, size, 1.0) self.assertRaises(audioop.error, audioop.tomono, data, size, 0.5, 0.5) self.assertRaises(audioop.error, audioop.tostereo, data, size, 0.5, 0.5) self.assertRaises(audioop.error, audioop.add, data, data, size) self.assertRaises(audioop.error, audioop.bias, data, size, 0) self.assertRaises(audioop.error, audioop.reverse, data, size) self.assertRaises(audioop.error, audioop.lin2lin, data, size, size2) self.assertRaises(audioop.error, audioop.ratecv, data, size, 1, 1, 1, state) self.assertRaises(audioop.error, audioop.lin2ulaw, data, size) self.assertRaises(audioop.error, audioop.lin2alaw, data, size) self.assertRaises(audioop.error, audioop.lin2adpcm, data, size, state)
def test_avg(self): for w in 1, 2, 3, 4: self.assertEqual(audioop.avg(b'', w), 0) self.assertEqual(audioop.avg(bytearray(), w), 0) self.assertEqual(audioop.avg(memoryview(b''), w), 0) p = packs[w] self.assertEqual(audioop.avg(p(5), w), 5) self .assertEqual(audioop.avg(p(5, 8), w), 6) self.assertEqual(audioop.avg(p(5, -8), w), -2) self.assertEqual(audioop.avg(p(maxvalues[w], maxvalues[w]), w), maxvalues[w]) self.assertEqual(audioop.avg(p(minvalues[w], minvalues[w]), w), minvalues[w]) self.assertEqual(audioop.avg(packs[4](0x50000000, 0x70000000), 4), 0x60000000) self.assertEqual(audioop.avg(packs[4](-0x50000000, -0x70000000), 4), -0x60000000)
def test_string(self): data = 'abcd' size = 2 self.assertRaises(TypeError, audioop.getsample, data, size, 0) self.assertRaises(TypeError, audioop.max, data, size) self.assertRaises(TypeError, audioop.minmax, data, size) self.assertRaises(TypeError, audioop.avg, data, size) self.assertRaises(TypeError, audioop.rms, data, size) self.assertRaises(TypeError, audioop.avgpp, data, size) self.assertRaises(TypeError, audioop.maxpp, data, size) self.assertRaises(TypeError, audioop.cross, data, size) self.assertRaises(TypeError, audioop.mul, data, size, 1.0) self.assertRaises(TypeError, audioop.tomono, data, size, 0.5, 0.5) self.assertRaises(TypeError, audioop.tostereo, data, size, 0.5, 0.5) self.assertRaises(TypeError, audioop.add, data, data, size) self.assertRaises(TypeError, audioop.bias, data, size, 0) self.assertRaises(TypeError, audioop.reverse, data, size) self.assertRaises(TypeError, audioop.lin2lin, data, size, size) self.assertRaises(TypeError, audioop.ratecv, data, size, 1, 1, 1, None) self.assertRaises(TypeError, audioop.lin2ulaw, data, size) self.assertRaises(TypeError, audioop.lin2alaw, data, size) self.assertRaises(TypeError, audioop.lin2adpcm, data, size, None)
def test_avg(self): self.assertEqual(audioop.avg(data[0], 1), 1) self.assertEqual(audioop.avg(data[1], 2), 1) self.assertEqual(audioop.avg(data[2], 4), 1)
def test_bias(self): # Note: this test assumes that avg() works d1 = audioop.bias(data[0], 1, 100) d2 = audioop.bias(data[1], 2, 100) d4 = audioop.bias(data[2], 4, 100) self.assertEqual(audioop.avg(d1, 1), 101) self.assertEqual(audioop.avg(d2, 2), 101) self.assertEqual(audioop.avg(d4, 4), 101)
def test_avg(self): for w in 1, 2, 4: self.assertEqual(audioop.avg(b'', w), 0) p = packs[w] self.assertEqual(audioop.avg(p(5), w), 5) self .assertEqual(audioop.avg(p(5, 8), w), 6) self.assertEqual(audioop.avg(p(5, -8), w), -2) self.assertEqual(audioop.avg(p(maxvalues[w], maxvalues[w]), w), maxvalues[w]) self.assertEqual(audioop.avg(p(minvalues[w], minvalues[w]), w), minvalues[w]) self.assertEqual(audioop.avg(packs[4](0x50000000, 0x70000000), 4), 0x60000000) self.assertEqual(audioop.avg(packs[4](-0x50000000, -0x70000000), 4), -0x60000000)
def setup_mic(self, num_samples=50): """ Gets average audio intensity of your mic sound. You can use it to get average intensities while you're talking and/or silent. The average is the avg of the .2 of the largest intensities recorded. """ print "Getting intensity values from mic." p = pyaudio.PyAudio() stream = p.open(format=self.FORMAT, channels=self.CHANNELS, rate=self.RATE, input=True, frames_per_buffer=self.CHUNK) values = [math.sqrt(abs(audioop.avg(stream.read(self.CHUNK), 4))) for x in range(num_samples)] values = sorted(values, reverse=True) r = sum(values[:int(num_samples * 0.2)]) / int(num_samples * 0.2) print " Finished " print " Average audio intensity is ", r stream.close() p.terminate() if r < 3000: self.THRESHOLD = 3500 else: self.THRESHOLD = r + 100
def listen_for_speech(threshold=THRESHOLD, num_phrases=1): """ Listens to Microphone, extracts phrases from it and sends it to Google's TTS service and returns response. a "phrase" is sound surrounded by silence (according to threshold). num_phrases controls how many phrases to process before finishing the listening process (-1 for infinite). """ #Open stream p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) print "* Listening mic. " audio2send = [] cur_data = '' # current chunk of audio data rel = RATE/CHUNK slid_win = deque(maxlen=SILENCE_LIMIT * rel) #Prepend audio from 0.5 seconds before noise was detected prev_audio = deque(maxlen=PREV_AUDIO * rel) started = False n = num_phrases response = [] while (num_phrases == -1 or n > 0): cur_data = stream.read(CHUNK) slid_win.append(math.sqrt(abs(audioop.avg(cur_data, 4)))) if(sum([x > THRESHOLD for x in slid_win]) > 0): if(not started): print "Starting record of phrase" started = True audio2send.append(cur_data) elif (started is True): print "Finished" # The limit was reached, finish capture and deliver. filename = save_speech(list(prev_audio) + audio2send, p) result = transcribe_audio('speech.wav') print result text = result['data'] print("Text: " + text + "\n") started = False slid_win = deque(maxlen=SILENCE_LIMIT * rel) prev_audio = deque(maxlen=0.5 * rel) audio2send = [] n -= 1 print "* Done recording" stream.close() p.terminate()
def record(threshold=THRESHOLD, silence=SILENCE_LIMIT): """ Listens to Microphone, records voice until phrase ends. A "phrase" is sound surrounded by silence (according to threshold). :param int threshold: Intensity value that defines silence. lower than threshold is silence. :param silence: Max ammount of seconds where only silence is recorded. When this time passes the recording finishes. """ # Open stream p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) print ("* Listening mic. ") frames = [] cur_data = '' rel = RATE/CHUNK window = deque(maxlen=silence * rel) prev_audio = deque(maxlen=PREV_AUDIO * rel) start = False exit_loop = 0 while (exit_loop != 1): cur_data = stream.read(CHUNK) window.append(math.sqrt(abs(audioop.avg(cur_data, 4)))) if(sum([x > THRESHOLD for x in window]) > 0): if(not start): print ("recording..") start = True frames.append(cur_data) elif start is True: print ("Finished") save_audio(list(prev_audio) + frames, p) start = False window = deque(maxlen=silence * rel) prev_audio = deque(maxlen=0.5 * rel) frames = [] exit_loop = 1 else: prev_audio.append(cur_data) print ("Done recording") stream.close() p.terminate()
def listen(): print 'Well, now we are listening for loud sounds...' CHUNK = 1024 # CHUNKS of bytes to read each time from mic FORMAT = pyaudio.paInt16 CHANNELS = 2 RATE = 18000 THRESHOLD = 1200 # The threshold intensity that defines silence # and noise signal (an int. lower than THRESHOLD is silence). SILENCE_LIMIT = 1 # Silence limit in seconds. The max ammount of seconds where # only silence is recorded. When this time passes the # recording finishes and the file is delivered. #Open stream p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) cur_data = '' # current chunk of audio data rel = RATE/CHUNK slid_win = deque(maxlen=SILENCE_LIMIT * rel) success = False listening_start_time = time.time() while True: try: cur_data = stream.read(CHUNK) slid_win.append(math.sqrt(abs(audioop.avg(cur_data, 4)))) if(sum([x > THRESHOLD for x in slid_win]) > 0): print 'I heart something!' success = True break if time.time() - listening_start_time > 20: print 'I don\'t hear anything already 20 seconds!' break except IOError: break # print "* Done recording: " + str(time.time() - start) stream.close() p.terminate() return success
def run(self): """ Listens to Microphone, extracts phrases from it and calls pocketsphinx to decode the sound """ self.setup_mic() #Open stream p = pyaudio.PyAudio() stream = p.open(format=self.FORMAT, channels=self.CHANNELS, rate=self.RATE, input=True, frames_per_buffer=self.CHUNK) print "* Mic set up and listening. " audio2send = [] cur_data = '' # current chunk of audio data rel = self.RATE/self.CHUNK slid_win = deque(maxlen=self.SILENCE_LIMIT * rel) #Prepend audio from 0.5 seconds before noise was detected prev_audio = deque(maxlen=self.PREV_AUDIO * rel) started = False while True: cur_data = stream.read(self.CHUNK) slid_win.append(math.sqrt(abs(audioop.avg(cur_data, 4)))) if sum([x > self.THRESHOLD for x in slid_win]) > 0: if started == False: print "Starting recording of phrase" started = True audio2send.append(cur_data) elif started: print "Finished recording, decoding phrase" filename = self.save_speech(list(prev_audio) + audio2send, p) r = self.decode_phrase(filename) print "DETECTED: ", r # Removes temp audio file os.remove(filename) # Reset all started = False slid_win = deque(maxlen=self.SILENCE_LIMIT * rel) prev_audio = deque(maxlen=0.5 * rel) audio2send = [] print "Listening ..." else: prev_audio.append(cur_data) print "* Done listening" stream.close() p.terminate()