Для начала, её нужно упростить, до уровня читаем аудио вход, пишем в файл, ... А тут я пока не знаю как, это сделать
я тебе про obs-то и сказал, чтобы ты проверил саму возможность записи из под вирты. кстати, по идее, у обс открытые сорцы и она компилится под вынь
О почему в файл ничего не пишет то ? aplay -l показывает устройства воспроизведения, а как посмотреть устройства записи ? Допустим у меня микр вход, и линейный вход, где и как это указывается то ?
Ты хочешь сказать что из под виртуалки данная софтина работать не будет ??? Но в файл то писать должна ж чего нить
Неа не проходит сигнал, ни на микрофонном входе, ни на линейном, ... На чистом железе надо пробовать, ... может заработает
Начал изучение исходника, дальше без этого никак, читаю построчно и пытаюсь понять, ... Получается пока не очень, ....
В этом вот куске Код (Text): init_soundcard(); // init soundcard for capture and playback and init the resulting WAV file if (fftw_import_wisdom_from_filename("visualwspr_fft.dat") == 0) { printf("fft wisdom not found, recreating ...\n"); } Вот это fftw_import_wisdom_from_filename("visualwspr_fft.dat") вот что ? ВОт это вот что runloop(); это функция ??
Ну есть же документация, гуглится в два приёма, ёлки-палки. http://www.fftw.org/fftw3_doc/Wisdom.html#Wisdom
Вот код этой функции, что там не так то Код (Text): void capture1s(short *samples) { int err; int rate = CAP_RATE; // capture a chunk of 1 second if ((err = snd_pcm_readi(capture_handle, samples, rate)) != rate) { printf("read from audio interface failed (%s)\n", snd_strerror(err)); exit(1); } // calculate the mean value, peak value and save everything in a file srcdata.out // this file is used by the GUI to display a Spectrum and show the levels if (opmode == 'S') { for (int i = 0; i < (rate * 2); i++) meanlevel.add((float)samples[i]); // do not disturb the capture process, so fork the file-save to a child process int pid = fork(); if (pid == 0) { FILE *fw = fopen("srcdata.out", "w"); if (fw) { // save mean value, MSB first short val = (short)(meanlevel.getval()); fprintf(fw, "%c%c", (val >> 8) & 0xff, val & 0xff); // save peak value, MSB first val = (short)(meanlevel.getmaxval()); fprintf(fw, "%c%c", (val >> 8) & 0xff, val & 0xff); // save samples (I channel only), MSB first for (int i = 0; i < (rate * 2); i += 2) { fprintf(fw, "%c%c", (samples[i] >> 8) & 0xff, samples[i] & 0xff); } fclose(fw); exit(0); } } } else { for (int i = 0; i < rate; i++) meanlevel.add((float)samples[i]); // do not disturb the capture process, so fork the file-save to a child process int pid = fork(); if (pid == 0) { FILE *fw = fopen("./tmp/srcdata.out", "w"); if (fw) { // save mean value, MSB first short val = (short)(meanlevel.getval()); fprintf(fw, "%c%c", (val >> 8) & 0xff, val & 0xff); // save peak value, MSB first val = (short)(meanlevel.getmaxval()); fprintf(fw, "%c%c", (val >> 8) & 0xff, val & 0xff); // save samples, MSB first for (int i = 0; i < rate; i++) { fprintf(fw, "%c%c", (samples[i] >> 8) & 0xff, samples[i] & 0xff); } fclose(fw); exit(0); } } } }
Поставил закладки, в виде printf("метка"); Выяснил что доходит вот до этого блока и висит ... Код (Text): if ((err = snd_pcm_readi(capture_handle, samples, rate)) != rate) { printf("read from audio interface failed (%s)\n", snd_strerror(err)); exit(1); }
Исключил этот блок /* block */ Программа стала отрабатывать как положено в смысле логики, но в файлах ерунда какая то ... Ищу дальше, ...
Да точно, наверное, сигнал на виртуалку не проходит, выход есть, а входа нет ... На чистом железе надо пробовать, ....