본문 바로가기

C26

[C/C++] parse mp3 header/C언어 MP3 헤더 분석 함수 공유 parse mp3 header C언어 MP3 헤더 분석에 도움이 될 함수를 공유한다. 이번 코드는 C언어를 기준으로 작성하였고 main()이 없이 함수만 공유하니 상황에 맞게 사용하면 되겠다. MP3 파일 또는 스트리밍의 구성은 AAU(Audio Access Uint)의 연속으로 이루어져 있으며 각 AAU는 매직 비트, 헤더(프레임 정보), 프레임 데이터로 구성이 되어있다. 즉 MP3 파일을 재생하기 위해선 샘플 레이트, 비트레이트, 채널, MP3 코덱 정보 등 재생 정보가 필요한데 이 정보는 각각의 AAU마다 존재하는 헤더에 구성되어있단 것이다. 위의 이유로 프레임데이터를 추출하기 위해선 AAU의 정보를 추출하는 것이 매우 중요하고 아래 head parser는 그것에 도움을 줄 수 있다. 소스코드 #i.. 2022. 1. 7.
[C/C++] ALSA PCM capture(recoding) 소스 코드 공유 ALSA PCM capture, ALSA recoding https://github.com/muabow/home/tree/main/src/cpp/pcm_capture GitHub - muabow/home: C/C++, PHP, GO source/library C/C++, PHP, GO source/library. Contribute to muabow/home development by creating an account on GitHub. github.com Linux ALSA driver를 이용한 audio capture 프로그램 샘플을 작성하였다. 코드 내에 주어진 파라미터 대로 오디오를 읽어 capture event handler를 통해 pcm raw 파일로 저장한다. 동작을 위한 내용은 READM.. 2021. 12. 28.
[C/C++] explode, split 구현 방법과 소스코드 공유 explode, split implode 함수의 반대 동작인 문장의 분리를 하는 explode 역시 vector를 사용해 PHP와 같은 방식으로 구현해보았다. https://github.com/muabow/home/tree/main/src/cpp/explode GitHub - muabow/home: C/C++, PHP, GO source/library C/C++, PHP, GO source/library. Contribute to muabow/home development by creating an account on GitHub. github.com 소스코드 내용 #include #include using namespace std; vector explode(const string _delimiter,.. 2021. 12. 24.
[C/C++] implode 구현 방법과 소스코드 공유 implode implode는 문장의 결합 역할을 하는 함수이다. C++ 개발 시 string 관련 처리를 많이 하게 되는데 implode 함수가 없는 거 같아서 vector를 사용해 PHP와 같은 방식으로 구현해보았다. https://github.com/muabow/home/tree/main/src/cpp/implode GitHub - muabow/home: C/C++, PHP, GO source/library C/C++, PHP, GO source/library. Contribute to muabow/home development by creating an account on GitHub. github.com 소스코드 내용 #include #include using namespace std; stri.. 2021. 12. 24.
[C/C++] signal handler library 활용과 소스코드 공유 signal handler library C/C++ 에는 signal.h 를 사용한 signal 함수가 존재한다. 시스템 인터럽트 외 여러 상황에 사용할 수 있기 때문에 필수로 시그널 처리를 하게 된다. 가장 쉬운 예를 들면 ctrl + c를 통해 SIGINT를 발생시켜 프로그램을 종료할 때 메모리 반환을 하여 메모리 누수를 막거나 소켓 또는 IO 핸들러들의 상태를 닫아주어 graceful 한 종료를 해야 할 때 사용된다. 수많은 프로그램을 작성하면서 번번이 signal에 대한 정의와 시그널 처리에 따른 콜백 함수 등을 작성하기 귀찮아 라이브러리로 작성하였고 이를 공유한다. https://github.com/muabow/home/tree/main/library/cpp/lib_signal GitHub - .. 2021. 12. 24.
[C/C++] pthread condition 설명 pthread condition pthread POSIX 스레드(POSIX Threads, PThread)로 프로그램의 병렬 처리를 제공하는 표준 API, thread는 하나의 프로그램 처리 단위이다. pthread_cond pthread의 조건 변수를 통한 thread 제어 역할을 수행한다. 1. 사용법 #include pthread_cond_t cond = PTHREAD_COND_INITIALIZER; int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr); int pthread_cond_signal(pthread_cond_t *cond); int pthread_cond_broadcast(pthread_cond_t *con.. 2020. 3. 30.
[C/C++] pthread_mutex_lock 설명 pthread_mutex_lock - 뮤텍스 잠금을 얻거나 해제 1. 사용법 #include int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); int pthread_mutex_destroy(pthread_mutex_t *mutex); 2. 설명 * mutex - MUTual EXclusion(상호 배제)devide의 줄임말로 쓰레드간 공유하는 데이터 영역을 보호하기 위해서 사용 - 데이터 영역의 보호는 critical section(임계 영역)을 만들고 임계 영역내에 단하나의 쓰레드만이 진입.. 2020. 3. 30.
[C/C++] C99 구조체 초기화 하는 방법 C99 구조체 초기화 하기 일반적으로 사용하는 구조체 초기화 방법은 아래와 같다. struct address { int street_no; char *street_name; char *city; char *prov; char *postal_code; }; struct address temp_address = { 0, "st. green", "Hamilton", "Ontario", "123-456" }; 위의 방법은 C89 의 방법이고 C99에서는 아래와 같이 특정변수만 제한적으로 초기화가 가능하다. struct address { int street_no; char *street_name; char *city; char *prov; char *postal_code; }; struct address temp.. 2014. 12. 19.