Прежде всего, если, действительно, ваш звук составляет 16 бит, добавив его побайтно, это не сработает. Другие люди прокомментировали это. Вы можете увидеть мой ответ здесь, как справиться с этой проблемой.
using Android's AudioTrack to combine bytes of sound samples produces noise
Во-вторых, «нормализовать» это, вы должны будете найти пик, а затем масштабировать все результаты этого значения. Это означает две петли: один, чтобы найти «пик», и один, чтобы добавить значения, масштабируясь до нового пика. Что-то вроде этого:
//this is the raw audio data -- no header
short[] audioData1 , short[] audioData2
//find the max:
float max = 0;
for(int i = 0 ; i < audioData1.length ; i++) {
if(Math.abs(audioData1[i] + audioData2[i]) > max)
max = Math.abs(audioData1[i] + audioData2[i]);
}
//now find the result, with scaling:
for(int i = 0 ; i < audioData1.length ; i++) {
audioData1[i] = Math.Round(Short.MAX_VALUE * (audioData1[i] + audioData2[i])/max) ;
}
//normalized result in audioData1
Вы должны обрабатывать его с помощью значения образца, а не байта. Вероятно, это пары байтов, чтобы сделать 16-битные значения выборки, но это может быть не так - вам нужно будет изучить заголовок .wav, чтобы узнать. Существуют ли не простые библиотеки, которые помогут вам в этом? – Rup
может использовать другой аудиокодек? – ArtemStorozhuk
Я не использую какой-либо кодек, я пишу в native, byte by byte, @Rup Я не нашел для него никакой хорошей библиотеки :( – user1028269