반응형

초보자에서 이제 중수로 올라오며 갖가지 개인 프로잭트를 작성하다 곤경에 빠지게 되는 장소중 한 군데이다.

1
2
3
4
5
6
7
8
9
10
 
#include<MMSystem.h> // 배경음악 때문에 사용
 
 
 #pragma comment(lib,"Winmm.lib"// 배경음악
 
sndPlaySoundA("파일경로",SND_ASYNC | SND_NODEFAULT | SND_LOOP); 
 
 
 
Crocus

 

 

처음 시작하면 알게되는 흔한 bgm재생 라이브러리와 함수다.

 

이 함수는 wav파일만 지원하며, wav파일을 bgm으로 지정시 상당한 용량의 압박으로 인해 업로드하는데도 부담되고

 

프로그래밍에 걸림돌이 될 것이다.

 

그리고 이 함수를 이용하게되면, 배경음(bgm)과 효과음을 동시에 사용할 수 없다는 것이 단점중 단점이다.

 

그리하여 동시구현을 하는 법에 대하여 생각해 보았다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<stdio.h>
#include<Windows.h>
 
 
#pragma comment(lib, "winmm.lib")
#include "Mmsystem.h"
#include "Digitalv.h"
MCI_OPEN_PARMS m_mciOpenParms;
MCI_PLAY_PARMS m_mciPlayParms;
DWORD m_dwDeviceID;
MCI_OPEN_PARMS mciOpen;
MCI_PLAY_PARMS mciPlay;
 
int dwID;
 
 
int main()
{
 
 mciOpen.lpstrElementName = "mini_main.mp3"// 파일 경로 입력
 mciOpen.lpstrDeviceType = "mpegvideo";
 
 mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT|MCI_OPEN_TYPE,
  (DWORD)(LPVOID)&mciOpen);
 
 dwID = mciOpen.wDeviceID;
 
  mciSendCommand(dwID, MCI_PLAY, MCI_DGV_PLAY_REPEAT, // play & repeat
     (DWORD)(LPVOID)&m_mciPlayParms);
 
 
/* mciSendCommandW(dwID, MCI_PAUSE, MCI_NOTIFY,
                (DWORD)(LPVOID)&m_mciPlayParms);     */// Pause
                                                
/* mciSendCommandW(dwID, MCI_RESUME, 0, NULL);       */// resume
 
/* mciSendCommandW(dwID, MCI_CLOSE, 0, NULL);        */// stop
 
}
 
Crocus

 

*** 이때 만약 아래 그림과 같이 빨간 밑줄이 뜨면서 진행이 되지 않는 경우도 있을 것이다. ***

 

 

***다음과 같이 해결하자. 상단 메뉴에 프로젝트 -> (가장 아래있는) 속성 -> 구성 속성 -> 문자 집합에서 ( 설정 안 함 ) 으로 설정한다. 그러면 해결될 것이다. ***

 

 

mci함수라는 녀석인데, 이 함수는 mp3를 지원한다.

 

여기서 간과하고 지나가는 사람들이 엄청 많으리라 예상한다. 왠만한 중수들은 mci에 대해서 찾아보곤 했을것이다. (음악구현을 위해)

 

그리하여 mp3지원하는 mci를 잘 쓰게 되고 하지만 두가지 음을 동시에 내는 법은 많이들 생각 못해 봤을 것이다.

 

********* mci 함수와 sndPlaySoundA 함수를 동시에 이용하라. *********

 

bgm은 작은 용량을 이용하도록 mci를 이용하여 연주시키고

 

효과음은 sndPlaySoundA 를 이용하여 연주시키면 엄청난 효과를 얻게된다.(효과음 자체가 용량이 작다.)

 

이 내용들 또한 두가지 소리를 구현하기에 고민이 많던 분들에게 도움이 될 것이다.

 

새로운 함수를 개발하는것이 아닌 기존의 함수들을 어떻게 이용하고 응용하는지가 중요하다는 것을 보여주고 싶은 바이다.

 

 

 

 

반응형