OpenSL ES Spec 리뷰

Members/TK | 2010.12.31 18:10
Posted by 비회원

안녕하십니까. 프로그래머 TK 입니다. 이번 포스팅은 OpenSL ES 의 Spec 리뷰, 주요기능, 현재 적용사항, 적용가능 분야와 시스템 구성 그리고 게임분야에서의 활용 가능성에 대한 것 입니다.

 

OpenSL ES 무엇인가?

 OpenSL ES Open Sound Library for Embedded System의 약자로 OpenGL 로 유명한 Khronos Group에서 
  재정한 embedded system(핸드폰, 포터블 게임기 등)을 위한 cross
platform audio API입니다.

 

OpenSL ES의 로고, 출처 : OpenSL ES 홈페이지

 

주요기능은 무엇인가?

 Spec에 의하면 OpenSL ES의 주요 기능은 아래와 같습니다.

 

l  Audio file 재생 및 녹음 기능

l  3D Audio를 포함한 audio effect 기능

l  MIDI 파일 재생 기능

 

현재 적용사항

  Android SDK v2.3에 추가되었습니다.  세부정보는 아래의 링크를 확인 하시기 바랍니다.

  http://developer.android.com/sdk/android-2.3-highlights.html    

 

어디에 사용할 수 있는가?

  Spec에서는 “Profile”이라는 이름으로 활용 가능한 분야(market segment)를 설명하고 있습니다. 세부적인
   분야와 용도는 아래와 같습니다.

 

  Phone : 일반적인 핸드폰을 말하며, 적용 가능한 용도는 ringtone alert tone playback, voice memo
             
등이 있습니다.

  Music : 음악 재생기능이 중심인 모바일 기기(mp3 player)를 말하며, 다양한 오디오 파일 포멧 지원 및
              오디오 파일(로컬) 재생 기능 지원이 주된 용도입니다. , 소위
스마트 폰에 있는 music player
             
의 경우 이 분야에 해당하지 않습니다.

  Game : 게임 기기를 위한 프로파일로, advanced MIDI, 3D audio, audio effect등 모바일 플렛폼에서 게임
              오디오 구현을 위한 다양한 기능들을 제공합니다.

 

OpenSL ES를 적용 가능 한 분야(market segment), 출처 : OpenSL ES 홈페이지

 

 

 각 프로파일에서 지원하는 세부적인 기능은 아래의 표를 참고 하시기 바랍니다.

 

API (Profile) Feature

Phone

Music

Game

PLAYBACK AND PROCESSING CONTROLS

Play multiple sounds at a given time

Y

Y

Y

Playback of mono and stereo sounds

Y

Y

Y

Basic playback controls

Y

Y

Y

End to end looping

Y

Y

Y

Segment looping

 

 

Y

Query and set the playback position

Y

Y

Y

Position-related callbacks and notifications

Y

Y

Y

Sound prioritization

Y

Y

Y

Route audio to multiple simultaneous outputs

Y

 

 

Volume control

Y

Y

Y

Audio balance and pan control

 

Y

Y

Metadata retrieval

 

Y

Y

Modify playback pitch and rate        

 

 

Y

Playback of sounds in secondary storage

Y

Y

Y

Buffers & buffer queues                       

 

 

Y

CAPABILITY QUERIES

Query capabilities of the implementation

Y

Y

Y

Enumerate audio I/O devices

Y

Y

Y

Query audio I/O device capabilities

Y

Y

Y

EFFECTS

Stereo widening

 

Y

Y

Virtualization

 

Y

Y

Reverberation                      

 

Y

Y

Equalization

 

Y

Y

Effect send control                         

 

Y

Y

MIDI

Support for: SP-MIDI, Mobile DLS, Mobile XMF

Y

 

Y

MIDI messages

Y

 

Y

MIDI tempo

Y

 

Y

MIDI buffer queues

Y

 

Y

Adjustable MIDI tick length

Y

 

Y

JSR-135 tone control

Y

 

Y

MIDI track and channel mute/solo

 

 

Y

3D AUDIO

Positional 3D audio

 

 

Y

Sound cones

 

 

Y

Multiple distance models                      

 

 

Y

Source and listener velocity

 

 

Y

Source and listener orientation

 

 

Y

3D sound grouping

 

 

Y

Simultaneous commit of multiple 3D controls

 

 

Y

OpenSL ES의 각 Profile별 기능 지원 일람표, 출처 : OpenSL ES Spec V1.0.1 p 10

 

 그리고 OpenGL과 유사하게 필요에 따라 각 “Extension”을 통하여 추가기능을 정의 할 수

있습니다.

 

Optional Feature

Reason for Optionality

Audio recording from a microphone or on-device, line-in jack

Implies hardware dependency (presence of a microphone or line-in jack)

Haptics – support non-audio output devices such as LEDs and vibrator(s)

Implies hardware dependency (presence of LEDs and vibrators)

Macroscopic behavior in 3D audio

Cutting edge feature for mobile devices that will be supported by advanced implementations

추가기능(optional feature) 및 그 이유, 출처 : OpenSL ES Spec V1.0.1 p12

 

