inilah contoh program libasound dengan definisi yang cukup untuk mendapatkan output dasar wav 44,1k 2 saluran tanpa header.
EDIT:Saya sebenarnya tidak yakin apakah langsung membuang data karena wav akan berfungsi, karena kebisingan saat merekam dapat dengan mudah merusaknya, tetapi Anda mungkin dapat melakukan sesuatu seperti gelombang sinus bit pada frekuensi tinggi yang lebih dapat diandalkan
EDIT2:jika aplay ada dan berfungsi, Anda juga dapat menggunakannya dan cukup menulis program yang mengeluarkan audio mentah dan menyalurkannya ke aplay atau apa pun yang dapat memutar audio
EDIT3:memodifikasinya untuk tidak menggunakan header sama sekali
jika -lasound tidak dapat dikompilasi, tambahkan -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;
}
Apakah HDMI Anda atau port tampilan keluar lainnya berfungsi? Jika demikian, Anda dapat menggunakan perangkat tangkapan layar untuk merekamnya sebagai video dan memprosesnya nanti. Sehingga tidak dibatasi oleh frekuensi gambar webcam Anda.
Bagaimana dengan hex-encode data Anda dan menampilkannya halaman per halaman ke terminal?
Anda dapat menambahkan awalan dengan offset dalam biner sehingga Anda dapat membuat ulang halaman dengan mudah (untuk koreksi manual?)
Kemudian di komputer lain gunakan beberapa perangkat lunak OCR untuk memindai halaman.
Terminal 80x25 akan menghasilkan 1000 byte per halaman (dikurangi ruang untuk awalan). Jadi dalam kira-kira 1000 halaman Anda bisa mengeluarkan data Anda. Bahkan pada satu halaman per detik, itu kurang dari 20 menit.
Pengkodean hex mudah untuk ditulis dan juga menyediakan koreksi kesalahan dalam bentuk mentah (hanya ada 16 simbol yang valid).