YeDaxia/MusicPlus

Mixing audio problem

Opened this issue · 1 comments

When two audios are mixed, the last audio duration is always 15 seconds while the first one is correct.
What will be the problem?

This question creates too much confusion
When adding audio with the existing video it only write 15 seconds audio byte in the video.
I tried alot to re understand the code but it is ok. Can you help me in this ?

I think the issue is only in the below code
`if (!sawInputEOS) {
inputBufIndex = audioEncoder.dequeueInputBuffer(10000);
if (inputBufIndex >= 0) {
ByteBuffer inputBuffer = audioInputBuffers[inputBufIndex];
inputBuffer.clear();

				           int bufferSize = inputBuffer.remaining();
				           if(bufferSize != extractAudioBuffer.length){
				        	   extractAudioBuffer = new byte[bufferSize];
				        	   mixAudioBuffer = new byte[bufferSize];
				           }
				           
				           if(!readExtractAudioEOS){
				        	   extractAudioReadCount = fisExtractAudio.read(extractAudioBuffer);
				        	   if(extractAudioReadCount == -1){
				        		   readExtractAudioEOS = true;
				        	   }
				           }
				           
				           if(!readMixAudioEOS){
				        	   mixAudioReadCount = fisMixAudio.read(mixAudioBuffer);
				        	   if(mixAudioReadCount == -1){
				        		   readMixAudioEOS = true;
				        	   }
				           }
				           
				           if(readExtractAudioEOS && readMixAudioEOS){
			        		   audioEncoder.queueInputBuffer(inputBufIndex,0 , 0 , 0 , MediaCodec.BUFFER_FLAG_END_OF_STREAM);
				        	   sawInputEOS = true;
				           }else{
					           
					           byte[] mixAudioBytes;
					           if(!readExtractAudioEOS && !readMixAudioEOS){
					        	   if(extractAudioReadCount  == mixAudioReadCount){
					        		   twoAudioBytes[0] = extractAudioBuffer;
							           twoAudioBytes[1] = mixAudioBuffer;
					        	   }else if(extractAudioReadCount > mixAudioReadCount){
					        		   twoAudioBytes[0] = extractAudioBuffer;
					        		   Arrays.fill(mixAudioBuffer, mixAudioReadCount -1, bufferSize, (byte)0);
					        	   }else{
					        		   Arrays.fill(extractAudioBuffer, extractAudioReadCount -1, bufferSize, (byte)0);
					        	   }
					        	   mixAudioBytes = audioMixer.mixRawAudioBytes(twoAudioBytes);
					        	   if(mixAudioBytes == null){
					        		   DLog.e(TAG, "mix audio : null");
					        	   }
					        	   inputBuffer.put(mixAudioBytes);
						           rawAudioSize += mixAudioBytes.length;
						           audioEncoder.queueInputBuffer(inputBufIndex, 0, mixAudioBytes.length, audioTimeUs, 0);
					           }else if(!readExtractAudioEOS && readMixAudioEOS){
					        	   inputBuffer.put(extractAudioBuffer, 0, extractAudioReadCount);
						           rawAudioSize += extractAudioReadCount;
						           audioEncoder.queueInputBuffer(inputBufIndex, 0, extractAudioReadCount, audioTimeUs, 0);
					           }else{
					        	   inputBuffer.put(mixAudioBuffer, 0, mixAudioReadCount);
						           rawAudioSize += mixAudioReadCount;
						           audioEncoder.queueInputBuffer(inputBufIndex, 0, mixAudioReadCount, audioTimeUs, 0);
					           }
					           
					           audioTimeUs = (long) (1000000 * (rawAudioSize / 2.0) / audioBytesPerSample);
				           }
				     }
	        	}`