ios objective c 코어오디오 다루기 1
오디오 파일을 불러와서 속성 정보를 출력하는 간단한 로직이다.
코어오디오 api를 사용하기 위해서 AudioToolbox 라이브러리를 추가해줘야한다.
(왼쪽 네비게이션에서 프로젝트 아이콘 클릭 -> Build Phasses -> Link Binary With Libraries -> + 버튼 클릭 -> 찾아서 추가해줌)
//
// main.m
// 1
//
// Created by service on 2018. 11. 6..
// Copyright © 2018년 service. All rights reserved.
//
/*
파일을 열고,
메타데이터에 대한 버퍼 할당
메타데이터를 갖는다.
*/
#import <Foundation/Foundation.h>
#import <AudioToolbox/AudioToolbox.h>
//파일경로 : "~/Music/iTunes/iTunes Media/Music/Unknown Artist/Unknown Album/test_cbr.mp3"
//editschema 를열고 위의 파일 경로를 인자로 넣어준다.
//첫번째 문자열 : 실행파일의 이름, 두번째 문자열: 오디오 파일의 경로
int main(int argc, const char * argv[]) {
@autoreleasepool {
//오디오 파일의 경로 확인
if (argc < 2) {
printf("usage: CAMetadata /full/path/to/audiofile\n");
return -1;
}
//경로가 있다면 여러가지 애플의 프레임워크에서 사용하는 nsstring 으로 변환.홈디렉토리의 단축형인 틸드 문자를 ~/music/ 같이 수용
NSString *audioFilePath = [[NSString stringWithUTF8String:argv[1]] stringByExpandingTildeInPath];
//오디오 파일 api는 파일 경로의 url 표현으로 동작한다.
NSURL *audioURL = [NSURL fileURLWithPath:audioFilePath];
NSLog(@"audioURL - 경로 : %@" , audioURL);
//코어 오디오는 오디오 파일 객체를 참조하는 audioFileID형식을 사용하기때문에 지역변수 선언
AudioFileID audioFile;
//코어 오디오 함수는 ossstatus형인 반환 값을 통해서 성공,실패전달. noErr(0값)을 제외한 다른 상태는 오류
OSStatus theErr = noErr;
//첫번째 코어오디오 함수: CFURLRef , 파일권한 플래그, 파일형식 힌트, AudioFileID의 포인터를 인자로 받는다.
theErr = AudioFileOpenURL((__bridge CFURLRef)audioURL, kAudioFileReadPermission, 0, &audioFile);
NSLog(@"theErr - 값 : %d" , (int)theErr); //0
//오류나면 종료
assert(theErr == noErr);
//파일의 메타데이터를 얻기위해서 kAudioFilePropertyInfoDictionary호출 할것이다.
//사전에 반환되는 메타데이터를 위한 메모리를 할당할 지역변수 선언
UInt32 dictionarySize = 0;
//필요한 크기를 얻기위해 audiofileid, 속성, 결과를 받을 포인터, 속성이 쓰기 가능한 여부를 나타내는 플래그 변수를 전달.
theErr = AudioFileGetPropertyInfo(audioFile, kAudioFilePropertyInfoDictionary, &dictionarySize, 0);
assert(theErr == noErr);
CFDictionaryRef dictionary;
//속성을 요청할 준비가 됨.
theErr = AudioFileGetProperty(audioFile, kAudioFilePropertyInfoDictionary, &dictionarySize, &dictionary);
assert(theErr == noErr);
NSLog(@"dictionary 값출력 : %@", dictionary);
CFRelease(dictionary);
theErr = AudioFileClose(audioFile);
assert(theErr == noErr);
/*
출력내용:
2018-11-06 10:35:46.640373+0900 1[703:115853]
audioURL - 경로 : file:///Users/service/Music/iTunes/iTunes%20Media/Music/Unknown%20Artist/Unknown%20Album/test_cbr.mp3
2018-11-06 10:35:46.641179+0900 1[703:115853]
dictionary 값출력 : {
"approximate duration in seconds" = "52.86";
}
*/
}
return 0;
}
'ios 뽀개기 > objective-c' 카테고리의 다른 글
ios objective c 코어오디오 다루기 3 - AudioStreamBasicDescription 데이터 구조체 (0) | 2018.11.07 |
---|---|
ios objective c 코어오디오 다루기 2 - AudioStreamBasicDescription으로 다양한 주파수의 음원만들기 (0) | 2018.11.06 |
objective c session post get방식 정리! (1) | 2018.10.29 |
Ios 그림파일을 텍스트로 바꾸기 (1) | 2018.10.25 |
ios 루팅방지 체크 소스 (0) | 2018.10.24 |
댓글