CLOUD8

�����

 

 

��ũ���Ͷ�?

directX�� �Ұ�

 

 

direct����,���������,������

���̷�Ʈ���ۻ��� ���ݿ� ����

 

 

���� ������ �ø���,��Ʈ�ʺ���

���̷�Ʈ �ķ�Ʈ ����

 

 

Lock,unlock,Blt,BltFast

Direct Sound

 

 

 

 

 

 

1. Direct Sound

���� 7��° ���̷�Ʈ ���带 ó���� �� �ִ� �ð��� �Ǿ�����~

���̷�Ʈ ����� ���� ������ ����� DMA������ ����ؼ�
��Ƽ������� ó���ߴ� ������ ����ϰ� �ֽ��ϴ�.(�׷���??)
�׷��� ���� �޸� �浹�������� ���� ���� ���� ���� ���̺�
������ ���� ����°��� �����̾��� ������ �־���?
�׷��� ���������� Ư¡�� �ϵ��� �����ϴµ� �־� �ð�����
���ڸ� ���ʿ䰡 ������? (^^; )

���̷�Ʈ ����� ������ ������ ���̺귯���� ��� �Լ�����
�߰��� ��� ���ο� ���̺귯���� ������ ������ ���α׷���
����� ȣȯ�� �ȵǰų� ������ ǥ���� ���� ����ڿ��߽��ϴ�.
�׷��� Component Object Model(COM)�� �����ϹǷμ� �̷���
������ ������ ���� �ʽ��ϴ�.

���̷�Ʈ ����� IDirectSound�� IDirectSoundBuffer�� ����
�Ǿ� �ֽ��ϴ�.  ï¿½ï¿½ï¿½Ì·ï¿½Æ® ���۴� 1�� ���� ����(Primary
Sound)�� 2�� ���� ����(Secondary Sound Buffer)�� ������
���ϴ�. 1�� ���� ���۴� 2������ ������ ���۸� �ֽ��Ͽ�
����ϸ� 2�� ���� ���۴� ���� ���ӿ� ���Ǵ� ���� �ϳ���
���常�� ��� �ֽ��ϴ�. ���ذ� �Ǵ��� �𸣰ڱ���?
2�� ���� ���۴� ���� ������ �޸𸮺��� ū �޸� ������
����� �� ������ ���� ī�� ���� �޸𸮺��� ū �޸���
������ ����� ��� �ý��� �޸𸮸� ����ϰ� �ȴ�. ���� 2��
���� ������ ��� ������� 1�� ���� ���۷� ������ ����
�ڵ����� �ͽ̵Ǿ� �������� �˴ϴ�.

��ĵ��� ǥ���ϸ�

+--------------------------------------------------+
|   +--------------------+                         |
|   |  1�� ���� ����   |                         |
|   +--------------------+                         |
|                           +--------------------+ |
|                           |  2�� ���� ����   | |
|                 +--------------------+ |
|                                                  |
|                           +--------------------+ |
|                           |  2�� ���� ����   | |
|                           +--------------------+ |
|                                   .....          |
|                           +--------------------+ |
|                           |  2�� ���� ����   | |
|                           +--------------------+ |
+-----------------------------------------------

---+
  <�׸� 7-1>

�׸� �������� ���� �ϱ� ����ٱ���? �Ѹ���� �ϳ���
1�� ���� ���ۿ� �������� 2�� ���� ���۰� ���簡
�����ϴٴ� ���� ���� �ִ� ��ĵ� �Դϴ�.

���̷�Ʈ ����� ������ ���� �������� �ϳ��� ����
�� ��� �ϰ� �˴ϴ�.

  1) ���̷�Ʈ ���� ��ü ����
  2) �ʿ��� ������ 2�� ���� ����
  3) ������ ���ۿ� ���� ����Ÿ�� ����
     (�̶� lock�� Unlock�� ����մϴ�.)
  4) 2�� ���� ���ۿ� �ִ� ������� ���

���� ������ ������ ������ ����? ���� ���� ���ݱ���
����� �̹��� ��°��� ����ϴٰ� ���� �ֳ׿�?

�׷� ���尡 ����ϱ� ������ ��ĵ��� ������ ����!


+----------+     +--+
| 2�� ���� | --> |  |
+----------+     |��|                +--------------+
  .......        |��|   +--------+   |              |
+----------+     |��|-->|1�� ����| ->|����Ŀ��..¹��|
| 2�� ���� | --> |  |   +--------+   |              |
+----------+     |��|                +--------------+
+----------+     |��|
| 2�� ���� | --> |  |
+----------+     +--+


���ݱ��� �˾ƺ� ������ �䵥�� ���� ���� ���� �ڵ���
�غ��ô�.

 


1. ���̷�Ʈ ���� ����

LPDIRECTSOUND lpDs;
HWND          hwnd;  
HRESULT     dsrval;

dsrval = DirectSoundCreate(NULL, &lpDs, NULL);
if(dsrval != DS_OK)
       return FALSE; // ���̷�Ʈ ���� ������ ���н�

lpDs->SetCooperativeLevel(hwnd, DDSSCL_NORMAL);

��������� ���� ��ü�� �����ϴ� �ڵ忴���ϴ�.
�Լ��� �տ��� ��� ���̷�Ʈ �Լ� ������ �ٸ����� ����
�Ƿ� �Լ������� �����ϰڽ��ϴ�.

��~ �̹����� 2�� ���� ���۸� ������ ���ô�. �տ���
��Ȳ�ϰ� ������ �س��� 2�� ���۰� ��ô �߿��ϰ� ��
���� �������� ������ ���� ���� ���� �ƴϳ�? �Ͻ� ��
�ϴ�.

 


