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();
// ���Լ��� ���� ����Ÿ�� ��ġ�� �˾� ���� �Լ� �Դϴ�.
// ����Ÿ�� ������ �κ��� üũ�� �� �����ϰ� ���Ǿ�
// ������?