[2023 03 07] 사운드 케이블 및 소리 데이터로 인터넷 통신 해보기 프로젝트 (1) - 이론 구성 및 둘러보기 - Whitmem
[2023 03 07] 사운드 케이블 및 소리 데이터로 인터넷 통신 해보기 프로젝트 (1) - 이론 구성 및 둘러보기
Develop History
2023-03-06 09:29 게시 3c0291b1fdb62bad01ad

0
0
123
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
연구 목적의 게시물 이 게시물은 오직 연구 및 실험만을 목적으로 합니다. 여기서 실시되는 사항은 "개인적인 목적 하" "실험 및 연구를 위하여" 실시하며, 그 과정의 일부만을 게시 합니다. 이 게시물은 작성자가 학생인 상태에서 연구를 목적으로 실시하며, 외부 서비스, 결과물을 배포하지 아니합니다. 기타 지식 재산권자가 존재할 수 있음을 참고 하십시오.
프로젝트 구성
이 글을 열람하게 된 당신은 쓸 데 없으면서도 엉뚱한 생각을 해본 적 있는가? 이전에 수행 하였던 주간 프로젝트의 주제인 어처구니 없는에 대해서, 엉뚱한 상황의 BGM을 만드는 것으로 프로젝트를 대신 하였으나, 사실 원래 진행하려던 프로젝트는 사운드 데이터로 인터넷 하기 였다.
이게 무슨 소리지?
이게 무슨 개소리야! 싶겠지만, 우리가 사용하고 있는 전자 시스템은 01010101~ 형태의 이진 데이터로 구현되어 있고, IO 입출력 포트 모두 01010101~ 형태의 이진 형식을 띄고 있다. 즉 프로토콜만 맞춰주고 그 형태를 활용하거나 원리를 그대로 사용한다면 본연의 기능이 아니더라도 작업을 수행 해 낼 수 있을 것이다.
물품 준비 및 배경 이론
파스타를 요리할 때 난 냉장고를 열어본다. 면이 없으면 나의 주 임무는 요리하기가 아니라 면 구매하기가 될 것이다. 마찬가지로... 어떤 프로젝트를 개발할 때 필요한 장비가 없으면 구하거나 대체할 필요가 있는데... 흠... 먼저 필요한 장비가 무엇일까?
소리 데이터로 네트워크를 통신하기 위해서... 뭘 준비 해야할까?
먼저 소리 데이터를 전송하고 받을 컴퓨터가 필요하다, 보통 인터넷은 공유기와 같은 라우터/게이트웨이 에 연결 해서 신호를 받고 IP를 할당 받고 통신한다. 하지만 여기서 구현할 내용은 "소리 케이블""소리 단자"를 통해서 인터넷을 하는 것이므로, 오디오 케이블도 필요할 것이다.
그러면 PC와 PC를 오디오 케이블로 연결해야 하는데, 어느 단자에 어떻게 연결을 해야 할까? 보통 표준 PC에는 라인입력, 마이크입력, 소리출력 3개의 단자가 존재한다. 컴퓨터에 존재하는 유일한 아날로그 형태의 IO포트이다. 신기한 것은 이 3가지 모두 아날로그이기 때문에 소리 출력 선을 마이크 입력에 넣으면 소리 신호가 그대로 마이크에 전해진다.
라인 입력 단자 또한 마이크 입력처럼 아날로그 신호를 받는 역할을 한다. 차이점 역시 존재하는데, 마이크 입력은 소리 신호를 증폭, 프로세싱하는 단계가 추가되기에 비교적 원본 신호에 대해 왜곡이 발생할 수 있다. 사실 잘 기억이 안난다. 틀린 내용이 있다면 바로 잡아주길 바란다.
결과적으로 어떤 인터넷 데이터를 담은 신호 데이터를 소리 출력을 통해 내보내고, 라인 입력이나 마이크 입력을 통해 수신하면 되는 것이다. 정말 간단하다!...

