def pop_bytes_from_bit_list(bit_list, count): """ >>> bit_str = ( ... "00110011" ... "00001111" ... "01010101" ... "11001100") >>> bit_list = [int(i) for i in bit_str] >>> bit_list, bytes = pop_bytes_from_bit_list(bit_list, 1) >>> bytes [[0, 0, 1, 1, 0, 0, 1, 1]] >>> bit_list, bytes = pop_bytes_from_bit_list(bit_list, 2) >>> bytes [[0, 0, 0, 0, 1, 1, 1, 1], [0, 1, 0, 1, 0, 1, 0, 1]] >>> bit_list, bytes = pop_bytes_from_bit_list(bit_list, 1) >>> bytes [[1, 1, 0, 0, 1, 1, 0, 0]] """ data_bit_count = count * 8 data_bit_list = bit_list[:data_bit_count] data = list(iter_steps(data_bit_list, steps=8)) bit_list = bit_list[data_bit_count:] return bit_list, data
def iter_avg_wave_values(self, wave_values_generator, avg_count): if log.level >= 5: tlm = TextLevelMeter(self.max_value, 79) for value_tuples in iter_steps(wave_values_generator, avg_count): values = [i[1] for i in value_tuples] avg_value = int(round( float(sum(values)) / avg_count )) if tlm: msg = tlm.feed(avg_value) percent = 100.0 / self.max_value * abs(avg_value) log.log(5, "%s average %s samples to: %s (%.1f%%)" % ( msg, ",".join([str(v) for v in values]), avg_value, percent ) ) yield (self.wave_pos, avg_value)