soundcard_oscilloscope
Розбіжності
Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
| Наступна ревізія | Попередня ревізія | ||
| soundcard_oscilloscope [2013/08/16 15:04] – створено wombat | soundcard_oscilloscope [2015/09/30 22:05] (поточний) – [Существующие программы] wombat | ||
|---|---|---|---|
| Рядок 1: | Рядок 1: | ||
| + | ====== Осциллограф из звуковой платы ====== | ||
| + | ====== Схема ====== | ||
| + | |||
| + | {{:: | ||
| + | |||
| + | |||
| + | |||
| + | ====== Существующие программы ====== | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ====== Своя программа ====== | ||
| + | |||
| + | [[http:// | ||
| + | Introduction to Sound Programming with ALSA]] | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | ===== Пробная программа ===== | ||
| + | |||
| + | <file c " | ||
| + | /* | ||
| + | soundcard_oscilloscope.c | ||
| + | |||
| + | v.0.1 | ||
| + | |||
| + | 17.08.2013 Vladimir Smolyar | ||
| + | |||
| + | GPLv3 | ||
| + | |||
| + | */ | ||
| + | |||
| + | |||
| + | |||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | | ||
| + | main (int argc, char *argv[]) | ||
| + | { | ||
| + | int i,j; | ||
| + | int err; | ||
| + | int buf[128]; | ||
| + | snd_pcm_t *capture_handle; | ||
| + | snd_pcm_hw_params_t *hw_params; | ||
| + | unsigned int val,val2; | ||
| + | int dir; | ||
| + | int peak_value, average; | ||
| + | size_t size; | ||
| + | int number; | ||
| + | |||
| + | err = snd_pcm_open (& | ||
| + | if (err < 0) | ||
| + | { | ||
| + | fprintf (stderr, " | ||
| + | | ||
| + | | ||
| + | exit (1); | ||
| + | } | ||
| + | else printf(" | ||
| + | |||
| + | err = snd_pcm_hw_params_malloc (& | ||
| + | if (err < 0) | ||
| + | { | ||
| + | fprintf(stderr, | ||
| + | | ||
| + | exit (1); | ||
| + | } | ||
| + | else printf(" | ||
| + | |||
| + | err = snd_pcm_hw_params_any(capture_handle, | ||
| + | if (err < 0) | ||
| + | { | ||
| + | fprintf(stderr, | ||
| + | snd_strerror (err)); | ||
| + | exit (1); | ||
| + | } | ||
| + | else printf(" | ||
| + | | ||
| + | |||
| + | err = snd_pcm_hw_params_set_access (capture_handle, | ||
| + | if (err < 0) | ||
| + | { | ||
| + | fprintf (stderr, " | ||
| + | snd_strerror (err)); | ||
| + | exit (1); | ||
| + | } | ||
| + | else printf(" | ||
| + | |||
| + | |||
| + | err = snd_pcm_hw_params_set_format (capture_handle, | ||
| + | if (err < 0) | ||
| + | { | ||
| + | fprintf (stderr, " | ||
| + | snd_strerror (err)); | ||
| + | exit (1); | ||
| + | } | ||
| + | else printf(" | ||
| + | |||
| + | val = 44100; | ||
| + | err = snd_pcm_hw_params_set_rate_near (capture_handle, | ||
| + | if (err < 0) | ||
| + | { | ||
| + | fprintf (stderr, " | ||
| + | snd_strerror (err)); | ||
| + | exit (1); | ||
| + | } | ||
| + | else printf(" | ||
| + | |||
| + | err = snd_pcm_hw_params_set_channels (capture_handle, | ||
| + | if (err < 0) | ||
| + | { | ||
| + | fprintf (stderr, " | ||
| + | snd_strerror (err)); | ||
| + | exit (1); | ||
| + | } | ||
| + | else printf(" | ||
| + | | ||
| + | |||
| + | err = snd_pcm_hw_params (capture_handle, | ||
| + | if (err < 0) | ||
| + | { | ||
| + | fprintf(stderr, | ||
| + | snd_strerror (err)); | ||
| + | exit (1); | ||
| + | } | ||
| + | else printf(" | ||
| + | |||
| + | snd_pcm_hw_params_free (hw_params); | ||
| + | err = snd_pcm_prepare (capture_handle); | ||
| + | if (err < 0) | ||
| + | { | ||
| + | fprintf (stderr, " | ||
| + | snd_strerror (err)); | ||
| + | exit (1); | ||
| + | } | ||
| + | else printf(" | ||
| + | |||
| + | //for (i = 0; i < 10; ++i) | ||
| + | peak_value = 0; | ||
| + | average = 0; | ||
| + | while (1) | ||
| + | { | ||
| + | err = snd_pcm_readi (capture_handle, | ||
| + | if (err != 128) | ||
| + | { | ||
| + | fprintf (stderr, "read from audio interface failed (%s)\n", | ||
| + | | ||
| + | exit (1); | ||
| + | } | ||
| + | |||
| + | else | ||
| + | { | ||
| + | // | ||
| + | // | ||
| + | // | ||
| + | |||
| + | for (i=0; i<128; i++) | ||
| + | { | ||
| + | average += (abs(buf[i]) - average)/ | ||
| + | if (abs(buf[i]) > abs(peak_value)) | ||
| + | { | ||
| + | peak_value = buf[i]; | ||
| + | // | ||
| + | //write(1, *peak_value, | ||
| + | |||
| + | } | ||
| + | } | ||
| + | printf(" | ||
| + | number = round(100 * ((float) average) / 2147483648); | ||
| + | for (j=0; j < number; j++) printf(" | ||
| + | printf(">" | ||
| + | for (j=number; j < 70; j++) printf(" | ||
| + | // | ||
| + | printf(" | ||
| + | } | ||
| + | } | ||
| + | snd_pcm_close (capture_handle); | ||
| + | exit (0); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ====== Статьи ====== | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | [[http:// | ||
