2010년 2월 27일 토요일

#34.

2010. 02. 27. 토요일. 날씨: 맑음


이제 정말 봄인가보다. 따듯하고 햇살도 따갑고.
오늘은 결혼식에 가기로 했는데 빌어먹을 한진택배 때문에 이러지도 저러지도 못하다가 좀 늦었다.
암튼 강남에서 저녁을 먹고 (엄청 맛있는 쌀국수 집을 알게 되었다!!)
파주로 고고싱 하여 친구네 집으로 갔다.
친구 딸은 이제 6개월이 지나 7개월 째 인데 성질을 부리는 법을 알게 되었고, 고집이 늘었다. (지 엄마 닮을 거 같은 불길한 예감) -_-;
장난아니게 힘들겠다.. -_-;; 쿠억;
뭐만 하면 울어재낀다. 게다가 사방을 기어다니고; 뭐든지 입에 넣고....;
아아.. 역시 난 애는 됐어... - _-);;;;
게다가 오늘 선물할 애기 옷 두 벌을 샀는데,, 거의 6만원 돈이 나왔다...
뭔놈의 애기 옷이 이렇게 비싸-_-; 아무리 오래 입어도 2~3개월밖에 못입을거고, 내 옷만드는 거 보다 천도 1/20정도 밖에 안들겠고만!!
역시 애는 돈 덩어리야.. 난 애는 됐어... - _-);;;;


집에서 맛감자(친구가 젤 좋아하는 안주)에 맥주를 먹으며
시시 때때로 애가 울면 제부를 보내서 재우게 하고.ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
이런 저런 얘기를 또 마구 하다가 보니까.. 새벽까지 그러고 있었다.ㅎㅎ
시댁욕이며 애기 얘기며 이런 저런 얘기.ㅎㅎ


아, 참참!! 오늘 마지막 쇼트트렉 경기는 은은동으로 끝났다.
성시백 선수 드디어 개인전 메달을 목에 걸었지만 너무 아쉬웠다.
금메달을 눈앞에서 놓쳤다. 오노 덕에... - _-) 이쉑히는 왜 민거야- _-)+
박승히 선수 동메달도 아까웠다. 중국선수들 앞 뒤 압박은 진로방해가 아닌감-_-) 툴툴...
남자 계주는 곽윤기가 완전 멋졌다+_+) 짱짱!!ㅋㅋㅋ
곽윤기 만세를 부르고 있는데 왠일.. 시상식에서 빵터졌다-_-;;;; 우와.... 진짜.... 빵.ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
시상대에서 춤을 출 줄이야-_-;;;;;;;;; 아.. 웃겨;;;;;

2010년 2월 26일 금요일

#33.

2010. 02. 26. 금요일. 날씨: 따듯


오늘 하루종일 삽질을 했는데, 그게 알고보니 아무것도 아니었다는 것.
그런 적이야 개발자를 하다 보면 매번 있는 일이지만서도 매번 화가 난다는 것 또한 사실.
짜증짜증-_-
그래도 해결 방법을 찾아서 다행이다. ㅎ


덕분에 퇴근 후에 만나기로 한 친구들을 늦게야 볼 수 있었다.
오늘 학교 졸업식이었는데, 휴학한 동기들은 이제야 졸업을 했다.
뭐.. 군대 갔다왔어도 칼복하면 작년이 맞는 거지만 이것들은 놀다 딩굴다 하니까 27살이나 되서야 졸업하고 있는 꼬락서니다..
나도 26살에 했으니 거기서 거기지만... -_-;
됐고,
간만에 만난 또라이 색퀴들은 여전히 또라이였고, 거기에 갓오브 또라이가 한 명 더 와서 나는 집에가고 싶을 지경에 이르렀다-_-
저질 개그부터 시작해서 더러운 얘기들까지...
진짜 친구 안하고 싶은 색퀴들....
강남한복판에서 더러운 얘기 하면서 싸우는데 졸라 쪽팔렸다. 어이도 없고-_-;
술집에서 총을 꺼내질 않나...
아오... -_-; 후에 친구를 사귈 땐 진정 골라서 사귀어야 겠다.. -_-;


김연아 선수는 결국 프리에서 좋은 점수를 냈고, 세계 신기록을 세우며 금메달을 목에 걸었다.
경기를 끝내는 순간, 점수 발표도 금메달도 아무것도 정해지지 않았지만 눈물을 흘린 김연아는 어떤 심정이었을까.
그동안의 부담감이 눈물로 전해져 온 것은 아닐까 했다.
나도 울컥했다.
김연아 선수.. 진짜진짜 존경한다.
그리고 나랑 결혼하자!!!! 같이 살자!!! 연아야!!!!!!!!!!!!!

Wave file format

wave file format

offset

size(byte)

field

0

4

"RIFF" or "LIST"

4

4

file size (data size + 40)

8

4

"WAVE"

12

4

"fmr "

16

4

16

20

2

WAVE_FORMAT_PCM

22

2

1 = mono, 2 = strereo

24

4

sample rate

(11kHz: 11025, 22kHz: 22025, 44kHz: 44100)

28

4

bytes per sec

sample rate * channel * (bits per sample/8)

30

2

block align

channel * (bits per sample/8)

32

2

bits per sample (8, 16, ...)

36

4

"data"

40

4

data size


writeFile 함수 사용 시 속도 문제


