Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Перехват звукового потока  (Прочитано 2613 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Agent_00

  • Автор темы
  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Перехват звукового потока
« : 08 Февраля 2012, 17:38:21 »
Доброе время суток.
Необходимо перехватывать звуковой поток с микрофона в реальном времени и посылать его на обработку в скрипт, так чтобы скрипт не пропустил ни один фрагмент потока.
Какими стандартными средствами лучше всего это сделать, или может есть уже готовые решения.

Думаю делать так:
записывать весь поток с микрофона с помощью rec в файл audio#.wav и затем запускать скрипт на обработку этих файлов файлов.
« Последнее редактирование: 08 Февраля 2012, 19:10:14 от Agent_00 »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Перехват звукового потока
« Ответ #1 : 09 Февраля 2012, 05:22:18 »
ну запусти из скрипта стандартную звукозапись
скрипт бу га га..., реальное время му ха ха...

поще надо быть. скажи что в итоге это должно быть а тебе скажут как это на самом деле делается без всяких фантазий с твоей стороны

Оффлайн Agent_00

  • Автор темы
  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: Перехват звукового потока
« Ответ #2 : 09 Февраля 2012, 09:22:44 »
Надо брать звук с микрофона (линейный вход) -> убрать шумы (желательно) -> отправить отфильтрованный звук в мою программу(скрипт). Разумеется пока идет анализ текущего фрагмента, следующий фрагмент за ним не должен пропасть, а тоже пойти на анализ(последовательно или параллельно).
« Последнее редактирование: 09 Февраля 2012, 15:48:11 от Agent_00 »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Перехват звукового потока
« Ответ #3 : 09 Февраля 2012, 20:10:01 »
скрипт... как много в этом звуке...
на чем скрипт
на этом форуме мы видели скрипты на Си.. и ни чего
детальнее.. что за анализ?
как ты будешь "убрать шумы"? волшебной палочкой? не ну а вдруг я не знаю может есть такие алгоритмы. название в студию

захват звука прекрасно описан в документации к ALSA
параллельное программирование это сложнее но тоже решаемо, описано в еще большем количестве документаций к различным фреймворкам

не стесняйся. выкладывай всё.

Оффлайн Agent_00

  • Автор темы
  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: Перехват звукового потока
« Ответ #4 : 09 Февраля 2012, 21:44:15 »
Для начала меня интересует направление потока, возможно ли его на ходу переправить в скрипт. Как я понял вы предлагаете смотреть в сторону alsa. Пока склоняюсь к записи звука в файл через sox c интервалом в 2 секунды, после чего вызывать скрипт, который будет последовательно обрабатывать записанные файлы. Что касается языка программирования, то смотрю в сторону php.

P.S. Для начала хотя бы получить звук и нарисовать спектр.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Перехват звукового потока
« Ответ #5 : 10 Февраля 2012, 06:41:15 »
1) с таким подходом без перерыва не получится
2) рекомендую выкинуть нафиг php и посмотреть на Си у него и с отрисовкой сильно лучше и со всем остальным

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Перехват звукового потока
« Ответ #6 : 10 Февраля 2012, 08:16:36 »
Для начала меня интересует направление потока, возможно ли его на ходу переправить в скрипт.
Можно даже разветвить на несколько труб
man tee

Оффлайн Agent_00

  • Автор темы
  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: Перехват звукового потока
« Ответ #7 : 10 Февраля 2012, 08:21:13 »
А если например пишем файлы sox таким образом: input_0.wav, input_1.wav, ... input_9.wav, как только файл записан, например input_0.wav, скрипт проверяет, с каким числом существует файл, берет самый наименьший, рисует спектр, удаляет файл, ищет слудующий. В то время, как sox запишет файл с номером 9 начнет писать снова с 0 и так далее. Мне кажется такой "конвеер" спсобен обеспечить непрерывность с незначительной задержкой. Но могу ошибаться.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Перехват звукового потока
« Ответ #8 : 10 Февраля 2012, 08:33:10 »
Такие вещи делают минимум с двумя буферами (максимум более двух). Пока в один пишут в другом обрабатывают.
Именно так разносится последовательная обработка по разным потокам, хостам.

Оффлайн Agent_00

  • Автор темы
  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: Перехват звукового потока
« Ответ #9 : 10 Февраля 2012, 09:09:51 »
А пример какой-нибудь можно?

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: Перехват звукового потока
« Ответ #10 : 28 Февраля 2012, 03:23:56 »
Необходимо перехватывать звуковой поток с микрофона в реальном времени и посылать его на обработку в скрипт, так чтобы скрипт не пропустил ни один фрагмент потока.
Какими стандартными средствами лучше всего это сделать, или может есть уже готовые решения.
хорошая задача, ... люблю я такие потоковые задачи.
только не скрипт, конечно, а программа-фильтр + объединить нужные такие фильтры в конвейер - может вообще ничего особенно и писать не придётся, использовать уже наработанные мощные пакеты sox, speex, ogg (vorbis).

А пример какой-нибудь можно?
примеры - можно:

1. использование конвейеров с потоками ... что-то по типу:
$ speexdec -V male.spx - | tee male3.raw | sox -traw -u -sw -r8000 - -t alsa defaultподставляйте свои-фильтры обработчики...

2. вот здесь есть несколько примеров в коде С:
http://rus-linux.net/nlib.php?name=/MyLDP/BOOKS/Linux-tools/10/ltfwp-10-05.html
- там вам и обменная буферизация, и обмен через pipe, и другие красоты... там без особых объяснений, потому как это из другой работы притянуто в качестве примера, но разобраться можно.
P.S. в принципе, там же рядом, можете найти архив примеров, где все эти примеры с Makefile для сборки и протоколами работы.
 


Пользователь решил продолжить мысль 29 Февраля 2012, 01:56:21:
1. использование конвейеров с потоками ... что-то по типу:
$ speexdec -V male.spx - | tee male3.raw | sox -traw -u -sw -r8000 - -t alsa defaultподставляйте свои-фильтры обработчики...
вот на этот пример хотелось бы особо обратить внимание, тех кому нужно обрабатывать потоковые сигналы (аудио, видео и др. ... например, радиолокацию ;)), потому как это вещи вовсе не очевидные:
- использовать конвейеры для передачи символьной информации - это все умеют, по типу:
$ cat file.txt | grep xxx
- но конвейеры не предполагают никакой разметки или форматирования потока данных, поэтому через них отлично происходит обмен бинарной информацией, как вот в той команде примера...
- это позволяет их из своего программного кода компоновать сигнальные обработчики-фильтры произвольным образом (например, в VoIP  гнать через эти пайпы SIP-пакеты, или сопутствующий SIP-у RTP сигнальный поток).
 
« Последнее редактирование: 29 Февраля 2012, 01:56:21 от Olej »

 

Страница сгенерирована за 0.052 секунд. Запросов: 25.