문제점
기존 방식에 대하여 채널이 다른 wav 파일의 로드시 사용자가 정의할 수 없다는 문제 발생
변경 방법
오디오 채널에 대하여 좌, 우 고정하지 아니하고 인덱스로 구성함으로써 사용자가 맵핑할 수 있도록 처리
변경 사항
자세한 변경 사항을 클래스별로 나열합니다.
SoundVObject
변경 사항 없음
단일 오디오 오브젝트를 나타내는 클래스임
MonoAudioStream
1. PCM 데이터가 아닌 파형 double[] 데이터를 보관함
2. 라우트 코드를 지정할 수 있음
단일 오디오 스트림을 보관하는 클래스임
라우트 코드는 맵핑 될 대상 코드 명이며, 사용자가 정의할 수 있음. 단 오디오 원본 wav 에 대한 MonoAudioStream에는 라우트코드가 의미가 없으며 사용자가 프로젝트에 Object를 추가하면서 정의한 라우트코드가 이 클래스의 라우트코드에 자동 맵핑됨
자세한 건 AudioBufferData가 대리함
AudioPackage
1. getSampleRate() 시 MonoAudioStream 를 통해서 샘플 레이트를 가져옴
2. ChannelCount 로, 채널의 개수를 입력 받아 개수만큼 인덱스를 관리함
여러 채널의 모노 스트림을 같이 포함하고 있는 하나의 오디오 패키지임
AudioStream
1. 필요 없는 메소드 제거
2. 시스템에서 생성한 오디오 스트림의 경우 길이를 확인할 수 없도록 변경 (별도로 정의한 경우는 가능)
하나의 오디오 개체에 대한 오디오 로드를 관리하거나 시스템 오디오를 처리하는 클래스임이 객체안에 AudioPackage가 파일로부터 동적 로드되거나 메모리상에 로드됨
AudioBufferData
1. 라우트 보관 (중요)
2. requestAudioPackage() 요청을 보내면 만들어주는 오디오 패키지에 자신이 가 지고 있는 라우트 정보를 MonoAudioStream에 반영하여 반환함
3. 라우트 정보는 사용자가 지정하는 것임
하나의 오디오 wav에 대해 작은 변경 사항에 대해 실시간으로 렌더링하고 라우트할 수 있도록 함
AudioMonoMixHelper
1. 오디오는 평균 덧셈으로 처리하지 않으며, 단순 덧셈으로 처리함
2. 모든 스트림을 더하도록 처리
오디오 패키지에 존재하는 모든 스트림을 단일 모노로 합성
AudioMonoRouteHelper
1. 좌, 우 지정이 아닌 스트림 인덱스 직접 지정으로 변경
특정 스트림 인덱스의 스트림을 모노 스트림으로 대체함
AudioPackTimeCutHelper
1. 좌, 우 지정이 아닌 전체 스트림 개수를 복제함
2. 복제된 스트림의 길이 및 시작 시간을 조절함
3. 여기서 생성되는 모노 오디오 스트림은 라우트 코드를 가지고 있지 않음 (사용자가 정의할 필요가 있음)예를 들어, AudioBufferData는 AudioPackTimeeCutHelper로 자르고 난 뒤에 오디오 라우트 코드를 적용함
오디오패키지를 전체적으로 길이를 자르고 새 패키지로 만들어 줌
AudioStereoStrechHelper
1. 모노 -> 스테레오가 아닌, 원하는 인덱스 스트림 -> 개수 복사로 변경
2. 여기서 생성되는 모노 오디오 스트림은 라우트 코드를 가지고 있지 않음 (사용자가 정의할 필요가 있음)
특정 단일 인덱스 스트림을 원하는 개수만큼 가지고 있는 스트림 오디오 패키지로 복제 및 확장함
MonoStreamSumMixHelper
1. SampleRate 를 직접 인자로 받도록 함
2. 평균 나눗셈 처리를 하지 않음
3. AudioMonoMixHelper 는 이 클래스에 의해 처리 됨
AudioMonoMixHelper는 AudioPackage 단위이며 이 패키지는 MonoAudioStream 단위 임
MonoAudioStream 을 모두 합쳐 반환함
VObjectSoundStreamMixHelper
1. 코드 별로 합성 진행
2. 합성된 코드가 여러 개 인경우 여러개의 코드가 채널로 만들어지며 생성됨
예를 들어 2개의 오브젝트가 있을 때, 첫 번째 오브젝트는 {LEFT, RIGHT} 채널이 존재, 두 번째 오브젝트는 {LEFT, RIGHT, CENTER} 채널이 존재하는 WAV 오브젝트라면 이 처리자에 의해 합성되는 경우 {LEFT, RIGHT, CENTER} 이라는 새로운 AudioPackage가 만들어짐
이 때 코드 역시 각각 LEFT, RIGHT, CENTER 로 그대로 유지됨
두 개 이상의 SoundObject를 무조건 합쳐 하나의 AudioPackage를 반환
VTrackCompressor
1. Wrapper 및 인자 값에 맞도록 수정
여러개의 Track을 하나로 압축 해 줌 여러개의 트랙에서 겹치는 Object끼리 먼저 Mix 연산을 할 수 있도록 도와주며, 하나의 트랙에 여러개의 오브젝트가 존재하는 형태로 변환함
VTrackRenderer
1. Wrapper 및 인자 값에 맞도록 수정
하나의 VTrack을 오디오로 렌더링함
남은 문제점
1. 오디오 맵핑 부분이 정상 동작할지 확인 필요
2. 현재 한 wav에 대해서 한 채널에 대해 여러 채널에 동시 재생 불가 (예로 모노 wav에 대해서 좌우 복제 불가, 사용자가 지정하는 경우 하나의 채널에만 라우트 가능한데, 이 부분은 사용자가 직접 Object를 2개 만들거나, 오디오 스트림 설정에서 복제모드로 새로운 버퍼를 만들 수 있도록 구성하는 것이 좋아보임
3. 프로젝트 생성시 sampleRate 정보 받아야 함
4. 프로젝트 생성시 오디오 출력 채널 개수 정보 받아야 함
5. 프로젝트 생성시 오디오 출력 채널에 대한 맵핑 정보 (코드별로) 정보 있어야 함, 예를 들어서 LEFT 는 좌 채널, RIGHT는 우 채널에 맵핑, 맵핑 안된 코드는 아무런 처리 안함
6. 내보내기에 대해서 맵핑 정보가 필요함
현재 기준으로, Track을 렌더링하면 사용자가 정의한 코드 대로 트랙이 렌더링 됨
예를 들어, {LEFT, RIGHT, STUFF1, STUFF2} 등...
이 각각의 코드를 어떻게 출력 맵핑으로 걸 것인지 설정이 있어야 할 것으로 보임