Добрый деньИмеем такую строку:
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 PCMIn: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 ждет продолжения команд.
Заранее спасибо.
> Задача выщипнуть значение "1.768463" из строки "Maximum delta"
> Вариант добавить в конце | grep 'Maximum delta' не прокатывает, sox ждет
> продолжения команд.
> Заранее спасибо.А если так ущипнуть, добавить после grep'а
| awk '{print $3}'
или
| awk -F: '{print $2}'
>> Задача выщипнуть значение "1.768463" из строки "Maximum delta"
>> Вариант добавить в конце | grep 'Maximum delta' не прокатывает, sox ждет
>> продолжения команд.
>> Заранее спасибо.
> А если так ущипнуть, добавить после grep'а
> | awk '{print $3}'
> или
> | awk -F: '{print $2}'Здесь самое главное и заключается как вывод sox с stdout завернуть на grep ...
Дальше уже дело техники :)
>[оверквотинг удален]
>>> Вариант добавить в конце | 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
>[оверквотинг удален]
>>>> Заранее спасибо.
>>> А если так ущипнуть, добавить после 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Тоже не проходит :)
Не отрабатывает ...
Какой-то хитрый у вас терминал. Висит что-ли?
И как это вы так умудрились, у меня не получается!
Ну, а если записать вывод во временный файл и после взять оттуда?
> Какой-то хитрый у вас терминал. Висит что-ли?
> И как это вы так умудрились, у меня не получается!
> Ну, а если записать вывод во временный файл и после взять оттуда?Я не ищу легких путей :)
Когда то я кодил на lisp, наверно оттуда привычка стараться закодировать одной строчкой.
Плюс я всегда оптимизирую код по максимуму, запись времянки добавит дополнительные дисковые операции в систему ... :)
И лучше один раз отмучиться и решить проблему от и до, тем более аналогов этому всему я в инете не нашел, не в ру не в енг.
Эта строка всего лишь маленький кусок кода полностью автоматизированной системы звукового оформления организаций.
Плюс этот модуль был бы крайне актуален интернет радиостанциям и т.п.
Этот код позволяет гарантировать, что на конечном устройстве - выходе звуковой карты, присутствует сигнал, то есть идет трансляция.
При пропадании сигнала - запуск скрипта меняющего источник входного сигнала, посылка сообщения о сбое на линии и т.д. :)
Так что лучше добиться надежной работы без костылей :)
>[оверквотинг удален]
> более аналогов этому всему я в инете не нашел, не в
> ру не в енг.
> Эта строка всего лишь маленький кусок кода полностью автоматизированной системы звукового
> оформления организаций.
> Плюс этот модуль был бы крайне актуален интернет радиостанциям и т.п.
> Этот код позволяет гарантировать, что на конечном устройстве - выходе звуковой карты,
> присутствует сигнал, то есть идет трансляция.
> При пропадании сигнала - запуск скрипта меняющего источник входного сигнала, посылка сообщения
> о сбое на линии и т.д. :)
> Так что лучше добиться надежной работы без костылей :)А тут ==> http://www.opennet.me/openforum/vsluhforumID9/9749.html что, не пригодилось?
pavlinux там опечатался, чуть подправив всё собирается как надо.
#!/bin/shavs="/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);
}
EOTgcc ${avs}.c -o ${avs}
rm ${avs}.c
head -c1000 /dev/dsp0.1 | ${avs}И всё же я не понимаю, в чём у вас с sox засада?
Это решение через костыль.
В соксе засада, что результат своей работы ( директивы stat ), он отдает в stdout, минуя pipe
Я не могу добраться до результата работы statЭто результат на экране:
Input File : '/dev/dsp3.1' (ossdsp)
Channels : 2
Sample Rate : 48000
Precision : 16-bit
Sample Encoding: 16-bit Signed Integer PCMIn: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
> Это решение через костыль.
> В соксе засада, что результат своей работы ( директивы stat ), он
> отдает в stdout, минуя pipeМожет быть в *stderr* ? Тогда 2>&1 должен сапсти отца демогратии.
Если он, паршивец, конечно, не пишет в tty (или как оно там)... Хотя неее, это ж не ДОС.
> Я не могу добраться до результата работы stat
> Maximum delta: 1.768463
> И я не могу завернуть в grep этот вывод, что бы выщипнуть
> всего одно значение от сюда - 1.768463Ну, как завернёшь, выбрось греп и делай, как большой
2>&1 |awk '/^Maximum delta:/{print$NF}'
> Может быть в *stderr* ? Тогда 2>&1 должен сапсти отца демогратии.
> Если он, паршивец, конечно, не пишет в tty (или как оно там)...
> Хотя неее, это ж не ДОС.//Имел в виду INT 10h против STDOUT в DOS, если кому.
> Ну, как завернёшь, выбрось греп и делай, как большой
> 2>&1 |awk '/^Maximum delta:/{print$NF}'Второй приём (да, когда в руках молоток...)
2>&1 |sed -n 's/^Maximum delta: *//p'
> Может быть в *stderr* ? Тогда 2>&1А всё-таки
> Если он, паршивец,
>> отдает в stdoutтогда вроде как наоборот? 1>&2
Может попробовать |tee прикрутить?
Да, нахрен!
Перекрываем кислород полностью, пусть теперь потрепыхается!
Закрывает ему стандартный вывод >&- ))))
>> Может быть в *stderr* ? Тогда 2>&1
> А всё-таки
>> Если он, паршивец,
>>> отдает в stdout
> тогда вроде как наоборот? 1>&2
> Может попробовать |tee прикрутить?
> Да, нахрен!
> Перекрываем кислород полностью, пусть теперь потрепыхается!
> Закрывает ему стандартный вывод >&- ))))Когда перекрыл кислород, то заметил что вывод stat отрабатывает ДО момента перекрывания кислорода.
Честно говоря я уже начал буксовать, похоже что sox stat сперва выдает на экран свои данные, и только после этого передает управление далее ...
Моих познаний здесь не хватит ...FreeBSD 9.1-RELEASE-p6 Generic x64, минимальные вмешательства в систему - это если кто то захочет повторить ситуацию.
> 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).
>[оверквотинг удален]
> 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).Этот код тестовый, пробую все варианты, но вывод на экран так и не удалось перехватить :(
> А если так ущипнуть, добавить после grep'а
> | awkUseless use of grep! (google://useless use of cat)