문득 얼마전 Sony P 시리즈였나?
기본적으로 Noise Cancelling을 지원한다는 이야기를 들어서
프로그램을 찾아 볼려니 보이지 않아서 한번 만들어 볼까는 호기심이 발동했다
(써글 호기심 ㄱ-)


조금 검색해보니, 구현이야 간단하지만 거리나 얼마나 큰 범위를 noise cancelling 할건지가 문제고
sound card에서 받아오는 time lag로 인해서 은근히 어렵다고 한다.


일단 winapi에서 제공하는 녀석들로 찾아 보니

MCI (Media Contol Interface) 라는게 있다.
SAPI (Speech API)도 있긴한데 TTS나 음성인식쪽이라 일단은 패스~


일단 대충 꼬라지를 보니..

step 1. 윈도우 레코드 프로그램 흉내내기 (파일로 저장)
step 2. 메모리 상에서 위상 뒤집기
step 3. 뒤집은 위상을 스피커로 출력하기

이런 순서가 될 듯 하다.

DWORD CMyRecordDlg::RecordWAVEFile(DWORD dwMilliSeconds)
{
    UINT wDeviceID;
    DWORD dwReturn;
    MCI_OPEN_PARMS mciOpenParms;
    MCI_RECORD_PARMS mciRecordParms;
    MCI_SAVE_PARMS mciSaveParms;
    MCI_PLAY_PARMS mciPlayParms;

   // Open a waveform-audio device with a new file for recording.

    mciOpenParms.lpstrDeviceType = "waveaudio";
    mciOpenParms.lpstrElementName = "";
    if (dwReturn = mciSendCommand(0, MCI_OPEN,
        MCI_OPEN_ELEMENT | MCI_OPEN_TYPE,
        (DWORD)(LPVOID) &mciOpenParms))
    {
        // Failed to open device; don't close it, just return error.
        return (dwReturn);
    }

    // The device opened successfully; get the device ID.
    wDeviceID = mciOpenParms.wDeviceID;
    // Begin recording and record for the specified number of
    // milliseconds. Wait for recording to complete before continuing.
    // Assume the default time format for the waveform-audio device
    // (milliseconds).

    mciRecordParms.dwTo = dwMilliSeconds;
    if (dwReturn = mciSendCommand(wDeviceID, MCI_RECORD,
        MCI_TO | MCI_WAIT, (DWORD)(LPVOID) &mciRecordParms))
    {
        mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
        return (dwReturn);
    }

    // Play the recording and query user to save the file.
    mciPlayParms.dwFrom = 0L;
    if (dwReturn = mciSendCommand(wDeviceID, MCI_PLAY,
        MCI_FROM | MCI_WAIT, (DWORD)(LPVOID) &mciPlayParms))
    {
        mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
        return (dwReturn);
    }

    if (MessageBox("Do you want to save this recording?",
        "", MB_YESNO) == IDNO)
    {
        mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
        return (0L);
    }

    // Save the recording to a file named TEMPFILE.WAV. Wait for
    // the operation to complete before continuing.

    mciSaveParms.lpfilename = "tempfile.wav";
    if (dwReturn = mciSendCommand(wDeviceID, MCI_SAVE,
        MCI_SAVE_FILE | MCI_WAIT, (DWORD)(LPVOID) &mciSaveParms))
    {
        mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
        return (dwReturn);
    }

    return (0L);
}

