Pitch / Time Shifting di un array di byte PCM

3

Sto cercando un algoritmo universale che modifichi il pitch e il tempo mantenendo la frequenza di campionamento. (Sto provando a programmare un generatore di suoni (seno, triangolo ...) come esercizio)

Voglio solo spremere insieme i campioni del suono in modo che appaia più corto e più alto.

È facile se vuoi accelerarlo con un bel numero come 2 (lascia fuori ogni secondo campione) ma cosa succede se vuoi accelerarlo di 2,5?

Qualcuno può nominare un algoritmo per questo? (preferibilmente in C ++, ma anche altri linguaggi vanno bene)

( Ho trascorso gli ultimi 30 minuti a scrivere un algoritmo che calcola la media dei decimali di un numero (come la media di ogni 2,5 numeri). Poi ho capito che è totalmente inutile quindi per favore aiutaci )

Questo approccio ha senso ?: (Aggiungerà pseudocodice a breve)

N is the amount of the pitch
Divide the index of every sample of the sound by N (2/2.8=0.71; 3/2.5=1.07)
For every whole number, compute the distances to the next samples (0.29; 0.07)
Value portions of distance (1-(0.29/0.36)=19%; 1-(0.07/0.36)=81%
New number (New Sample = (19%*SampleA + 81%*SampleB)/2)

Codice:

byte[] input;
double f = factor;
byte[] output = new byte[ceil(input / f)];
output[0] = input[0]
for(int i = 1; i < output.length) {
    output[i] = (input[floor(i*factor)] + input[ceil(i*factor)]) / 2;
}
    
posta KeksArmee 02.07.2016 - 21:49
fonte

1 risposta

1

Come ha detto un commentatore, cerca "Audio Resampling". Inoltre, forse compra il libro chiamato "The Art of Digital Audio" o simile. Fondamentalmente, quello che stai facendo è un'interpolazione lineare, dovrebbe funzionare. Tuttavia, il ricampionamento a una frequenza molto più elevata dovrebbe consentire di prelevare campioni (dal set più denso) vicino ai punti di campionamento necessari per ad esempio 2,5 aumenti di velocità. Analizzare l'errore da tale euristica non è banale, per questo è necessario un buon libro.

Se ti piace la matematica, leggi questo classico pratico: link Questo secondo libro ti aiuta a capire cosa succede al segnale se fai interpolazione lineare tra i campioni (è un esercizio ...)

    
risposta data 22.07.2016 - 08:48
fonte

Leggi altre domande sui tag