URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9761
[ Назад ]

Исходное сообщение
"sox stat"

Отправлено vfp7 , 17-Окт-13 12:50 
Добрый день

Имеем такую строку:

  sox -V0 -tossdsp -r48000 -c2 /dev/dsp3.1 -traw /dev/null stat trim 0 3

Она считывает с звуковой карты 3 сек звукового потока и выводит статистику по этому потоку:

Input File     : '/dev/dsp3.1' (ossdsp)
Channels       : 2
Sample Rate    : 48000
Precision      : 16-bit
Sample Encoding: 16-bit Signed Integer PCM

In:0.00% 00:00:03.07 [00:00:00.00] Out:144k  [======|=====!] Hd:0.0 Clip:0
Samples read:            294912
Length (seconds):      3.072000
Scaled by:         2147483647.0
Maximum amplitude:     0.999969
Minimum amplitude:    -1.000000
Midline amplitude:    -0.000015
Mean    norm:          0.338436
Mean    amplitude:    -0.000044
RMS     amplitude:     0.418896
Maximum delta:         1.768463
Minimum delta:         0.000000
Mean    delta:         0.254371
RMS     delta:         0.320575
Rough   frequency:         5846
Volume adjustment:        1.000
Done.

Задача выщипнуть значение "1.768463" из строки "Maximum delta"        
Вариант добавить в конце | grep 'Maximum delta' не прокатывает, sox ждет продолжения команд.
Заранее спасибо.


Содержание

Сообщения в этом обсуждении
"sox stat"
Отправлено михалыч , 17-Окт-13 14:14 
> Задача выщипнуть значение "1.768463" из строки "Maximum delta"
> Вариант добавить в конце | grep 'Maximum delta' не прокатывает, sox ждет
> продолжения команд.
> Заранее спасибо.

А если так ущипнуть, добавить после grep'а
| awk '{print $3}'
или
| awk -F: '{print $2}'


"sox stat"
Отправлено vfp7 , 17-Окт-13 14:51 
>> Задача выщипнуть значение "1.768463" из строки "Maximum delta"
>> Вариант добавить в конце | grep 'Maximum delta' не прокатывает, sox ждет
>> продолжения команд.
>> Заранее спасибо.
> А если так ущипнуть, добавить после grep'а
> | awk '{print $3}'
> или
> | awk -F: '{print $2}'

Здесь самое главное и заключается как вывод sox с stdout завернуть на grep ...
Дальше уже дело техники :)


"sox stat"
Отправлено михалыч , 17-Окт-13 15:33 
>[оверквотинг удален]
>>> Вариант добавить в конце | grep 'Maximum delta' не прокатывает, sox ждет
>>> продолжения команд.
>>> Заранее спасибо.
>> А если так ущипнуть, добавить после grep'а
>> | awk '{print $3}'
>> или
>> | awk -F: '{print $2}'
> Здесь самое главное и заключается как вывод sox с stdout завернуть на
> grep ...
> Дальше уже дело техники :)

echo | sox -V0 -tossdsp -r48000 -c2 /dev/dsp3.1 -traw /dev/null stat trim 0 3


"sox stat"
Отправлено vfp7 , 17-Окт-13 16:16 
>[оверквотинг удален]
>>>> Заранее спасибо.
>>> А если так ущипнуть, добавить после grep'а
>>> | awk '{print $3}'
>>> или
>>> | awk -F: '{print $2}'
>> Здесь самое главное и заключается как вывод sox с stdout завернуть на
>> grep ...
>> Дальше уже дело техники :)
> echo | sox -V0 -tossdsp -r48000 -c2 /dev/dsp3.1 -traw /dev/null stat trim
> 0 3

Тоже не проходит :)
Не отрабатывает ...


"sox stat"
Отправлено михалыч , 17-Окт-13 16:20 
Какой-то хитрый у вас терминал. Висит что-ли?
И как это вы так умудрились, у меня не получается!
Ну, а если записать вывод во временный файл и после взять оттуда?

"sox stat"
Отправлено vfp7 , 17-Окт-13 16:33 
> Какой-то хитрый у вас терминал. Висит что-ли?
> И как это вы так умудрились, у меня не получается!
> Ну, а если записать вывод во временный файл и после взять оттуда?

Я не ищу легких путей :)
Когда то я кодил на lisp, наверно оттуда привычка стараться закодировать одной строчкой.
Плюс я всегда оптимизирую код по максимуму, запись времянки добавит дополнительные дисковые операции в систему ... :)
И лучше один раз отмучиться и решить проблему от и до, тем более аналогов этому всему я в инете не нашел, не в ру не в енг.
Эта строка всего лишь маленький кусок кода полностью автоматизированной системы звукового оформления организаций.
Плюс этот модуль был бы крайне актуален интернет радиостанциям и т.п.
Этот код позволяет гарантировать, что на конечном устройстве - выходе звуковой карты, присутствует сигнал, то есть идет трансляция.
При пропадании сигнала - запуск скрипта меняющего источник входного сигнала, посылка сообщения о сбое на линии и т.д. :)
Так что лучше добиться надежной работы без костылей :)


"sox stat"
Отправлено михалыч , 17-Окт-13 16:43 
>[оверквотинг удален]
> более аналогов этому всему я в инете не нашел, не в
> ру не в енг.
> Эта строка всего лишь маленький кусок кода полностью автоматизированной системы звукового
> оформления организаций.
> Плюс этот модуль был бы крайне актуален интернет радиостанциям и т.п.
> Этот код позволяет гарантировать, что на конечном устройстве - выходе звуковой карты,
> присутствует сигнал, то есть идет трансляция.
> При пропадании сигнала - запуск скрипта меняющего источник входного сигнала, посылка сообщения
> о сбое на линии и т.д. :)
> Так что лучше добиться надежной работы без костылей :)

