Research Topics/iPhone SDK2009. 2. 16. 01:44
지난번 예제에서 터치시에 간단한 짧은 사운드를 플레이하는 예제입니다.

일단, 가장먼저 사운드를 사용하기 위하여 AudioToolbox 라는 프레임웍을 프로젝트에 추가해주어야 합니다.







그리고 프로젝트에 짤막한 사운드파일 (wav나 mp3 등)을 추가해 줍니다. 저는 cling_1.wav 라는 파일을 추가했습니다.



기본적으로, 사운드를 사용하는 예제들은 같은 방법을 사용하기에, 애플의 iPhone Dev Center 에서 제공하는
sample code 중 사운드를 사용하는 것을 하나 골라잡아 다운로드를 합니다.

저는 GLPaint 라는 그림그리기 app 예제를 받았습니다.
받은 dmg 파일을 를 열어 프로젝트를 열면 다음과 같이 SoundEffect.h 와 SoundEffect.m 파일이 있습니다. 
두 파일을 그대로 마우스로 드래그하여 우리가 만들었던 Hello sadi 프로젝트에 집어넣습니다.
이때 뜨는 창에서는 Copy ... 를 체크하여 아예 파일을 우리의 프로젝트 폴더로 실제로 복사해 오도록 해줍니다.



SoundEffect.h 에는 다음과 같은 내용이 보입니다.
SoundEffect 라는 class 를 정의해 놓은 부분입니다.

initWithContentsOfFile 이라는 함수와 play 라는 함수가 보이네요. 기능은 이름만 봐도 알 수 있겠죠?
사운드 파일과 함께 초기화 하고, 사운드를 플레이를 해주는 함수 인것을 예상할 수 있습니다.
#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioServices.h>

@interface SoundEffect : NSObject {
    SystemSoundID _soundID;
}

+ (id)soundEffectWithContentsOfFile:(NSString *)aPath;
- (id)initWithContentsOfFile:(NSString *)path;
- (void)play;

@end

SoundEffect.m 에는 위의 내용들이 구현이 되어있습니다만, 굳이 자세히 알 필요는 없습니다.
우리는 이를 활용해서 play 만 하면 되니까요.

그럼, 우리가 만들었던 MainView의 헤더인 MainView.h 로 가서 다음과같이 사운드 부분을 추가해 줍니다.
위에서 가져온 SoundEffect 라는 클래스의 인스턴스변수를 추가해 주어 MainView 에서 사용할 예정입니다.
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "SoundEffect.h"


@interface MainView : UIView {
    IBOutlet UIProgressView *alphaProgress;
    IBOutlet UISlider *alphaSlider;
    IBOutlet UILabel *alphaText;
    IBOutlet UIImageView *imageView;
    IBOutlet UIButton *button1;
    IBOutlet UIButton *button2;
    IBOutlet UIButton *button3;
    IBOutlet UIBarButtonItem *playButton;
   
    SoundEffect *soundEffect;
}
- (IBAction)changeAlpha;
- (IBAction)changeAlphaButton1;
- (IBAction)changeAlphaButton2;
- (IBAction)changeAlphaButton3;
@end

구현부분인 MainView.m 에서는 다음과 같이 추가를 합니다.
awakeFromNib 은 앞서 예제에서 사용했던 Interface Builder 의 파일인 .xib
(과거에는 .nib이었기에 주로 nib이라고아직도 부릅니다) 에서 불리는 함수 입니다.
다음과같은 코드로 사운드 파일을 로드할 수 있습니다. (이경우는 cling_1.wav 파일 입니다)
-(void)awakeFromNib {
    NSBundle *mainBundle = [NSBundle mainBundle];
    soundEffect =
            [[SoundEffect alloc] initWithContentsOfFile:[mainBundle pathForResource:@"cling_1" ofType:@"wav"]];
}


이제 사운드 로드과정이 완료되었으므로, 원하는 부분에서 play 만 해주면 됩니다.
play는 아주 간단히 다음코드 한줄로 끝입니다.
[soundEffect play];

저는 터치가 되었을때 소리가 나도록 touchesBegan 에 넣었습니다.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [soundEffect play];
}

이제, 손가락으로 화면을 터치할때마다 cling_1.wav 사운드가 들리게 됩니다.

Posted by 알 수 없는 사용자