Ver Mensaje Individual
  #1  
Antiguo 31-05-2008
Avatar de Guillermo80
Guillermo80 Guillermo80 is offline
Miembro
 
Registrado: may 2007
Posts: 87
Reputación: 18
Guillermo80 Va por buen camino
Datos interpaginados a array

Hola, tengo una aplicación que me funciona bien, pero teóricamente no entiendo del todo cómo lo hace, me explico: se trata de alimentar un codificador de audio, al cual le llega un array tipo byte con las muestras interpaginadas de los canales L y R. Para ello primero voy leyendo el wav de entrada, que voy guardando a cada pasada del bucle, con Blockread, guardo en un array bufer de 2*n posiciones. Después con otro bucle interno al primero se van interpaginando las muestras guardándose en otro array pcm de mitad de tamaño, o sea, n. Cuando termina este subbucle, coge y alimenta al codificador. Para que se entienda, voy a poner el trozo de código que interesa:

Cita:
...dentro de un while, ya llego aqui con las muestras leídas del wav al array buffer...

for i:=0 to (necesarias*channels-1) do
begin

pcm[i] := buffer[2*i+1] shl 8 or buffer[2*i];
end;
//se alimenta el codificador
ok := FLAC__stream_encoder_process_interleaved(pencoder, pcm, necesarias);

...sigue dentro del while más operaciones y luego vuelta a empezar...
Dentro del for va guardando en pcm las posiciones impares según entiendo, pero lo que no entiendo es el porqué del desplazamiento shl, y la función del or, no entiendo en qué caso cogería buffer[2*i]

No pongo más segmentos de código porque no interesa saber nada más que lo que aquí muestro. La clave está en por qué utilizo un bufer de mitad de tamaño para interpaginar las muestras, cómo se interpaginan dentro del for, o sea, cuándo se cogen las pares.
Responder Con Cita