А тут ==> http://www.opennet.me/openforum/vsluhforumID9/9749.html что, не пригодилось?
pavlinux там опечатался, чуть подправив всё собирается как надо.


#!/bin/sh

avs="/tmp/avs"

cat > ${avs}.c <<EOT
#include <stdio.h>
main() {
    long a, b, c;
    a = b = c = 0;
    for ( a = 0; b = getchar(), b != EOF; ++a, c+=b );
    printf ("%ld\n", c/a);
}
EOT

gcc ${avs}.c -o ${avs}
rm ${avs}.c
head -c1000 /dev/dsp0.1 | ${avs}

И всё же я не понимаю, в чём у вас с sox засада?


"sox stat"
Отправлено vfp7 , 17-Окт-13 17:02 
Это решение через костыль.
В соксе засада, что результат своей работы ( директивы stat ), он отдает в stdout, минуя pipe
Я не могу добраться до результата работы stat

Это результат на экране:

Input File     : '/dev/dsp3.1' (ossdsp)
Channels       : 2
Sample Rate    : 48000
Precision      : 16-bit
Sample Encoding: 16-bit Signed Integer PCM

In:0.00% 00:00:03.07 [00:00:00.00] Out:144k  [======|=====!] Hd:0.0 Clip:0
Samples read:            294912
Length (seconds):      3.072000
Scaled by:         2147483647.0
Maximum amplitude:     0.999969
Minimum amplitude:    -1.000000
Midline amplitude:    -0.000015
Mean    norm:          0.338436
Mean    amplitude:    -0.000044
RMS     amplitude:     0.418896
Maximum delta:         1.768463
Minimum delta:         0.000000
Mean    delta:         0.254371
RMS     delta:         0.320575
Rough   frequency:         5846
Volume adjustment:        1.000
Done.

И я не могу завернуть в grep этот вывод, что бы выщипнуть всего одно значение от сюда - 1.768463


"sox stat"
Отправлено Andrey Mitrofanov , 17-Окт-13 17:23 
> Это решение через костыль.
> В соксе засада, что результат своей работы ( директивы stat ), он
> отдает в stdout, минуя pipe

Может быть в *stderr* ? Тогда 2>&1 должен сапсти отца демогратии.

Если он, паршивец, конечно, не пишет в tty (или как оно там)... Хотя неее, это ж не ДОС.


> Я не могу добраться до результата работы stat
> Maximum delta:         1.768463
> И я не могу завернуть в grep этот вывод, что бы выщипнуть
> всего одно значение от сюда - 1.768463

Ну, как завернёшь, выбрось греп и делай, как большой

2>&1 |awk '/^Maximum delta:/{print$NF}'


"sox stat"
Отправлено Andrey Mitrofanov , 17-Окт-13 17:26 
> Может быть в *stderr* ? Тогда 2>&1 должен сапсти отца демогратии.
> Если он, паршивец, конечно, не пишет в tty (или как оно там)...
> Хотя неее, это ж не ДОС.

//Имел в виду INT 10h против STDOUT в DOS, если кому.

> Ну, как завернёшь, выбрось греп и делай, как большой
> 2>&1 |awk '/^Maximum delta:/{print$NF}'

Второй приём (да, когда в руках молоток...)

2>&1 |sed -n 's/^Maximum delta: *//p'


"sox stat"
Отправлено михалыч , 17-Окт-13 17:51 
> Может быть в *stderr* ? Тогда 2>&1

А всё-таки
> Если он, паршивец,
>> отдает в stdout

тогда вроде как наоборот? 1>&2

Может попробовать |tee прикрутить?

Да, нахрен!
Перекрываем кислород полностью, пусть теперь потрепыхается!
Закрывает ему стандартный вывод >&-  ))))


"sox stat"
Отправлено vfp7 , 17-Окт-13 18:46 
>> Может быть в *stderr* ? Тогда 2>&1
> А всё-таки
>> Если он, паршивец,
>>> отдает в stdout
> тогда вроде как наоборот? 1>&2
> Может попробовать |tee прикрутить?
> Да, нахрен!
> Перекрываем кислород полностью, пусть теперь потрепыхается!
> Закрывает ему стандартный вывод >&-  ))))

Когда перекрыл кислород, то заметил что вывод stat отрабатывает ДО момента перекрывания кислорода.

Честно говоря я уже начал буксовать, похоже что sox stat сперва выдает на экран свои данные, и только после этого передает управление далее ...
Моих познаний здесь не хватит ...

FreeBSD 9.1-RELEASE-p6 Generic x64, минимальные вмешательства в систему - это если кто то захочет повторить ситуацию.


"sox stat"
Отправлено михалыч , 17-Окт-13 19:37 
> sox -V0 -tossdsp -r48000 -c2 /dev/dsp3.1 -traw /dev/null stat trim 0 3

А зачем здесь /dev/null ?

-n, --null
              Using a null file to output  audio  amounts  to  discarding  the
              audio and is useful mainly with effects that produce information
              about the audio instead of affecting it (such  as  noiseprof  or
              stat).


"sox stat"
Отправлено vfp7 , 22-Окт-13 09:09 
>[оверквотинг удален]
>   Using a null file to output  audio  
> amounts  to  discarding  the
>            
>   audio and is useful mainly with effects that produce
> information
>            
>   about the audio instead of affecting it (such  
> as  noiseprof  or
>            
>   stat).

Этот код тестовый, пробую все варианты, но вывод на экран так и не удалось перехватить :(


"sox stat"
Отправлено Andrey Mitrofanov , 17-Окт-13 17:27 
> А если так ущипнуть, добавить после grep'а
> | awk

Useless use of grep! (google://useless use of cat)