def listen_linux(frame_rate=44100, interval=0.1): mic = alsaaudio.PCM(alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NORMAL, device="default") mic.setchannels(1) mic.setrate(44100) mic.setformat(alsaaudio.PCM_FORMAT_S16_LE) num_frames = int(round((interval / 2) * frame_rate)) mic.setperiodsize(num_frames) print("start...") in_packet = False packet = [] while True: l, data = mic.read() if not l: continue chunk = np.fromstring(data, dtype=np.int16) dom = dominant(frame_rate, chunk) #print(dom) if in_packet and match(dom, HANDSHAKE_END_HZ): byte_stream = extract_packet(packet) try: byte_stream = RSCodec(FEC_BYTES).decode(byte_stream) byte_stream = byte_stream.decode("utf-8") #print(byte_stream) #이 부분을 찍어보면 최종 문자열을 확인가능 if "201502127" in byte_stream: # in 키워드를 이용하면 문자열이 있는지를 찾을 수 있다. ID_count = byte_stream.count( "201502127") #201502127이 몇번 출현하는지 찾는다. byte_stream = extract_Data(byte_stream, ID_count) display(byte_stream) try: byte_stream = RSCodec(FEC_BYTES).encode( byte_stream.encode("utf-8") ) # 필요한 데이터 뒤에 오류 코드까지 아스키 코드(1byte)로 인코딩 되어 나온다. #print(byte_stream[0:4]) #byteArray가 된 " hel"이 출력됨. sound(bytes_to_freq(byte_stream)) except ReedSolomonError as e: pass #print("{}: {}".format(e, byte_stream)) except ReedSolomonError as e: pass #print("{}: {}".format(e, byte_stream)) packet = [] in_packet = False elif in_packet: packet.append(dom) elif match(dom, HANDSHAKE_START_HZ): in_packet = True