Audacity 소프트웨어에서 노이즈를 생성한 모습
라고 생각하면 오산이다. 상기 그림은 소리 신호를 나타낸 것이다. 소리 신호이기 때문에 이를 마이크 단자에 내보내면 마이크 단자에서는 이 소리 신호를 받아들이겠지만 노이즈가 발생 할 가능성이 있다. 소리의 데이터는 파형 및 주파수, 진폭에 대한 데이터로 최종적으로는 물리적인 음압으로 재생되기 때문에 왜곡이 되더라도 소리를 청취하는데 있어서는 큰 문제는 없다. 그렇기 때문에 소리의 이퀄라이저저음 강화 같은 작업을 하더라도 우리 귀로 듣는데는 유사한 소리일 뿐이다.
하지만, 네트워크 데이터같은 파일(단순 소리 파형이 아닌 소리 파일도 포함한다), 이미지, 소리, 글자등을 담는 이진 데이터의 경우 사정이 다르다. 신호, 즉 비트 하나만 깨지더라도 그 주변 데이터는 깨지거나 손상 된 상태가 된다.
위 그림은 노이즈 신호 일부를 나타낸 것이다. 만약 저 데이터에 소리 파형이 아닌, 파일이나 이미지 같은 데이터를 넣었다고 가정하자. 이론적으로 16-bit 의 진폭을 가지는 44100hz 의 samplerate를 가진 스테레오 wav 파일은 초당 2*44100*2 인 172.07 KB 의 데이터를 담을 수 있다. 이 데이터를 꽉 채워서 소리 파형을 담은 소리 파일로 저장하고, 다른 컴퓨터에 USB 등을 통해 복사를 하면 당연히 그 데이터는 소리 파형이더라도 완전히 보존된다. USB 등 데이터는 모두 이진으로 관리되기 때문에 파일이 손상되지 않기 때문이다.
하지만..! 우리는 소리 단자를 통해서, 즉 소리 출력을 통해서 소리를 전달하는 것이고 소리 단자는 아날로그 단자이기 때문에 중간에 노이즈가 포함될 수 있다. 즉 172.07KB의 데이터를 꽉 채워서 소리를 출력하게 된다면 중간에 전기 잡음이나 화이트노이즈 등에 의해 신호의 세기가 미세하게 조작될 것이고, 이렇게 조작된 데이터는 2진 데이터로 해석했을 때 전혀 다른 데이터가 될 수 있다. 즉 꿩을 잡았는데 집에와서 보니 흙이 되어있을 수 있다 (?)
따라서 이러한 노이즈에 취약한 환경에서는 이를 복구할 수 있도록 조치를 할 수 있는 기술을 탑재하거나, 또는 켜지고 꺼지는 1비트 신호로 보냄으로써 해결할 수 있다. 상기 그림과 같이 글자나 문서 데이터를 바로 담아서 보내는 것이 아니라, 하기 그림처럼, 켜지고 꺼지는 신호로 보내는 방법이다. 이 방법을 사용하면 전송할 대와 달리 받는 쪽에서 데이터의 노이즈로 인해 이상한 잡음이 끼더라도 중앙 기준점을 기준으로 데이터를 판단할 수 있게 된다.

물론, 실제 전기 신호 및 디지털 회로에서도 사용하는 기본적인 방법이고 클럭의 속도 주기를 확인하는 클럭 체크 라인이 필요하지만, 소리 출력 및 소리 마이크 입력 자체에 sampling 기능이 내장되어 있고, 샘플 레이트 등을 조절할 수 있기 때문에 그 사항까지 고려할 필요는 없다.
그러면 이러한 신호를 간단하게 확인 할 장비가 필요한데, 나는 이전에 공부 용도로 사 둔 휴대용 오실로스코프가 있기 때문에, 이 장비를 활용 해 보기로 한다. 소리 단자 및 마이크 입력 단자에서도 추이를 확인할 수 있기 때문에 동작 상의 확인 말고는 마이크 입력 단자의 녹음을 통해서 확인하는게 더 수월하긴 하다. 하지만 나는 공부를 하는 입장이기에, 이 장비를 활용 한다.
구현 전 장비로 테스트 및 확인
상기 그림은 440Hz의 정사각형 신호를 나타낸 것이다. 정현파를 사용해도 되기야 하겠지만, 피크 기준을 확인하기 위해서는 정사각형 신호가 훨씬 구현하기 편리하다. 이 신호를 소리 단자로 출력해야 한다.
소리 단자로 출력하기 위해 컴퓨터 메인보드 뒷 편에 있는 초록색 단자를 활용해도 되지만, 나는 신호를 확인하기 위해 별도 사운드 카드를 사용했다. 실제 동작시에는 메인보드에 있는 단자를 사용해도 무방하다.
사놓고 많이 쓰지 않았던 오실로스코프이다. 이럴 때 써 줘야지... 나 같은 컴퓨터 학부생이 언제 쓰겠나.. 용돈 모아 해외 직구로 약 10만원 중~후반대에 구매 했던 것으로 기억한다. 6022BL 이라는 모델인데, 논리 신호 확인도 가능한지라 되게 쓸만하다. 20Mhz 까지 사용을 권장하는 것 같다. 소리 기본 신호는 Sample Rate 44100Hz로 4.41Khz 이니 전혀 문제될 것이 없다.
이 장비를 사용해서 소리 단자를 측정 해 보면 다음과 같다.
노이즈가 되게 많이 끼긴 했지만 441.3Hz 로 잘 출력되고 있음을 알 수 있다. 실제 작업시에는 440Hz 의 Rate로 구현하는 것이 아니라, 1 샘플 마다 데이터를 켰다가 껐다하는 식으로 구현할 예정이다. 왜냐하면 위에서 언급했듯 소리 출력 및 입력 단자 자체에서 샘플링을 한 데이터를 받기 때문이다.
구현 사항 정리
언제나 그래왔듯, 구현하기 전 계획은 아이큐 9999를 가진 천재가 구성한 듯 매우 완벽하다. 실제 구현시에 어떤 문제가 발생할지 모르겠지만 발생하는 문제들을 얍얍! 물리치며 오디오로 네트워크하기 세상의 1인자가 되도록 하겠다.
필요 준비물
송신부 PC
수신부 PC
Out to out 오디오 케이블
개발 운영체제 환경
윈도우 10 운영체제 개발
사용 언어
C#
사용할 오디오 라이브러리
NAudio
다음 목표
C# 에서 오디오를 녹음, 비트로 수신, 출력하는 부분을 구현 해 본다.
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.