Pergunta

Estou escrevendo bytes de áudio brutos de dois arquivos em um novo arquivo wav para combinar os dois arquivos. O arquivo resultante que é criado tem o conteúdo de ambos os clipes de áudio, mas também há um monte de ruído no arquivo.

Pode alguém me aponte para um bom exemplo que mostra como escrever bytes de áudio brutos para um arquivo? Aqui está a lógica básica que estou seguindo

SInt32 leftSample1 = ReadSampleFromFile1(music_iter1);
leftSample1 = (SInt32)((float) leftSample1 * 0.7071); //to avoid clipping

SInt32 leftStereoSample2 = ReadLeftSample(music_iter2);
leftStereoSample2 += leftSample1;
if (leftStereoSample2 > 32767)
leftStereoSample2 = 32767;
else if (leftStereoSample2 < -32768
leftStereoSample2 = -32768;
// write leftStereoSample2 to the file
//do the same as left sample to right sample also

++music_iter2;
++music_iter1;

Graças.

Foi útil?

Solução

quantas vezes são estes retornando true?

if (leftStereoSample2 > 32767)
leftStereoSample2 = 32767;
else if (leftStereoSample2 < -32768
leftStereoSample2 = -32768;

só porque você não está recorte, (porque você está forçando-o a não) não significa que você não vai conseguir artefatos (distorções) etc quando você truncar as ondas assim. Gostaria de ver quantas vezes o que estava acontecendo.

áudio núcleo tem misturadores. pessoas inteligentes têm escrito código para lidar com esse tipo de coisa já, portanto, nós não temos que :) MultiChannelMixer é aquele que faz a mistura estéreo. verificá-la.

Outras dicas

Os testes para 65535 e -65536 estão incorretas (seria necessário 17 bits). Tente 32767 e -32768.

Eu não tenho certeza a linha de código para "prevenir recorte" é realmente fazê-lo de trabalho; você não precisa para efetivamente desligar ambos córregos antes de se juntar a eles?

Tente combinar dois, arquivos mais silenciosos muito muito. E em vez de 0,7071 em ambos os arquivos, tente 0,5. Ou simplesmente usar MultiChannelMixer, como sugerido por Aran.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top