화요일, 7월 22, 2008

.dat - 초기 directory 구조 설정

object store 영역의 directory layout를 설정하고, ROM file을 그 diretory layout 상 특정한 곳으로 copy한다. 여기서 ROM file이란 OS image에 포함되는 file을 이야기 하는데 이 file은 object store의 \Windows directory에 위치하게 된다. 이런 file을 \Windows가 아닌 다른 곳에 위치하게 하려면 이 .dat file을 사용해야 한다. 하지만 이것은 어디까지나 \Windows 아래에 있는 file을 다른 위치로 copy만을 할 뿐이지 move하지는 않는다. (이 말은 큰 size의 file에 대해서 적용한다면 object store 영역을 소모시킨다는 이야기로 받아들여 지다.)

root:-Directory("name")
root directory 아래에 name이라는 directory를 만든다.

root:-Permdir("name")
root directory 아래에 name이라는 permanent directory (RemoveDirectory API로 remove될 수 없다)를 만든다.

Directory("\path"):-Directory("name")
\path 위치 아래에 name이라는 subdirectory를 만든다. name 아래에 name2라는 subdirectory를 또 만드려면 이 directive다음에 다음을 입력한다.
Directory("\path\name"):-Directory("name2")
subdirectory의 subdirectory는 계속 위와 같은 방법으로 하면 된다.

Directory("\path"):-File("targetfile", "sourcefile")
sourcefile는 ROM file의 path와 이름을 나타내고, 이 file을 targetfile이라는 이름을 바꿔서 \path 아래로 copy한다.

수요일, 7월 02, 2008

WINCE에서 2개가 넘는 multi channel speaker 출력이 가능할까?

"WINCE에서 2개가 넘는 multi channel speaker가 있을때 각 channel로 서로다른 sound의 동시 출력이 가능할까?"라는 문제 관련하여 나름대로 조사해 보고 내가 알게 된 부분과 궁금한 점을 naver weeg와 wecom에 올렸고, 도움이 되는 답변도 얻었다.

질문
흔히 mobile device에서 사용하는 AC97 codec은 aclink data의 slot3, 4 data를 DA변환하여 LOUT_R, LOUT_L 출력할 수 있도록 해 줍니다. DAC가 보통 2개, 또는 wolfson wm9712의 경우는 auxDAC를 가지고 있어 3개의 DAC가 있고, 이 auxDAC는 costant 값을 설정하여 BEEP소리가 나게 하던가 aclink data의 5에서 11사이의 slot을 할당해 줄 수 있습니다. 그럼 그 slot으로 오는 aclink data가 auxDAC를 거치겠지요.

의문점은 windows ce환경에서
waveform audio의 waveout 함수들로 audio 출력할때 WAVEFORMATEX의 nChannels를 3으로 설정할 수 있느냐? 그렇게 해서 auxDAC를 포함한 3 channel의 speaker에서 서로 다른 소리가 나게 할 수 있는 것인가? 입니다.

PC에서는 multi channel speaker를 연결하도록 여러개의 speaker jack들이 있고 해서, 이런환경에 많이 사용하는 C-media의 AC97 codec을 찾아 봤습니다. 4ch, 혹은 6ch를 지원하는 것들이 있는데...
4ch짜리 AC97 codec은 4개의 DAC를 가지고 있고 실제 LOUT_R, LOUT_L외에 REAR_OUT_R, REAR_OUT_L 출력을 가지고 있습니다. AC97 표준에 따라 아마도 이 rear left, right는 AClink의 slot7, 8의 data를 받을 겁니다. (제품명이 CMI9738)
6ch짜리 AC97 codec은 6개의 DAC를 가지고 있고 실제 LOUT_R, LOUT_L외에 REAR_OUT_R, REAR_OUT_L, CENTER_OUT, LFE_OUT 출력을 가지고 있습니다. AC97 표준에 따라 아마도 이 rear left, right, center, lfe는 AClink의 slot6, 7, 8, 9의 data를 받을 겁니다. (제품명이 CMI9761)

그렇다면 wince환경에서 이 2 channel 초과의 audio를 동시에 여러개의 speaker로 따로따로 다른 소리를 출력할 수 있는 방법이 있습니까?
WAVEFORMATEX의 nChannels를 4나 6으로 설정하면 될까요?
아니면 다른 어떤 방법이 있나요?
wince에서는 안된다면 PC에서는 이렇게 2channel이 넘는 multi channel speaker로 서로 다른 소리가 나가게 하기 위해서 어떻게 하나요?


답글 (wecom)
http://msdn.microsoft.com/en-us/library/aa910386.aspx 에서 볼 수 있듯이 윈도우CE에서 지원하는(혹은 생성할 수 있는 오디오 형식이) 모노나 스테레오 둘중에 하나이기 때문에 2채널 이상을 설정하셔도 의미가 없을 것입니다.제가 아는 한 그렇습니다.참고하시기 바랍니다.

Microsoft Windows Embedded MVP

Youngho Ra(ratharn@naver.com)
www.embeddedce.com

실제 msdn 해당 website에 가면 WAVEOUTCAPS 라는 waveform audio output device의 capability를 정의하는 구조체의 설명이 있는데, 이 구조체의 member인 dwChannels은 1 과 2 만 지원된다고 명시돼있다. 또 dwFormats에서는 지원되는 WAV format을 지정할 수 있는데 이것도 여러가지 sample rate에 mono, stereo만 지원된다고 나와 있다.

답글 (weeg)
WAVEFORMATEXTENSIBLE에 대해서 찾아 보시면 될 듯 합니다.

이 내용을 MSDN에서 확인해 보니
PC환경에서는 WAVEFORMATEXTENSIBLE은 일반적인 PCM format wav가 아닌 경우 추가 정보를 지정하기 위해 사용하는 구조체로, Multichannel & high resolution wav format을 정의할 수 있고 이것을 이용해서 18개나 되는 channel의 speaker까지 동시 출력을 할 수 있도록 되어 있다. 이 WAVEFORMATEXTENSIBLE을 사용해서 정의되는 WAV format은 Directsound에서 사용된다.
그러나 wince 환경에서는 DirectSound를 지원하지 않는다.
Wince의 모든 source file을 search해 본 결과 이 구조체가 정의는 되어 있으나 전혀 사용되지 않는다. 따라서 wince에서는 안 되는 기능이라고 생각된다.

결론적으로 원하는 기능을 위해서는 우선 multi-channel을 지원하는 고급 AC97 codec를 사용하고 window의 waveform audio 함수를 사용하지 않고, 독자적인 driver와 독자적인 application interface를 새로 구현하는 수 밖에 없어 보인다.