들리지 않는 소리로 데이터 통신하기

들리지 않는 소리로 데이터 통신하기

작성자
태인태인
카테고리
⚗️ 프로젝트
작성일
2023년 11월 21일
태그
Android
주제에서 살짝 벗어나는 이야기로 글을 시작해보려 한다.
사람은 아무 말도 하지 않고 아무 소리도 들리지 않았지만, 시리가 저절로 활성화되고 누군가에게 명령을 받아 전화를 거는 영상을 본 적이 있다.
Video preview
이러한 공격 기법을 Dolphin Attack이라고 하는데, 사람이 듣지 못하는 주파수 영역의 소리를 발생시켜 시리에게 명령을 내리는 것이다.
이걸 보고 이러한 상상을 해봤다.
‘영화에 나오는 것처럼 미래에 AI가 발전하여 사람의 지능을 뛰어넘는다면, 기계들만 인식할 수 있는 주파수로 우리 몰래 대화를 하게 되진 않을까?’
 
사람이 들을 수 없는 소리로 데이터를 송수신하는 기술은 이미 연구개발 되어왔고, 실제로 아래와 같은 다양한 분야에서 활용되고 있다.
 
▶ 음파를 송수신하여 무선 출석체크 구현
▶ 방문한 매장의 스피커에서 음파를 송출하여, 쿠폰 전송
▶ 콘서트장에서 음악에 음파를 끼워 송출하여, 응원봉에서 이를 수신해 음악에 맞는 라이팅 동작
 

파통신 기술

음파통신 기술이란 사람이 듣지 못하는 높은 주파수 대역의 소리에 디지털 정보를 담아서 보내는 기술을 말한다. 소리의 주파수가 올라갈수록 사람 귀에 안 들리게 되기 때문에 높은 주파수의 대역의 소리를 모스 부호처럼 활용해서 정보를 보내는 것이다.
이러한 비가청 음파 통신기술은 다른 근거리 데이터 통신기술(블루투스, NFC 등)과 달리 별도의 통신 모듈이 없어도, 스피커와 마이크만을 활용하여 근거리 데이터 통신이 가능하다는 장점이 있다.
 
음파 통신 기술을 더 자세히 이해하기 위해, 먼저 소리에 대해 알아보자.

소리의 높이 vs 크기

소리의 높낮이와 소리의 크기는 비슷해 보이지만, 전혀 다른 성질이다.
소리의 높낮이는 음파가 1초당 진동하는 횟수를 의미한다. 즉 진동수가 높을수록 ‘음이 높다’라고 말할 수 있는 것이다. 반면 소리의 크기진폭과 관련이 있다. 진폭이 클수록 ‘소리가 크다’라고 말한다.

가청 주파수와 초음파

사람이 들을 수 있는 소리의 진동수(주파수)는 한정되어 있다. 일반적으로 20Hz ~ 20kHz를 사람이 들을 수 있는 가청 주파수라고 한다. 이 범위를 벗어나는 소리는 잘 들리지 않는 비가청 주파수라 말할 수 있다.
주파수가 20kHz보다 높은 음은 초음파라고 부른다. 일반적으로 사람은 초음파를 들을 수 없다.
notion image
 

음파를 통한 데이터 통신을 안드로이드에서 쉽게 구현할 수 있도록 관련 기능을 제공하는 Euphony라는 라이브러리가 있다.(국내에서 개발한듯 하다)
 
라이브러리의 사용법을 간단히 설명하면 다음과 같다.
 
라이브러리는 크게 두개의 파트로 구성되어 있다.
  • 송신 파트 데이터를 담은 음파를 생성해 스피커를 통해 전송한다.
  • 마이크를 통해 음파를 수신해 데이터를 담은 음파를 분석하고 인식한다.
 
라이브러리 의존성 추가(build.gradle (app module))
implementation 'co.euphony.lib:euphony:0.8.1.2'
 

데이터 송신

  1. 객체 생성
val mTxManager = EuTxManager.getInstance()
 
  1. 데이터 전송
mTxManager.setCode("Hello, Euphony") mTxManager.play(1) //-1은 무한반복
 

데이터 수신

  1. RECORD_AUDIO 권한 부여
<uses-permission android:name="android.permission.RECORD_AUDIO" />
 
  1. 객체 생성
val mRxManager = EuRxManager.getInstance()
 
  1. 데이터 수신 Listner 설정
mRxManager.acousticSensor = AcousticSensor { letters -> //when data is received }
 
  1. 수신 시작
mRxManager.listen()
 
  1. 수신 종료
mRxManager.finish()
 

그럼 이제 정말 데이터가 잘 송수신되는지 확인해보자.
테스트를 위해 개발한 앱의 코드는 아래에서 확인할 수 있다.
soundwave-communication
IceCream0910Updated Nov 21, 2023
 
아래 영상은 두 개의 스마트폰 화면을 동시에 띄워놓은 시연 영상이다.
한쪽 기기에서 먼저 hello world를 전송하고, 다른 기기에서는 이 hello world를 수신한다.
이후 앞에서 수신한 기기에서 반대로 Nice to meet you 라는 텍스트를 송출하고, 다른 한 기기에서 이를 수신하는 것을 확인할 수 있다.
Video preview
 
 

댓글

guest