Domanda

Sto scrivendo byte audio grezzi da due file in un nuovo file wav per combinare i due file. Il file risultante che viene creato ha il contenuto di entrambe le clip audio ma c'è anche molto rumore nel file.

Qualcuno può indicarmi un buon esempio che mostra come scrivere byte audio grezzi in un file? Ecco la logica di base che sto seguendo

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;

Grazie.

È stato utile?

Soluzione

quante volte stanno tornando vere?

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

solo perché non stai tagliando, (perché lo stai forzando a non) non significa che non otterrai artefatti (distorsione) ecc. quando troncerai le onde in quel modo. vedrei quanto spesso accadesse.

audio principale ha mixer. le persone intelligenti hanno già scritto codice per gestire questo tipo di cose, quindi non è necessario :) MultiChannelMixer è uno che fa il missaggio stereo. dai un'occhiata.

Altri suggerimenti

I test per 65535 e -65536 sono errati (richiedere 17 bit). Prova 32767 e -32768.

Non sono sicuro della riga di codice per " impedire il clipping " sta effettivamente facendo il suo lavoro; non avresti bisogno di rifiutare efficacemente entrambi i flussi prima di unirti a loro?

Prova a combinare due file molto più silenziosi. E invece di 0.7071 su entrambi i file, prova 0.5. O semplicemente usa MultiChannelMixer, come suggerito da Aran.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top