GNU/Linux >> Tutoriales Linux >  >> Linux

¿Puedo guardar estos documentos en una máquina moribunda del olvido?

aquí hay un programa libasound de ejemplo con las definiciones suficientes para obtener una salida wav básica de 44.1k de 2 canales sin los encabezados.

EDITAR:en realidad, no estoy seguro de si el volcado directo de los datos como wav funcionaría, ya que el ruido durante la grabación podría dañarlo fácilmente, pero probablemente pueda hacer algo como una onda sinusoidal de bits a alta frecuencia que es más confiable

EDIT2:si aplay está presente y funciona, también puede usarlo y simplemente escribir un programa que emita audio sin procesar y canalizarlo a unplay o cualquier cosa que pueda reproducir audio

EDIT3:lo modifiqué para que no use ningún encabezado

si -lasound no compila, agregue -L/path/where/libasound/is/located

/*
    gcc alsa_noheader.c -lasound
    cat stuff.wav | ./a.out
*/

typedef unsigned int uint;
typedef unsigned long ulon;

int printf(char*, ...);
void* malloc(long);
long read(int fd, void* buf, ulon count);

int snd_pcm_open(void**, char*, int, int);
ulon snd_pcm_hw_params_sizeof();
int snd_pcm_hw_params_any(void*, void*);
int snd_pcm_hw_params_set_access(void*, void*, int);
int snd_pcm_hw_params_set_format(void*, void*, int);
int snd_pcm_hw_params_set_channels(void*, void*, uint);
int snd_pcm_hw_params_set_rate_near(void*, void*, uint*, int*);
int snd_pcm_hw_params(void*, void*);
int snd_pcm_hw_params_get_period_size(void*, ulon*, int*);
long snd_pcm_writei(void*, void*, uint);
int snd_pcm_prepare(void*);
int snd_pcm_drain(void*);
int snd_pcm_close(void*);

int main(int argc, char* argv[])
{
    void* pcm;
    void* params;

    int rate;
    int nchannels;
    ulon frames;
    void* buf;
    int bufsize;
    long nread;

    snd_pcm_open(&pcm, "default", 0, 0);
    params = malloc(snd_pcm_hw_params_sizeof());
    snd_pcm_hw_params_any(pcm, params);

    /* 3 = rw_interleaved */
    snd_pcm_hw_params_set_access(pcm, params, 3);

    /* 2 = 16-bit signed little endian */
    snd_pcm_hw_params_set_format(pcm, params, 2);

    /* 2 channels */
    nchannels = 2;
    snd_pcm_hw_params_set_channels(pcm, params, nchannels);

    /* sample rate */
    rate = 44100;
    snd_pcm_hw_params_set_rate_near(pcm, params, &rate, 0);

    snd_pcm_hw_params(pcm, params);
    snd_pcm_hw_params_get_period_size(params, &frames, 0);

    bufsize = frames * nchannels * 2;
    buf = malloc(bufsize);

    /* read file from stdin */
    while (nread = read(0, buf, bufsize) > 0)
    {
        if (snd_pcm_writei(pcm, buf, frames) == -29)
        {
            printf("W: underrun\n");
            snd_pcm_prepare(pcm);
        }
    }

    snd_pcm_drain(pcm);
    snd_pcm_close(pcm);

    return 0;
}

¿Funciona su HDMI o cualquier otro puerto de salida de pantalla? Si es así, puede usar un dispositivo de captura de pantalla para grabarlo como video y procesarlo más tarde. Por lo tanto, no estar limitado por la velocidad de fotogramas de su cámara web.


¿Qué tal si codificas tus datos con hexadecimal y los envías página por página a la terminal?

Puede agregar un prefijo con el desplazamiento en el binario para que pueda regenerar fácilmente una página (¿para corrección manual?)

Luego, en una computadora diferente, use algún software OCR para escanear las páginas.

El terminal de 80x25 produciría 1000 bytes por página (menos algo de espacio para el prefijo). Entonces, en aproximadamente 1000 páginas, podría obtener sus datos. Incluso a una página por segundo, son menos de 20 minutos.

La codificación hexadecimal es fácil de escribir y también proporciona una forma cruda de corrección de errores (solo hay 16 símbolos válidos).


Linux
  1. Cómo arrancar desde una unidad USB en VirtualBox en Linux

  2. Linux:¿contenido en estas direcciones?

  3. ¿Puedo iniciar Linux desde un VHD?

  4. Conexión a una VPN de SonicWall desde una máquina con Linux

  5. ¿Cómo puedo obtener un binario de un archivo .py?

Comience a aprender Kubernetes desde su máquina local

Migrar máquina virtual de VMware ESXi a Proxmox VE

¿Cómo puedo eliminar una impresora de CUPS?

¿Cómo puedo escribir en dmesg desde la línea de comandos?

¿Puedo conectarme a una máquina con Windows desde el shell de Linux?

Tomando el volcado de MySQL de otra máquina