2. �ʿ��� ����Ÿ�� 2�� ���� ����

LPDIRECTSOUND        lpDs;
LPPCMWAVEFORMAT     pcmwf;
LPDIRECTSOUNDBUFFER lpDsb;
DSBUFFERDESC   dsbd = {0};


dsbd.dwSize  = sizeof(dsbd);
dsbd.dwFlags = DSBCAPS_CTRLDEFAULT;
dsbd.dwBufferByte = 30000;
dsbd.lpwfxFormat = (LPWAVEFORMATEX)&pcmwf;

dsrval = lpDs->CreateSoundBuffer(&dsbd, lplpDsb, NULL);
if(dsrval != DS_OK)
          return FALSE; // �翬 ���� ���� ������?

��������� 2�� ���� ���۸� �����ϴ� �ڵ� �Դϴ�.
����ϱ�? �׸� ������� ����?  2�� ����� ��������
������ ���ϴ�. � �ɱ��?

�ٷ� Static Buffer�� String Buffer�� ������ ���ϴ�.
���� ª�� �Ҹ��� Static Buffer�� ��� ���� ������ �ݺ�
��� �ϱ� ���� ���Ǿ� ���ϴ�. �� �Ҹ��� String
Buffer�� ��� ���� �Ǹ� 2~3ȸ ���� ��� �ϱ� ���� ����
�����ϴ�.

�׷��ٸ� ���ݱ��� ���� 1)�� 2)�� �ش�� ���� ������ ��
���°� ���� ����Ÿ�� ������ ���ۿ� �����ϴ� �����˾�
���ô�.

 


3. ������ ���ۿ� ���� ����Ÿ�� ����

LPDIRECTSOUNDBUFFER lpDsb;
DWORD dwOffset = 0;
DWORD dwLength = 30000;

LPVOID lpvPtr;
DWORD  dwBytes;

dsrval = lpDsb->Lock(dwOffset, dwLength, &lpvPtr, &dwBytes,
                     NULL, NULL, 0);
if(dsrval != DS_OK)
           return FALSE;

// �̺κ��� ��°? ��� �κа� �������?
// ���� ���� ��� lock�� unlock�� ���� �ϼ���~

LPBYTE  lpbSoundData;// ������ ���� ����Ÿ

LPVOID lpvPtr;
DWORD dwBytes;

CopyMemory(lpvPtr, lpbSoundData, dwBytes);
dsrval = lpDsb->Unlock(lpvPtr, dwBytes, NULL, 0);
if(dsrval != DS_OK)
         return FALSE;

��~ ��������� �ϴ��� ������� ���带 ���̷�Ʈ ���ۿ�
���� ������ �Ǿ����ϴ�. ����ϱ�? ���ݱ��� ��� �͵���
��� ����������?

 

 

4. 2�� ���� ���ۿ� �ִ� ������� ���

LPDIRECTSOUNDBUFFER lpDsb;
lpDsb->Play(0, 0, DSBPLAY_LOOPING);

// ��Ÿ ���� ó����
.......

// ���߿� ���߰� ������...
lpDsb->Stop();

����ϴ� ���� �������� ������� ���ذ� �Ǽ̰���?
�Լ��� �׸� ����� �ʱ� ������ �������ٴ� �ڵ��� ����
���� �ϱⰡ ����� ���� �̴ϴ�.

�׷��ٰ� ���⼭ ���� ó���� ��������? �װ� �ƴ���!
�츮�� ������ �ϸ鼭 ��ġ ����� �����ʿ��� �ɾ����
������ �����ų�~ ���ʿ��� ���� ������ ����� ����
����� �Ҹ�~ �Ǵ� ���ָ��� �ٷ� ������ ���� ���� ����
���� ��ü �Ҹ��� �츮�� ��� ������ �Ұ��ΰ�?

�ٷ� �̷��� ������ ���� �����ϴ�. ���������� ���� �۰�
��ȴ� ũ�� �鸮�� ���ָ��� ������ ���� ���ϴ� ȿ����
���� �ֽ��ϴ�. �׸��� ������ ����Ŀ�� ũ�� �ߴٰ� ����
���� ����Ŀ�� �Ҹ��� ������ �ϸ� ��ġ �츮�� 3����
������ ��� ���� ������ �ϰ� �˴ϴ�.
�̷��� ȿ���� ��� ��³�? �װ��� ��������? (^^;)

�׷��� �̱��� ���� ���� �̹� �˰� �ִ� �е� ����װ�
���~ �̷� �� ����~  ï¿½Ï´ï¿½ �е� ���� �̴ϴ�.

�̷����� ���� ���̷�Ʈ ����� �̷��� �Լ��� �����մ�
��.

SetVolume(lpDS, DWORD, dwVolume);
// ��� �Լ��� ȣ���Ͽ� ���ϴ� �������� �Ҹ����� �ϴ�
// �Լ� �Դϴ�.

SetPan(lpDs, DWORDm dwPan);
// �¿��� ���� �뷱���� �����ϴ� ����� �ϴ� �Լ�

SetFrequency(lpDS, LPDWORD, lpdwFrequency))
// �Ҹ��� ��ġ�� �����մϴ�. dwFrequency ���� ����
// ���� ��ġ�� �����մϴ�. ���� �����ϱ� ���� ����
// ��ġ�� �˱� ���ؼ��� GetFrequency()�Լ��� ȣ��
// �ؼ� ���� ��� ���� �˴ϴ�.

SetCurrentPosition();
// ���Լ��� ���� ����Ÿ�� ��ġ�� �˾� ���� �Լ� �Դϴ�.
// ����Ÿ�� ������ �κ��� üũ�� �� �����ϰ� ���Ǿ�
// ������?

 


sqCLOUD20 sqCLOUD20