[참고 : http://www.codeproject.com/KB/audio-video/Voice_Recording.aspx]

 Offset  Size  Name             Description

The canonical WAVE format starts with the RIFF header:

0         4   ChunkID          Contains the letters "RIFF" in ASCII form
                               (0x52494646 big-endian form).
4         4   ChunkSize        36 + SubChunk2Size, or more precisely:
                               4 + (8 + SubChunk1Size) + (8 + SubChunk2Size)
                               This is the size of the rest of the chunk
                               following this number.  This is the size of the
                               entire file in bytes minus 8 bytes for the
                               two fields not included in this count:
                               ChunkID and ChunkSize.
8         4   Format           Contains the letters "WAVE"
                               (0x57415645 big-endian form).

The "WAVE" format consists of two subchunks: "fmt " and "data":
The "fmt " subchunk describes the sound data's format:

12        4   Subchunk1ID      Contains the letters "fmt "
                               (0x666d7420 big-endian form).
16        4   Subchunk1Size    16 for PCM.  This is the size of the
                               rest of the Subchunk which follows this number.
20        2   AudioFormat      PCM = 1 (i.e. Linear quantization)
                               Values other than 1 indicate some
                               form of compression.
22        2   NumChannels      Mono = 1, Stereo = 2, etc.
24        4   SampleRate       8000, 44100, etc.
28        4   ByteRate         == SampleRate * NumChannels * BitsPerSample/8
32        2   BlockAlign       == NumChannels * BitsPerSample/8
                               The number of bytes for one sample including
                               all channels. I wonder what happens when
                               this number isn't an integer?
34        2   BitsPerSample    8 bits = 8, 16 bits = 16, etc.
          2   ExtraParamSize   if PCM, then doesn't exist
          X   ExtraParams      space for extra parameters

The "data" subchunk contains the size of the data and the actual sound:

36        4   Subchunk2ID      Contains the letters "data"
                               (0x64617461 big-endian form).
40        4   Subchunk2Size    == NumSamples * NumChannels * BitsPerSample/8
                               This is the number of bytes in the data.
                               You can also think of this as the size
                               of the read of the subchunk following this
                               number.
44        *   Data             The actual sound data.

[참고 : http://ccrma.stanford.edu/courses/422/projects/WaveFormat/]

'모종의 음모 > noise cancelling' 카테고리의 다른 글

waveInOpen() waveOutOpen()  (0) 2009.03.26
sampling rate 관련 의문  (2) 2009.03.26
wav format 관련 문서  (0) 2009.03.26
openGL audio spectrum visualization - sndpeek  (0) 2009.03.19
MCI Reference  (2) 2009.03.19
Posted by 구차니
지름신이 몸소 강림해주셨다.

오디오트랙 마야 5.1 MK-II VE     최저가 20,000
알텍랜싱 151i                           최저가 30,540

택배비 해서 대략 6만웡 ㅠ.ㅠ
그래도! 그래도!!! 판타스틱한 사운드로 게임을 할 수 있는데!! (응?)


월급날이여 오라!!!





개소리 : 누가 머래도.. 직장인은 돈은 버는데 돈이 없고 게다가 시간도 없다는
            참 말도 안되는 상황을 겪는것 같다.

            학생은 그래도 돈은 없어도 시간은 많은데 말이야 ㄱ-
            학생이나 다시 할까?

'개소리 왈왈 > 직딩의 비애' 카테고리의 다른 글

결국은 짬밥과 나이?  (6) 2009.03.20
그래도 나는 복받은 사람이구나 싶었다.  (0) 2009.03.17
전 직장 파산신청  (4) 2009.01.28
출장따윈 ㄱ-  (0) 2009.01.28
출장은 무서워!  (8) 2009.01.21
Posted by 구차니
개소리 왈왈2009. 3. 16. 12:35
1   53    닭가슴살 칼로리
2 44 무료한영사전
3 20 네이트온 원격제어
4 14 닭가슴살칼로리
5 12 all.html
5 12 svn
6 11 apa-2000
7 8 8051
8 6 pototv


닭가슴살은 좀 사라져줬음 좋겠는데... OTL

무료한영사전이야 내 지갑이 가벼줘지니 -ㅁ-

네이트온 원격제어 안될경우에 대한 포스팅은 올린지 얼마 안되서 3위 등극 -ㅁ-!
(성의 없는 포스팅주제에 3위 ㅠ.ㅠ)

all.html은 당췌 어떤 경로로 온건지 알수가 없다는..


근데.. 내 블로그 정체가 뭐지 -ㅁ-?
Posted by 구차니
Programming/C Win32 MFC2009. 3. 16. 12:33
있을 줄 알았는데 없다는 사실에 웬지 "초~ 쇼크~"(하레와 구우 버전)


Besides, unix way is to be ascetic and elegant, avoiding putting messy and slow algorithms under the hood, and filecopy is definitely slow ( you want syscall with fast filecopy - great, here's hardlink for you ).

[링크 : http://www.perlmonks.org/?node_id=389823]


생각해보니.. UNIX의 설계 철학중 simple is beautiful이 근간이 되어 있다는게 생각이 났다.
cp() 가 빈번하게 사용될지라도, 느린 함수이고(최소한 fopen/fread/fwrite/fclose 4개의 함수를 사용한다)
이러한 복잡한 함수는 단순함의 철학에 위배가 되기에 많이 사용함에도 불구하고
cp() 라는 함수가 존재하지 않는것 같다.



그래도...
rename() remove() 이런건 있으면서 cp()가 없다는 건 웬지 억울한 느낌?


Posted by 구차니
Linux2009. 3. 15. 21:31
The Syslinux Project covers lightweight bootloaders for

MS-DOS FAT filesystems (SYSLINUX),
network booting (PXELINUX),
bootable "El Torito" CD-ROMs (ISOLINUX), and
Linux ext2/ext3 filesystems (EXTLINUX).

The project also includes MEMDISK, a tool to boot legacy operating systems (such as DOS) from nontraditional media; it is usually used in conjunction with PXELINUX and ISOLINUX.

[출처 : http://syslinux.zytor.com/wiki/index.php/The_Syslinux_Project]
[공식 : http://syslinux.zytor.com/]


F:\syslinux\syslinux.cfg
default vesamenu.c32
timeout 100

menu background splash.jpg
menu title Welcome to F10-i686-Live!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color timeout_msg 0 #ffffffff #00000000
menu color timeout 0 #ffffffff #00000000
menu color cmdline 0 #ffffffff #00000000
menu hidden
menu hiddenrow 5
label linux0
  menu label Boot
  kernel vmlinuz0
  append initrd=initrd0.img root=UUID=00CB-3317 rootfstype=vfat rw liveimg overlay=UUID=00CB-3317 quiet  rhgb
menu default
label check0
  menu label Verify and Boot
  kernel vmlinuz0
  append initrd=initrd0.img root=UUID=00CB-3317 rootfstype=vfat rw liveimg overlay=UUID=00CB-3317 quiet  rhgb check
label memtest
  menu label Memory Test
  kernel memtest
label local
  menu label Boot from local drive
  localboot 0xffff

APPEND options...

Add one or more options to the kernel command line. These are added both for automatic and manual boots. The options are added at the very beginning of the kernel command line, usually permitting explicitly entered kernel options to override them. This is the equivalent of the LILO "append" option.


APPEND -

Append nothing. APPEND with a single hyphen as argument in a LABEL section can be used to override a global APPEND.


이 외계어들은 머냐면, 문득 liveCD가 어떻게 작동되는지 궁금해서 뒤져보다가 발견한 것들이다.
일단 syslinux 라는 것을 기반으로 USB liveCD가 작동이 되는데, 그 syslinux의 환경설정파일은
syslinux.cfg 파일의 내용 중, persistent overlay를 설정한것과 안한 것의 차이는 저 append의 내용 차이뿐이었다.


 897        initrd=         [BOOT] Specify the location of the initial ramdisk
1882 root= [KNL] Root filesystem
1889 rootfstype= [KNL] Set root filesystem type
1904 rw [KNL] Mount root device read-write on boot

[출처 : http://lxr.linux.no/linux/Documentation/kernel-parameters.txt]

rhgb = redhat graphical boot - This is a GUI mode booting screen with most of the information hidden while the user sees a rotating activity icon spining and brief information as to what the computer is doing.

quiet = hides the majority of boot messages before rhgb starts. These are supposed to make the common user more comfortable. They get alarmed about seeing the kernel and initializing messages, so they hide them for their comfort.


[출처 : http://www.redhat.com/archives/fedora-list/2004-May/msg07775.html]


찾아봐도 이정도 밖에 나오지 않는데, syslinux에서 제공하는건지 overlay에 대한 단서는 막막하다.
아무튼 root 와 overlay가 동일한 이름으로 되어 있는 것으로 봐서는, 어떠한 연관이 있어 보인다.
Posted by 구차니
개소리 왈왈2009. 3. 15. 20:18
예전 대학교 다닐적의 문서들이 우수수 어딘가에 처박혔는지도 잊고있었는데
하나둘씩 나오는거 보면, 꽤나 애지중지 했었나봅니다.

학기별 강의노트와 프로젝트 파일들.


지금 돌이켜 보면 별거 아닌 프로젝트 들이지만,
그때는 왜그리 힘들었는지..

처음에는 fopen()으로 파일 열어서 쓰고 닫고 이런것도 참 어려웠고
for문도(지금도 헷갈리지만 ㄱ-) 어려웠고
포인터는 정말 이해못했는데,

지금에 와서는 아무렇지 않게 쓰고 있는 자신을 보면
그래도 한발짝은 조금 더 걸었구나 싶습니다.






사족 : 하드 정리를 하고나니.. 하드를 지르고 싶습니다. 무슨 희한한 연관인지 모르겠지만 -ㅁ-

'개소리 왈왈' 카테고리의 다른 글

순디자인연구소 테러 실패 ㅠ.ㅠ  (5) 2009.03.18
유입 키워드 정리  (2) 2009.03.16
지하철에서 누워서 볼마우스를 배에 문질러!  (10) 2009.03.13
멘토라는 것의 의미  (6) 2009.03.13
250 근접!  (2) 2009.03.10
Posted by 구차니
아이디어!2009. 3. 14. 21:54
문득 HID 공방이 되길래 무슨 내용인가 해서 봤더니,
간단하게 줄여 말하자면, 원래 HID는 문제가 없지만 돈을 아끼기 위해서 축조정장치를 달지 않아 문제가 되는거라고 한다.

아무튼 각도가 팍 올라갈때, 아래로 조정해주는 장치가 없다면
최소한 불이 꺼지거나 약하게 강제로 조정되면 되지 않을까?

간단한 해결 방법으로는 TILT 센서를 이용해서 어느정도 이상의 각도가 되면 강제로
HID로 가는 전압(혹은 전류?)를 제한치로 떨궈주면 되지 않을려나 -ㅁ-?
Posted by 구차니
개소리 왈왈2009. 3. 13. 17:50


내가 그림만 잘 그려도 코믹하게 그릴텐데 ㄱ-


이런 느낌인건가 ㄱ-

궁상맞게 한 카운터가 더욱 좌절.. OTL
구차니 : 제 배는 입체란 말이에욧!!



사족 : 그리고 보니.. 사람들이 다 MSN 이 되어버렸.. OTL

'개소리 왈왈' 카테고리의 다른 글

유입 키워드 정리  (2) 2009.03.16
간만에 하드 정리를 하고 있습니다.  (0) 2009.03.15
멘토라는 것의 의미  (6) 2009.03.13
250 근접!  (2) 2009.03.10
내 블로그는 사인그래프를 알고 있다.  (6) 2009.03.05
Posted by 구차니
프로그램 사용/VNC2009. 3. 13. 15:03
일단 둘다 동일한 VNC이긴하다.
tightVNC는 realVNC 기반의 GPL 라이센스를 따르고 있고
realVNC는 free버전이 존재한다.



오늘 잠시 VNC 서버에 tightVNC로 접속해본 느낌은, real VNC free 버전에 비해서 화면 갱신이 매우 빠르다는 점이다.
자세한 내용은 tightVNC 서버를 설치 후 테스트를 해봐야 알 수 있을것 같다.

일단 tightVNC는 GPL 라이센스이므로 모든 기능을 100% 지원/공개 하기 때문에
real VNC 공개버전과 비교를 하자면, 파일 전송이 가능하다는 장점이 있다.

TightVNC Features

Here is a brief list of TightVNC features absent in the standard VNC.

  • File transfers in versions for Windows. You can updload files from your local machine to the TightVNC Server, and download files from the server to your computer.
  • Support for video mirror driver (Windows 2000 and above). TightVNC Server can use DFMirage mirror driver to detect screen updates and grab pixel data in a very efficient way, saving processor cycles for other applications.
  • Scaling of the remote desktop (viewer for Windows and Java viewer). You can view the remote desktop in whole on a screen of smaller size, or you can zoom in the picture to see the remote screen in more details.
  • Efficient "Tight" encoding with optional JPEG compression. New Tight encoding is optimized for slow and medium-speed connections and thus generates much less traffic as compared to traditional VNC encodings. Unlike other encodings, Tight encoding is configurable via compression levels and JPEG image quality setting.
  • Enhanced Web browser access. TightVNC includes a greatly improved Java viewer with full support for Tight encoding, 24-bit color mode, and more. The Java viewer applet can be accessed via built-in HTTP server like in the standard VNC.
  • Support for two passwords, full-control and read-only. The server allows or disallows remote keyboard and mouse events depending on which password was used for authentication.
  • Automatic SSH tunneling on Unix. The Unix version of TightVNC Viewer can tunnel connections via SSH automatically using local SSH/OpenSSH client installation.
  • And more. TightVNC includes a number of other improvements, performance optimizations and bugfixes, see change logs for more information.

50% 축소해서 본 tightVNC의 remote화면

간추린요약 - tightVNC가 나은 점
1. tightVNC가 realVNC에 비해서 접속속도 및 화면갱신속도가 상당히 빠르다
    (테스트 조건 realVNC 서버/윈도우 realVNC 서버)
2. 화면 scaling을 지원한다
3. 파일 전송을 지원한다고 한다(VNC free edition 대비, 테스트 해보지 못했음)

리눅스 서버로의 접속은 실질적인 화면갱신속도 차이는 거의 없지만, tightVNC 쪽이 접속속도가 빨랐다.

[tightVNC : http://www.tightvnc.com/]
[realVNC : http://realvnc.com/]

'프로그램 사용 > VNC' 카테고리의 다른 글

tsclient에 VNC 추가하기  (0) 2011.12.31
UVNC - Ultra VNC  (2) 2010.11.26
우분투 9.10 원격설정하기(vino server on Ubuntu 9.10)  (0) 2009.12.30
Fedora Core 6에 VNC 설치하기  (0) 2009.07.22
tightVNC 서버사용기  (0) 2009.04.02
Posted by 구차니
개소리 왈왈2009. 3. 13. 14:17
Vicon English-Korean Dictionary

 
mentor  [men·tor || 'mentɔr /'mentɔː]
n. 정신적 지도자, 조언자, 충고자, 현명한 사람; 지도하거나 가르치는 사람
WordNet English Dictionary

 
mentor  
n.  a wise and trusted guide and advisor; wise man
v.  serve as a teacher or trusted counselor
The famous professor mentored him during his years in graduate school
She is a fine lecturer but she doesn't like mentoring
Essential English Dictionary

 
mentor  ['mentɔr /'mentɔː]
noun  a wise and trusted guide and advisor
verb  serve as a teacher or trusted counselor

현재 사용중인 Lingoes의 mentor 단어에 대한 사전적 정의이다.
연결글 : 2009/03/06 - [프로그램 사용] - 무료 영영사전 / 영어사전

예전에도 글을 올렸었지만, 내가 가지는 영향력(비록 미미하지만)이 이제는 두렵다는 생각이든다.
연결글 : 2009/03/02 - [개소리 왈왈/사진과 수다] - 내가 상담을 해줘도 되는건가?

문득 심퉁이 난 것 같지만,
학과 게시판에 선배가(우리 학번은 절대 친하지도 않고 도움도 받지 못했던) 회사의 이름을 걸고 멘토를 한다는데,
과연 이 선배가 타인에게 영향력을 미칠 수 있는 타당함이 있는지,
평소에는 한번도 후배의 고민을 들을려고 노력 하는 모습을 보이지도 않았는데 왜 그런걸 하는지? 라는 생각이 들었다.

어쩌면 지금의 멘토는 정말 정신적 지도자가 아닌
단순하게 지도하거나 가르치는 사람(취업적인 면, 혹은 제 2의 사회화를 강요하는)을 뜻하는건 아닐까..

아니면 단순히 내가 삐뚜러진 것일까..
Posted by 구차니