zde je příklad programu libasound s dostatečným množstvím definic k tomu, aby základní 2kanálový 44.1k wav výstup fungoval bez hlaviček.
EDIT:Vlastně si nejsem jistý, jestli by fungovalo přímé ukládání dat jako wav, protože hluk při nahrávání by je mohl snadno poškodit, ale pravděpodobně můžete udělat něco jako sinusovou vlnu bitů na vysoké frekvenci, což je spolehlivější
EDIT2:pokud je aplay přítomen a funguje, můžete ho také použít a napsat program, který bude vydávat surový zvuk a dát ho do aplay nebo čehokoli, co umí přehrávat zvuk
EDIT3:upraveno tak, aby nepoužívalo vůbec žádná záhlaví
pokud se -lasound nezkompiluje, přidejte -L/cesta/kde/libasound/je/umístěno
/*
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;
}
Funguje váš HDMI nebo jiný výstupní port? Pokud ano, můžete jej zaznamenat jako video a zpracovat později pomocí zařízení pro snímání obrazovky. Nebudete tedy omezeni snímkovou rychlostí vaší webové kamery.
Co takhle zakódovat svá data hex a odeslat je stránku na stránku do terminálu?
Můžete přidat předponu s offsetem v binárním kódu, abyste mohli stránku snadno znovu vygenerovat (pro ruční opravu?)
Poté na jiném počítači použijte ke skenování stránek nějaký software OCR.
Terminál 80x25 by dal 1000 bajtů na stránku (bez místa pro předponu). Takže na zhruba 1000 stránkách byste mohli dostat svá data. I při jedné stránce za sekundu je to méně než 20 minut.
Hexadecimální kódování se snadno píše a také poskytuje nezpracovanou formu opravy chyb (existuje pouze 16 platných symbolů).