writeFile함수를 이용해서 메세지가 들어올 때마다 file에 데이터를 write하였다.
그런데 이게 data loss가 많이 발생하는 거다.

그래서 생각해 본 것이,
파일에다가 쓰기 때문에 데이타가 들어오는 속도보다 쓰기 속도가 느려서 loss가 생기는 것인가?
이것을 보이기 위해 파일에 직접 쓰지 않고, buffer를 만들어서 우선 저장한 뒤에 데이타가 더 이상 들어오지 않을 때 파일에 옮겨서 쓰게 했다.

그랬더니 data loss 없이 저장이 되어 있었다.
그러나 데이타가 얼마나 들어올지 모르는 상황에서 무조건 buffer를 크게 잡아 buffer에 우선 저장을 하기에는 무리가 있었다.
write속도를 줄이는 것은 어쩔 방법이 없었다.

그 때 한줄기 희망이 보였으니!!
파일을 NAND에 만들어 두었던 것!!
파일을 SD에 만들고 write를 해보았더니 NAND보다 속도가 빨랐다.
아아.. NAND는 write 속도가 느리다...

2010년 2월 25일 목요일

#32.

2010. 02. 25. 목요일. 날씨: 비비비비비비비비 비온다.


아악 쇼트트랙.ㅠㅠ
오늘 쇼트트랙을 본 사람들은 모두 분노했겠지.
아.. 눈물이 나는구나..
여자 계주가 있었고 세계 신기록을 세우며 1등으로 골인 금메달이 확정이었지만, 실격판정 받는 바람에 모두 물거품. ㅠㅜ
게다가 실격을 준 그 심판은 몇 년전 김동성에게 오노 사건으로 실격을 준 바로 그 인간. ㅡ.,ㅡ)
2002년 월드컵의 그 세레모니가 생각난다.
오노 이자식은 벌써 몇 년 째 올림픽에 나오고 있는거야. ㅡ.,ㅡ
암튼 그 심판 미국에서 뭘 받아 먹었나 우리나라에 원한이 있나 왜 그러는거야!!!!


비도오고 꿀꿀하구만.. - _-) 툴툴...

Wave file 만들기

winCE에서 winmm.lib를 쓸 수 없는 관계로,, mmio 함수들을 하나도 쓰지 못하고.ㅠㅜ
결국엔 wave file을 손수 만들어 주어야 하는 귀찮음에 봉착하였다.

wave file header 구조에 따라 다음과 같은 구조체를 선언한다.

typedef struct
{
           FOURCC ckID; // 'RIFF'인지 'LIST'인지 넣어준다.
           DWORD dwFileSize; // 전체 file크기 저장 (data크기 + 40)
           FOURCC fccType; // 'WAVE'
           FOURCC subckID; // 'fmr '
           DWORD dwSubChunkSize; // 16
           WORD wFormatTag; // WAVE_FORMAT_PCM
           WORD nChannels; // 1 = mono, 2 = stereo
           DWORD nSamplesPerSec; // 11025, 22050 등등등
           DWORD wBitsPerSample; // 8, 16, 등등등
           WORD nBlockAlign; // nChannels * wBitsPerSample/8
           WORD nAvgBytesPerSec; // nChannels * wBitsPerSample/8 * nSamplesPerSec
           FOURCC datackID; // 'data'
           DWORD dwDataSize; // data크기
} WaveFormChunk;


그리고 이 구조체에 대한 변수를 하나 선언하여 알맞은 값을 넣어주고,
파일의 맨 앞부분에 write한다.

WaveFormChunk WaveHeader;
WaveHeader.ckID = FOURCC_RIFF;
WaveHeader.dwFileSize = m_dwDataLen + 40;
WaveHeader. fccType = MAKEFOURCC('W', 'A', 'V', 'E');
WaveHeader.subckID = MAKEFOURCC('f', 'm', 't', ' ');
WaveHeader.dwSubChunkSize = 16;
WaveHeader. wFormatTag = WAVE_FORMAT_PCM;
WaveHeader. nChannels = 2;//pWaveFormat->nChannels;
WaveHeader. nSamplesPerSec = 11025;//pWaveFormat->nSamplesPerSec;
WaveHeader. wBitsPerSample = 8;//pWaveFormat->wBitsPerSample;
WaveHeader. nBlockAlign = WaveHeader. nChannels * WaveHeader. wBitsPerSample /8;
WaveHeader. nAvgBytesPerSec = WaveHeader. nSamplesPerSec * WaveHeader. nBlockAlign;          
WaveHeader.datackID = MAKEFOURCC('d','a','t','a');
WaveHeader.dwDataSize = m_dwDataLen;

WriteFile(hFile, & WaveHeader, sizeof(WaveFormChunk), &dwSize, NULL);
//파일 입출력 참고 (포스팅보러가기)

그리고 나머지  data를 write하면 wave 파일이 생성된다-_-)/

파일 입출력


HANDLE hFile;
hFile = CreateFile(L"HardDisk\\test.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS , NULL, NULL);
//file을 생성하여 handle을 받아온다.

   DWORD dwSize = 0;
WriteFile(hFile, pBuffer, BUFFERSIZE, &dwSize, NULL);
//BUFFERSIZE만큼 pBuffer에 있는 내용을 hFile에 write한다.
//dwSize는 반환 값. 몇 byte를 write 했는지 반환한다.

CloseHandle(hFile);
//handle 반환