Перенос на Win

Тема в разделе "WASM.SOFTWARE", создана пользователем Andrei, 10 июн 2018.

  1. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    Для начала, её нужно упростить, до уровня читаем аудио вход, пишем в файл, ...
    А тут я пока не знаю как, это сделать
     
  2. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    В файл не пишет, после запуска зависает вот на этом ....
    Вот strace , Владимир подскажи в чем дело ?
     

    Вложения:

  3. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    Может я неправильно audio device указываю ?
     
  4. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    Подскажи в какую сторону идти то хоть ???
     
  5. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    я тебе про obs-то и сказал, чтобы ты проверил саму возможность записи из под вирты. кстати, по идее, у обс открытые сорцы и она компилится под вынь :grin:
     
  6. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    О почему в файл ничего не пишет то ?
    aplay -l показывает устройства воспроизведения, а как посмотреть устройства записи ?
    Допустим у меня микр вход, и линейный вход, где и как это указывается то ?
     
  7. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    Ты хочешь сказать что из под виртуалки данная софтина работать не будет ???
    Но в файл то писать должна ж чего нить
     
  8. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    pavucontrol, alsamixer, lspci, dmidecode ==покажут усю поднаготную системы.
     
  9. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    Неа не проходит сигнал, ни на микрофонном входе, ни на линейном, ...
    На чистом железе надо пробовать, ... может заработает
     
  10. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    Начал изучение исходника, дальше без этого никак, читаю построчно и пытаюсь понять, ...
    Получается пока не очень, ....
     
  11. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    В этом вот куске
    Код (Text):
    1.  
    2. init_soundcard(); // init soundcard for capture and playback and init the resulting WAV file
    3. if (fftw_import_wisdom_from_filename("visualwspr_fft.dat") == 0)
    4. {
    5. printf("fft wisdom not found, recreating ...\n");
    6. }
    7.  
    Вот это fftw_import_wisdom_from_filename("visualwspr_fft.dat")
    вот что ?

    ВОт это вот что runloop(); это функция ??
     
  12. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Andrei нравится это.
  13. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    Вот по существу, ответ ...., лана лана не ругайси я туплю немного, исправлюсь
     
  14. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    Выяснил что программа зависает вот на этом
    capture1s(samples);
     
  15. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    Вот код этой функции, что там не так то
    Код (Text):
    1.  
    2. void capture1s(short *samples)
    3. {
    4. int err;
    5. int rate = CAP_RATE;
    6. // capture a chunk of 1 second
    7. if ((err = snd_pcm_readi(capture_handle, samples, rate)) != rate) {
    8. printf("read from audio interface failed (%s)\n", snd_strerror(err));
    9. exit(1);
    10. }
    11. // calculate the mean value, peak value and save everything in a file srcdata.out
    12. // this file is used by the GUI to display a Spectrum and show the levels
    13. if (opmode == 'S')
    14. {
    15. for (int i = 0; i < (rate * 2); i++)
    16. meanlevel.add((float)samples[i]);
    17. // do not disturb the capture process, so fork the file-save to a child process
    18. int pid = fork();
    19. if (pid == 0)
    20. {
    21. FILE *fw = fopen("srcdata.out", "w");
    22. if (fw)
    23. {
    24. // save mean value, MSB first
    25. short val = (short)(meanlevel.getval());
    26. fprintf(fw, "%c%c", (val >> 8) & 0xff, val & 0xff);
    27. // save peak value, MSB first
    28. val = (short)(meanlevel.getmaxval());
    29. fprintf(fw, "%c%c", (val >> 8) & 0xff, val & 0xff);
    30. // save samples (I channel only), MSB first
    31. for (int i = 0; i < (rate * 2); i += 2)
    32. {
    33. fprintf(fw, "%c%c", (samples[i] >> 8) & 0xff, samples[i] & 0xff);
    34. }
    35. fclose(fw);
    36. exit(0);
    37. }
    38. }
    39. }
    40. else
    41. {
    42. for (int i = 0; i < rate; i++)
    43. meanlevel.add((float)samples[i]);
    44. // do not disturb the capture process, so fork the file-save to a child process
    45. int pid = fork();
    46. if (pid == 0)
    47. {
    48. FILE *fw = fopen("./tmp/srcdata.out", "w");
    49. if (fw)
    50. {
    51. // save mean value, MSB first
    52. short val = (short)(meanlevel.getval());
    53. fprintf(fw, "%c%c", (val >> 8) & 0xff, val & 0xff);
    54. // save peak value, MSB first
    55. val = (short)(meanlevel.getmaxval());
    56. fprintf(fw, "%c%c", (val >> 8) & 0xff, val & 0xff);
    57. // save samples, MSB first
    58. for (int i = 0; i < rate; i++)
    59. {
    60. fprintf(fw, "%c%c", (samples[i] >> 8) & 0xff, samples[i] & 0xff);
    61. }
    62. fclose(fw);
    63. exit(0);
    64. }
    65. }
    66. }
    67. }
    68.  
     
  16. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    Файл srcdata не создаётся в каталоге, значит программа еще до этого виснет,
     
  17. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    Поставил закладки, в виде printf("метка");
    Выяснил что доходит вот до этого блока и висит ...
    Код (Text):
    1.  
    2. if ((err = snd_pcm_readi(capture_handle, samples, rate)) != rate) {
    3. printf("read from audio interface failed (%s)\n", snd_strerror(err));
    4. exit(1);
    5. }
    6.  
     
  18. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Зависает на чтении данных из аудиоинтерфейса.
     
    Andrei нравится это.
  19. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    Исключил этот блок /* block */
    Программа стала отрабатывать как положено в смысле логики, но в файлах ерунда какая то ...
    Ищу дальше, ...
     
  20. Andrei

    Andrei Member

    Публикаций:
    0
    Регистрация:
    13 апр 2018
    Сообщения:
    322
    Да точно, наверное, сигнал на виртуалку не проходит, выход есть, а входа нет ...
    На чистом железе надо пробовать, ....