Android 오디 오 편집 오디 오 합성 기능
오디 오 편집 시리즈:
- android 오디 오 편집 오디 오 변환 PCM 및 WAV
- 안 드 로 이 드 오디 오 편집 오디 오 재단
- 안 드 로 이 드 오디 오 편집 오디 오 합성
이 편 은 주로 오디 오 PCM 데이터 의 합성 을 설명 하 는데 여기 서 합성 은 오디 오 간 의 조합,혼합 을 포함한다.
-오디 오 조합:한 단락 의 오디 오 는 다른 단락 의 오디 오 와 연결 되 어 있 고 두 단락 의 오디 오 는 동시에 재생 되 지 않 으 며 선후 순서 가 있다.
-오디 오 혼합:한 단락 의 오디 오 와 다른 단락 의 오디 오 는 같은 구간 이 존재 하 며,두 단락 은 동시에 재생 되 는 구간 이 있다.
다음은 오디 오 조합,오디 오 혼합 효과 그림 입 니 다.
오디 오 조합
안 드 로 이 드 오디 오 편집 오디 오 변환 PCM 과 WAV,4.567915 의 원 리 를 이해 했다 면.그러면 오디 오 맞 춤 의 원 리 는 사실 잘 이해 할 수 있다.전체적으로 말 하면 오디 오 파일 을 새로 만 들 고 오디 오 PCM 데 이 터 를 새 오디 오 에 복사 한 다음 다른 오디 오 PCM 데 이 터 를 새 오디 오 에 복사 하 는 것 이다.그래도 주의해 야 할 것 이 있 습 니 다.
정경 1
A 오디 오 40 초,B 오디 오 20 초,B 오디 오 데 이 터 를 A 오디 오 뒤에 연결 하여 60 초 동안 C 오디 오 파일 을 얻 을 수 있다 고 가정 합 니 다.
이 경우 가장 간단 하 다.새 오디 오 파일 C 는 A 오디 오의 PCM 데 이 터 를 C 오디 오 파일 에 복사 한 다음 B 오디 오의 PCM 데 이 터 를 C 오디 오 파일 에 복사 한 다음 C 오디 오 에 wav 파일 헤더 정 보 를 적어 재생 가능 한 WAV 파일 을 얻는다.
정경 2
A 오디 오 40 초,B 오디 오 20 초,B 오디 오 데 이 터 를 A 오디 오 10 초 에 삽입 하면 60 초 동안 C 오디 오 파일 을 얻 을 수 있다.
이 경우 조금 복잡 하 다.새 오디 오 파일 C 는 A 오디 오 10 초 전 PCM 데 이 터 를 C 오디 오 파일 에 복사 한 다음 B 오디 오의 PCM 데 이 터 를 C 오디 오 파일 에 복사 한 다음 A 오디 오 후 30 초 간 PCM 데 이 터 를 C 오디 오 파일 에 복사 한 다음 C 오디 오 에 wav 파일 헤더 정 보 를 적어 재생 가능 한 WAV 파일 을 얻는다.
광경
A 오디 오 40 초,B 오디 오 20 초,B 오디 오 5~15 초 데 이 터 를 A 오디 오 10 초 에 삽입 하면 50 초 간 C 오디 오 파일 을 얻 을 수 있다.
이런 상황 은 더욱 복잡 하고 가장 흔히 볼 수 있 는 삽입 장면 이다.B 오디 오 를 재단 하고 A 오디 오의 특정한 위치 에 삽입 하 는 것 은 B 오디 오 데이터 의 재단 과 관련된다.물론 원리 도 간단 하 다.B 오디 오 5 초 와 10 초 에 대응 하 는 파일 데이터 위 치 를 계산 한 다음 에 이 구간 의 데 이 터 를 C 에 복사 하고 A 파일 에 대한 데이터 도 마찬가지 이다.
정경
A 오디 오 와 B 오디 오의 다 중 데이터 가 서로 연결 되 어 있 습 니 다.
이 경우 원 리 는 위 와 마찬가지 로 지 정 된 시간 에 대응 하 는 데이터 가 무엇 인지 알 면 자 유 롭 게 연결 할 수 있다.
오디 오 패 치 의 실현 은 제 Github 프로젝트 를 참고 하 세 요안 드 로 이 드 오디 오 편집 오디 오 재단여 기 는 구체 적 인 코드 를 붙 이지 않 겠 습 니 다.
오디 오 혼합
오디 오 혼합 이란 한 단락 의 오디 오 와 다른 단락 의 오디 오 를 합 쳐 동시에 재생 할 수 있 는 것 을 말한다.예 를 들 어 가장 흔히 볼 수 있 는 사람 소리 녹음 과 배경 음악의 합성 으로 사람 소리 노래 한 곡 을 얻 을 수 있다.
오디 오 혼합 의 원 리 는?
오디 오 혼합 원리:양 적 음성 신호 의 중첩 은 공기 중의 음파 의 중첩 과 같다.
즉,입력 한 각 오디 오의 특정한 시간 점 의 샘플링 포인트 수 치 를 더 하면 음성 신 호 를 출력 된 오디 오 에 넣 을 수 있다.
오디 오 샘플링 포인트 수치의 크기 는(-32768,32767)이 고 short 의 최소 값 과 최대 값 에 대응 하 며 오디 오 샘플링 포인트 데 이 터 는 하나의 수치 로 구성 된다.단순 중첩 하면 추 가 된 값 이 32767 보다 크 고 short 의 표시 범 위 를 초과 할 수 있 습 니 다.즉,넘 침 입 니 다.그래서 오디 오 혼합 에서 지난번 에 일부 알고리즘 을 사용 하여 처리 합 니 다.간단 한 혼합 방식 을 열거 하 겠 습 니 다.
직접 중첩 법
A(A1,A2,A3,A4)와 B(B1,B2,B3,B4)를 중첩 하여 평균 치 를 구하 고 C(A1+B1),(A2+B2),(A3+B3),(A4+B4)를 얻는다.
이 경우 출력 된 오디 오 에서 A 와 B 오디 오 데 이 터 는 같은 소리 크기 로 재생 할 수 있 지만 넘 칠 수 있 습 니 다.만약 에 A 오디 오 가 지정 한 시간 점 의 특정한 샘플링 데 이 터 는(23,67,511,139,307)이 고 B 오디 오 가 해당 시간 점 에 대한 샘플링 데 이 터 는(1101,300,47,600,22)이 라 고 가정 하면 이들 이 직접 중첩 하면 얻 은 샘플링 데 이 터 는(1124,367,558,739,329)이다.이 짧 은 샘플링 데 이 터 는 바로 이들 의 소리 가 혼 합 된 데이터 이다.
중첩 후 평균 값 구하 기
A(A1,A2,A3,A4)와 B(B1,B2,B3,B4)를 중첩 하여 평균 치 를 구하 고 C(A1+B1)/2,(A2+B2)/2,(A3+B3)/2,(A4+B4)/2 를 얻는다.
이렇게 하면 넘 치 는 상황 을 피 할 수 있 지만 두 가지 소리 가 예전 의 단독 소리 보다 절반 작 을 것 이다.예 를 들 어 사람 소리 와 배경 음악 이 혼합 되 어 수출 된 음성 에서 사람 소리 가 절반 작 아 지고 배경 음악 도 절반 작 아 질 것 이다.이런 상황 은 원 하 는 효과 가 아 닐 수도 있다.특히 여러 개의 음성 이 혼합 되 는 상황 이다.
가중치 중첩 법
A(A1,A2,A3,A4)와 B(B1,B2,B3,B4)의 가중치 가 중첩 되 고 A 의 가중치 가 x,B 의 가중치 가 y 로 C(A1*x+B1*y),(A2*x+B2*y),(A3*x+B3*y),(A4*x+B4*y)를 얻 을 수 있 습 니 다.
이렇게 하면 A 와 B 의 음량 의 크기 를 더욱 편리 하 게 할 수 있다.예 를 들 어 A 의 가중치 가 1.2 이 고 B 의 가중치 가 0.8 이면 A 의 소 리 는 상대 적 으로 높 아 지고 B 의 소 리 는 상대 적 으로 줄어든다.엄 밀 히 말 하면 직접 중첩 법 과 중첩 구 평균치 법 은 모두 이 유형 에 속한다.
그 밖 에 각종 더욱 복잡 한 혼합 알고리즘 도 있다.예 를 들 어 동적 가중치 법,A 와 B 의 가중치 는 현재 시각 샘플링 포인트 수치의 크기 에 따라 동적 변 화 를 하여 동적 이득 과 감쇠 의 혼합 방식 을 얻 을 수 있다.
다음은 직접 중첩 법의 실현 이 므 로 short 값 은 큰 엔 드 저장 방식 으로 계산 하고 저장 할 때 큰 엔 드 방식 으로 저장 해 야 합 니 다.
/**
*
* @author Darcy
*/
private static class AddAudioMixer extends MultiAudioMixer{
@Override
public byte[] mixRawAudioBytes(byte[][] bMulRoadAudioes) {
if (bMulRoadAudioes == null || bMulRoadAudioes.length == 0)
return null;
byte[] realMixAudio = bMulRoadAudioes[0];
if(bMulRoadAudioes.length == 1)
return realMixAudio;
for(int rw = 0 ; rw < bMulRoadAudioes.length ; ++rw){
if(bMulRoadAudioes[rw].length != realMixAudio.length){
Log.e("app", "column of the road of audio + " + rw +" is diffrent.");
return null;
}
}
//row
//column ,
int row = bMulRoadAudioes.length;
int coloum = realMixAudio.length / 2;
short[][] sMulRoadAudioes = new short[row][coloum];
//PCM 16 , , , (X1Y1, X2Y2, X3Y3) , ((Y1 * 256 + X1), (Y2 * 256 + X2), (Y3 * 256 + X3))
for (int r = 0; r < row; ++r) {
for (int c = 0; c < coloum; ++c) {
sMulRoadAudioes[r][c] = (short) ((bMulRoadAudioes[r][c * 2] & 0xff) | (bMulRoadAudioes[r][c * 2 + 1] & 0xff) << 8);
}
}
short[] sMixAudio = new short[coloum];
int mixVal;
int sr = 0;
for (int sc = 0; sc < coloum; ++sc) {
mixVal = 0;
sr = 0;
//
for (; sr < row; ++sr) {
mixVal += sMulRoadAudioes[sr][sc];
}
// short ,
sMixAudio[sc] = (short) (mixVal);
}
//short
for (sr = 0; sr < coloum; ++sr) {
realMixAudio[sr * 2] = (byte) (sMixAudio[sr] & 0x00FF);
realMixAudio[sr * 2 + 1] = (byte) ((sMixAudio[sr] & 0xFF00) >> 8);
}
return realMixAudio;
}
}
주의 사항오디 오 의 조합 과 믹스,일 부 는 주의 하고 처리 해 야 한다.
1.A 오디 오 와 B 오디 오의 샘플링 자릿수 가 일치 하 는 지 확인 해 야 합 니 다.예 를 들 어 A 오디 오 는 16 비트 샘플링 자릿수 이 고 B 오디 오 는 8 비트 샘플링 자릿수 이다.그러면 이 때 는 직접 연결 할 수 없고 같은 샘플링 자릿수 로 전환 해 야 후속 작업 을 할 수 있다.
2.A 오디 오 와 B 오디 오의 샘플링 율 이 일치 하도록 확보 해 야 한다.이것 은 녹음 과 노래 를 연결 할 때 특히 주의해 야 한다.만약 에 녹음 한 오디 오 주파수 가 16000 이 고 노래의 오디 오 가 44100 이 라면 둘 다 직접 연결 할 수 없고 똑 같은 샘플링 율 로 전환 해 야 한다.샘플링 율 을 바 꾸 면 resample 라 이브 러 리 를 사용 할 수 있다.
3.A 오디 오 와 B 오디 오의 채널 수가 일치 하 는 지 확인 해 야 한다.물론 이것 은 모 노 채널 과 모 노 채널 의 오디 오 가 합성 되 지 못 하 는 것 을 말 하 는 것 이 아니 라 사실상 녹음 오디 오 는 보통 모 노 채널 이 고 노래 는 보통 모 노 채널 이다.모 노 채널 과 투 사 운 드 채널 의 오디 오 를 합성 하려 면 보통 투 사 운 드 채널 을 기준 으로 모 노 채널 의 오디 오 를 투 사 운 드 채널 로 변환 해 야 한다.변환 원리 도 간단 하 다.모 노 채널 의 샘플링 포인트 데 이 터 를 한 부 더 복사 해 야 한다.예 를 들 어 모 노 채널 의 ABCD 데 이 터 를 투 사 운 드 채널 로 변환 하 는 AABBCCDD 수 거 등 이다.
그렇다면 A 오디 오 와 B 오디 오의 샘플링 율 자릿수,샘플링 율,채널 수가 다 르 면 합성 후 효과 적 인 오디 오 파일 일 까?이것 은 사실 효과 적 인 것 입 니 다.똑 같이 재생 할 수 있 지만 합 성 된 오디 오의 서로 다른 부분의 오디 오 재생 속도 가 다 를 수 있 습 니 다.예 를 들 어 단일 채널 의 A 와 이중 채널 의 B 조합 은 A 부분의 재생 속도 가 B 의 재생 속도 보다 배가 빠 르 고 B 의 재생 속 도 는 정상 적 인 것 입 니 다.
총결산
여기까지 저 는 여러분 들 이 오디 오의 재단,조합,혼합 원리 에 대해 기본적으로 알 게 되 었 다 고 생각 합 니 다.그러나 여러분 들 은 출력 된 오디 오 가 모두 WAV 나 PCM 형식 이라는 것 을 알 게 될 것 입 니 다.제 가 최종 적 으로 필요 한 것 은 MP3 나 AAC 등 형식의 오디 오 입 니 다.그러면 어떻게 전환 해 야 합 니까?사실 이것 은 오디 오 와 관련 된 인 코딩 입 니 다.mp3 인 코딩 은 제3자 라 이브 러 리 mp3 lame 을 사용 할 수 있 고 AAC 인 코딩 은 안 드 로 이 드 가 자체 적 으로 가지 고 있 는 MediaCodec 을 사용 하여 이 루어 집 니 다.
나의 Github 프로젝트AudioEdit
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.