본문 바로가기

개발(Development)273

자바스크립트 File API 파헤치기: Blob, File, FileReader, FileList, BlobURL 자바스크립트는 바이너리 데이터를 다루기 위한 방법으로 Buffer와 FileAPI를 제공한다. 1. Buffer: 개발자가 메모리 관점에서 바이너리 데이터를 다룰 수 있다. 2. File API: 파일(png, mp3등)이나 입출력장치(마이크, 카메라, 화면 등)의 바이너리 데이터를 다룰 수 있다. ▼이 중 Buffer(ArrayBuffer, TypedArray 등)에 대해서는 아래 글에서 아주 상세하게 정리해 두었다.▼ 자바스크립트 버퍼(Buffer): ArrayBuffer, TypedArray 파헤치기! 이번 글에서는 File API를 정리한다. # FILE API 란? FILE API란 단순 텍스트 데이터 뿐만 아니라 이미지, 오디오, 비디오 등의 대용량 바이너리 데이터를 다루기 위한 API이다. .. 2021. 12. 1.
자바스크립트 버퍼(Buffer): ArrayBuffer, TypedArray 파헤치기! 자바스크립트는 바이너리 데이터를 다루기 위한 방법으로 버퍼(Buffer)를 구현한 ArrayBuffer, ArrayBufferView를 제공한다. 이번 글에서 다룰 내용을 요약하면 아래와 같다. 1. 버퍼(Buffer)란? - 임시로 바이너리 데이터를 저장하기 위한 메모리 공간 혹은 바이너리 데이터 자체 2. ArrayBuffer란? - 자바스크립트에서 구현된 버퍼이다. - 고정된 크기의 메모리 공간에 바이너리 데이터를 저장하는 객체다. 3. ArrayBufferView란? - ArrayBuffer에 저장된 바이너리 데이터에 접근하는 객체다. - TypedArray, DataView 2개가 제공된다. 4. TypedArray란? - ArrayBufferView의 한 종류이다. - 배열 요소의 타입/크기를.. 2021. 11. 30.
스트리밍(Streaming)이란: 스트림(Stream), 버퍼(Buffer) 원리 # 스트림(Stream)이란? "스트림이란 시간의 흐름에 따라 발생하는 연속적인 데이터의 흐름이다." 이게 무슨 말인지 이해하기 위해 먼저 스트림과 파일의 기본적인 차이부터 집고 넘어가자. (이해하기 쉽게 단순화해서!) 파일은 mp3 처럼 4분 30초짜리 음원 데이터 전체가 기록되어 있다. 따라서 고정되어 있는 크기의 데이터를 처음부터 끝까지 읽어서 처리할 수 있다. 하지만 스트림은 파일과는 다르다. 스트림이란 계속해서 흘러 들어오는 데이터를 의미한다. 즉, 마이크에 대고 하는 이야기나, 비디오 카메라로 찍는 동영상 처럼 입력장치를 통해 계속해서 들어오는 데이터의 흐름을 의미한다. 따라서 실제 데이터가 입력되기 전에는 어떤 데이터가 들어올지 알 수 없으며, 실시간으로 들어오는 데이터를 그때 그때 읽고 처.. 2021. 11. 27.
오디오 파형 분석(FFT: 고속 푸리에 변환): Time Domain Data to Frequency Data 이번 글에서는 소리에 대한 내용을 좀더 깊게 다루어 볼 예정이다. 또한 FFT(고속 퓨리에 변환)을 통해 소리를 분석하는 방법도 간단하게 정리한다. ▼이 글을 읽기 전에 아래에서 다룬 소리 기초 내용을 알고 있으면 좋다.▼ 소리란? 소리의 기초 원리 (feat. 마이크와 스피커의 작동 원리) 소리의 진폭, 주기, 주파수, 파형 (볼륨, 음정, 음색의 결정 원리) 오디오 데이터 추출 및 변환: ADC, 샘플링, 샘플레이트, 채널 이 글에서 다루는 내용은 조금 길고 어려울 수 있지만, 최대한 쉽게 정리하려고 노력했다. 특히 Javascript Web Audio API 의 AnlayserNode 를 사용하려는 개발자 분들께는 큰 도움이 될 것 같다. * 글 중간 중간에 사용된 FDI(For Developer'.. 2021. 11. 26.
오디오 데이터 추출 및 변환: ADC, 샘플링, 샘플레이트, 채널 이번 글에서는 컴퓨터에서 오디오 데이터를 처리하기 위해 우리가 듣는 소리를 디지털 바이너리 데이터로 추출/변환하여 처리하는 방법을 다룬다. ▼단, 아래의 소리 기초 원리에 대한 이해가 필요하다.▼ 소리란? 소리의 기초 원리 (feat. 마이크와 스피커의 작동 원리) 소리의 진폭, 주기, 주파수, 파형 (볼륨, 음정, 음색의 결정 원리) # 컴퓨터가 소리를 다루는 원리 컴퓨터가 소리를 인식하고, 소리를 재생하는 원리는 무엇일까? 1. 소리가 발생하면 주변의 공기가 진동하여 마이크의 판막을 흔든다. 2. 마이크의 판막이 진동할 때마다 전기 신호가 생성된다. 3. 전기 신호가 메모리에 디지털 데이터(1, 0)로 저장된다. (ADC: Analog to Digital Conversion) 4. 저장된 데이터가 C.. 2021. 11. 25.
소리의 진폭, 주기, 주파수, 파형 (볼륨, 음정, 음색의 결정 원리) 소리란 공기의 밀도가 반복하여 변화(진동)하며 주변으로 퍼져나가는 것이다. ▼ 소리의 원리는 이전 글 참고 ▼ 소리란? 소리의 기초 원리 (feat. 마이크와 스피커의 작동 원리) 이번 글은 소리의 진폭, 주기, 주파수, 파형을 다루고, 소리의 3대 요소인 크기(Volume), 높낮이(Pitch), 음색(Timbre)이 어떻게 달라지는지 다룬다. # 소리의 파동(Wave) 소리가 발생하면 공기의 밀도가 변하면서 퍼져나간다. 이 때 공기의 밀도가 커졌다 작아졌다 진동하는 것을 그래프로 표현해보자. x축에 시간, y축에 밀도를 표시하면, 아래와 같은 그림이 그려질 것이다. * 이를 Time Domain Data라고 한다.(개발자들은 이 단어를 기억하자) 소리의 시간에 따른 밀도 변화를 파동(Wave) 혹은 .. 2021. 11. 24.
소리란? 소리의 기초 원리 (feat. 마이크와 스피커의 작동 원리) Audio|Sound 를 다루기 위해 기본적으로 알아야할 소리에 대한 기초 지식을 정리한다. 필자 자체가 소리에 문외한이기 때문에 최대한 쉽게 이해하려 노력했고, 그 노력의 과정을 기록으로 남기는 것이니, 누구라도 쉽게 이해할 수 있을 것이다. 먼저 소리가 대체 무엇인지! 그 원리부터 시작하여 소리의 주기, 주파수와 같은 기초 용어를 정리하고, 소리의 높낮이(Pitch), 크기(Volume), 음색은 어떻게 결정되는지 살펴본다. 최종적으로는 개발자를 위한 FFT와 ADC에 대한 내용도 다루어 볼 예정이다. 그럼 소리의 원리부터 시작해보자. 알고 나면 생각보다 쉽다. # 소리란? 소리란 공기의 떨림, 혹은 진동이다. 기타 줄을 튕기면 순간적으로 줄이 앞뒤로 흔들린다. 이 때 주변의 공기도 앞뒤로 흔들리며 .. 2021. 11. 22.
[자바스크립트] HTML에서 특정 텍스트가 포함된 요소(태그)를 클릭하는 방법 어떤 분께서 질문을 해주셔서 올리는 글 (댓글로는 코드를 설명하기 힘들어서...블로그 글로 작성한다.) # 질문 내용 - Javascript를 이용해 HTML에서 "특정 텍스트"를 찾아서, 해당 요소를 클릭할 수 있는 방법이 있나요? # 해결 방법 1) HTML의 모든 요소를 취득한다. 2) 해당요소의 TextNode 값이 "특정 텍스트"를 포함하는지 체크 3) "특정 텍스트"를 포함하는 요소에 클릭을 발생시킨다. 단, 주의할 점! 엘리먼트.textContent만 체크하면, 엘리먼트의 자식에 자식이 보유한 textContent까지 체크하여 body, html 등 상위 태그도 선택된다. 따라서, 엘리먼트 본인 소유의 textContent인지 확인하기 위해 아래의 코드로 체크해줘야 한다. 엘리먼트.child.. 2021. 10. 18.
mysql 접속 관련 오류 해결: Error: Access denied for user 'root'@'localhost', ER_NOT_SUPPORTED_AUTH_MODE 구글클라우드 플랫폼에 서버 배포를 하다가, mySQL 데이터베이스 연동을 할 일이 생겼다. mySQL을 설치하고 테스트를 위해 root 계정으로 연동하는데, 아래와 같은 에러가 발생했다. # 발생한 에러 Error: Access denied for user 'root'@'localhost' code: 'ER_ACCESS_DENIED_NO_PASSWORD_ERROR', errno: 1698, sqlState: '28000', sqlMessage: "Access denied for user 'root'@'localhost'", sql: undefined # 원인 구글링 해보니, ubuntu 계열에서 root계정의 auth plugin이 달라서 발생하는 문제라는 것 같다. 참고: https://stackove.. 2021. 10. 18.