시스템 구성

 시스템은 Object Interface로 구성되어 있습니다. Object는 특정한 기능을 수행 하기 위한 리소스의
  집합을 말하는 것으로 Object는 그 기능에 다른 종류(type)가 있습니다. 
Objecttype Object가 생성 시
  에 결정 됩니다.

 

 Interface는 기능을 수행하기 위하여 외부에 제공되는 통로를 말하는 것으로 interface통하여 Object
  지원하는 기능(method)에 접근 할 수 있습니다. Object와 마찬가지로
Interface역시 type(종류)이 있습니다.

 

 Object는 생성과 소멸에 따른 lifetime을 가지고 있으며 각각의 오브젝트는 고유한 상태(state)를 가지는데
  Objec
의 상태는 아래의 state diagram을 참고하기 바랍니다.

 

Object state diagram, 출처 : OpenSL ES Spec V1.0.1 p 14

 

  Object와 그 object를 사용 하기 위해서 외부에 제공하는 interface등 전반적으로 COM(Component Object
  Model)
에서의 Object/Interface 모델과 유사한 개념입니다.
API자체는 C로 구성되어 있지만 확장성 및 편의성
  을 위하여 Object-Oriented의 개념을
도입한 것으로 보입니다.


  Object
의 종류

 OpenSL ES에서 제공하는 주요 오브젝트 및 그 설명은 다음과 같습니다.

 

l  EngineObject : 전체 시스템의 시작점(entry point)역할을 하는 object  

l  Media Object : 미디어를 처리 하기 위한 object (AudioPlayer )

l  DataSource/sink Object : 입력 혹은 출력을 위한 object(오디오파일, /출력장치)

l  Metadata Extractor Object : 미디어가 가지고 있는 meta data를 추출하기 위한 object

l  Audio output mix object : 오디오 출력을 위한 object

 

OpenSL ES 3D Audio

 OpenSL ES에서는 게임에서 주로 사용되는 3D audio 관련기능(sound source 3차원의 임의의 공간상에
   위치시 키거나, 공간에서 움직이거나 하는 등)을 제공 합니다.

 

l  3차원의 소리를 표현하기 위해 일반적으로 사용되는 HRTF(Head Related Transfer Function)
고리즘을 사용합니다.(각 플렛폼 별로 구현되는 방법은 다를 수 있습니다.)

l  사운드 sourcedistance model을 변경한다든지, source별로 적용 되는 doppler

효과의 양의 조절한다던가 등의 조작이 가능합니다.

 

 OpenSL ES에서는 3D sound source 의 속성(위치…)을 변경할 수 있는 2가지의 방법을 제공하는데 하나는
   source의 속성을 직접적으로 변경하는 것이며 다른 하나는 여러 개의
사운드 소스들을 group으로 묶은 다음
   그 group의 속성을 변경하는 것입니다.

 

OpenSL ES Object relationship diagram, 출처 : OpenSL ES Spec V1.0.1 p37

 

 Player(sound source), 3D group, engine listener의 관계는 위의 UML diagram 확인하기 바랍니다.
  Engine
은 필요에 따라 여러 개의 player/listener/group을 생성 할 수 있으며, 3D
group에는 player
  (sound source)
를 추가 할 수 있습니다.

 

OpenSL ES 와 게임

  PC환경이 아닌 이상 XAudioFMOD등에서 지원하는 다양한 기능들을 기대하기는 어렵지만 모바일 기기
   혹은 embedded system에서 게임오디오 엔진으로 사용할 수 있는 최소한의 기능을 가지고 있는 것으로
   보입니다.

    OpenSL ES는 소프트웨어/하드웨어를 통하여 구현이 가능하지만 적용되는 플렛 폼에 따라서 소위 "가속"
   이라고 이야기하는 오디오 하드웨어를 사용할수 있느냐 없느냐에 따라서 CPU점유율 및 성능은 달라 질 수 
   있다는 변수가 있습니다.

 

 예를 들어 3개의 sound source(자동차 엔진소리, 사이엔 소리 와 MIDI로 된 음악)가 listener 근처에서 listener
   를 향해 특정한 속도로 움직일 때 나타나는 doppler효과를 구현
하고자 한다면 아래와 같이 구성 할 수 있을
   것 입니다.

 

OpenSL ES Game profile use case, 출처 : OpenSL ES Spec V1.0.1 App. C4 Game Profile

 

참고자료

 OpenSL ES 홈페이지 : http://www.khronos.org/opensles/

 OpenSL ES Spec V1.0.1 : http://www.khronos.org/registry/sles/specs/OpenSL_ES_Specification_1.0.1.pdf

 

'Members > TK' 카테고리의 다른 글

Stereo Pan Law  (1) 2012.09.07
2개의 유사한 wav파일의 차이점 비교  (0) 2011.05.02
State Variable Filter  (0) 2011.01.03
OpenSL ES Spec 리뷰  (0) 2010.12.31
Weighting Filter 와 dBA  (1) 2010.12.17
게임 오디오 프로그래머가 하는 일  (0) 2010.11.30
블로그 이미지

Corti

카테고리

분류 전체보기 (90)
Core Post (52)
Members (38)