이번 목표
각 클래스가 처리하는 정보 및 처리하는 내용을 글로 간단하게 나타내고, 다음은 구현하는 것이 다음 목표이다.
클래스 구성
클래스 내부 흐름을 구성하면 다음과 같다.
Scene
1. Name을 생성자로 입력받는다.
2. UUID는 시스템상에서 겹칠 수 없는 시간 순서 UUID로 자동 발급받는다.
3. addTrack(), delTrack() 등 하위 관계인 Track을 관리할 수 있다.
Track
1. Name과 Type을 생성자로 입력받는다.Type은 Constant 방식에서 TRACKFLAG_AUDIO, TRACKFLAG_VOICE, TRACKFLAG_ANNOTATION 등으로 구성할 수 있다.
2. UUID는 시스템상에서 겹칠 수 없는 시간 순서 UUID로 자동 발급받는다.
3. addObj(), delObj() 등 Obj를 관리할 수 있는 메소드를 추가한다.
Obj
1. 기본 Obj 부모는 Name, StartTime, EndTime을 생성자로 입력을 받고, Text는 사용자 정의할 수 있다. 다만 EndTime은 생략할 수 있으며, 생략된 경우 버퍼의 크기에 맞춰서 자동 계산된 EndTime으로 생성될 수 있도록 해야 한다. 하지만 Obj 부모는 이를 담당하지 않고 자식 SoundObj가 이 처리를 담당한다. 기본 값은 약 1초 정도로 한다.
2. UUID는 시스템상에서 겹칠 수 없는 시간 순서 UUID로 자동 발급받는다.
SoundObj
1. SoundObj는 부모 Obj를 Override 하되 super() 등을 통해 부모를 호출할 수 있도록 한다. 특히 SoundObj는 부모와 달리 더 받아야하는 인자 값으로 AudioBufferData 를 받아야 한다. 하지만 AudioBufferData는 사용자가 생성하면 그 후에 조작하는 것을 기반으로 두고 있기 때문에, SoundObj가 생성되면 AudioBufferData는 기본적으로 자동 생성되도록 구성해야 한다. 즉 SoundObj의 생성자에 AudioData를 받도록 한다. 그러면 내부에서 AudioBufferData를 자동 생성한 뒤, AudioData와 엮어준다. AudioData를 인자값으로 넣을 땐, UI단에서 선택한 오디오나 녹음한 오디오가 자동으로 들어갈 수 있도록 구성해야 한다. 추후 녹음 시에는 동시에 AudioData가 생성되도록 구현해야 하기에 이 부분은 동적으로 처리할 수 있도록 구성한다.
2. UUID는 시스템상에서 겹칠 수 없는 시간 순서 UUID로 자동 발급받는다.
AudioBufferData
1. SoundObj에 의해서 생성되는 것으로, Name은 내부 SoundObj 의 Name이름과 동일시한다.
2. AudioBufferData가 생성되기 위해서는 AudioData가 필요하므로, 생성자에서 받도록 한다.
2. SoundStartTime과 SoundStopTime은 기본적으로 AudioData에 맞춰서 Strech된 값으로 기본 지정된다.
3. 버퍼를 반환하는 함수가 있어야 한다.
AudioData
1. AudioData는 외부 UI 등에서 생성되는 것으로, 사용자가 파일을 불러오거나 목소리를 녹음할 때 생성한다. 생성자 값은 Audio Name, FileLocation으로 한다.
2. UUID는 시스템상에서 겹칠 수 없는 시간 순서 UUID로 자동 발급받는다.
3. Audio의 전체 길이, 샘플레이트, 비트 등을 반환할 수 있는 메소드가 필요하다.
고려 할 사항
재생, 렌더링 부분을 구현하기 위해서는 순서대로 데이터를 가져오고 재생할 수 있도록 하는 클래스가 필요하다.
PlayerManager 클래스 및 RenderManager 클래스가 필요할 것으로 보인다. 각 생성자에는 Scene 단위로 데이터를 넣을 수 있도록 한다.
느낀 점
클래스 다이어그램을 먼저 구성하니, 추후 구현시 원활하게 작업할 수 있을 것으로 보인다.