[2023 01 28] 목소리 더빙, 보이스 도와주는 프로그램 개발 연습 일지 (4) - Whitmem
[2023 01 28] 목소리 더빙, 보이스 도와주는 프로그램 개발 연습 일지 (4)
Develop History
2023-01-28 03:39 게시 d509f23d009f8c9fa62d

0
0
85
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
이번 목표
각 클래스가 처리하는 정보 및 처리하는 내용을 글로 간단하게 나타내고, 다음은 구현하는 것이 다음 목표이다.
클래스 구성
클래스 내부 흐름을 구성하면 다음과 같다.
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 단위로 데이터를 넣을 수 있도록 한다.
느낀 점
클래스 다이어그램을 먼저 구성하니, 추후 구현시 원활하게 작업할 수 있을 것으로 보인다.
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.