talvez ./merge <(cat) <(./sine 1000)
Estou tentando criar um script capaz de processar infinitamente um fluxo de entrada que é canalizado para ele, e produzir continuamente um fluxo de saída que pode ser canalizado para algo diferente da seguinte maneira:
<infinitely produce data stream> | myscript | <use modified stream>
No meu caso, eu tenho um programa que gerará continuamente uma sinusóide wav sem cabeçalho que será canalizada para o meu script que irá misturá-lo com outros sinusóides, e passá-lo para um programa que irá tocá-lo conforme flui.
Eu tentei usar
#!/bin/bash
while read data; do
#echo "data = $data"
./merge <($data) <(./sine 1000)
done
Mas isso só deixa símbolos malucos em todo o meu terminal. Parece que, para cada linha de stdin que recebe, ele chama mesclagem de novo e de novo.
Meu programa de mesclagem é escrito em C e é escrito de forma a abrir um arquivo passado como argumento.
Funciona bem quando eu corro no terminal como
./merge <(./sine 1000) <(./sine 2000) | ./audio_sink
Isso tem duas instâncias de sine running, gerando ondas senoidais de 1kHz e 2kHz respectivamente, e merge lê os dois fluxos de entrada, mistura-os e produz uma saída para sdtout que pode ser canalizada para audio_sink e eu posso ouvir que está funcionando .
Neste script que estou escrevendo, preciso canalizar o direcionamento de entrada para o primeiro argumento, conforme acima.
Como você pode escrever um script bash que permite usar dados continuamente canalizados, manipulá-los e fazer com que os dados sejam enviados de volta?