Непрерывно запускать aubiopitch для файлового дескриптора

Я хотел бы использовать aubiopitch непрерывно выводить частоту сигнала, поступающего от входного источника. поскольку aubiopitch любит, чтобы его ввод был файлом, а не потоком, я пытался использовать подстановку процесса:

$ aubiopitch -i <(sox -q -d -t wav -)

Я ожидаю, что это выведет частоту считываемого сигнала с моего устройства ввода звука по умолчанию. Вместо этого я получил это:

./sox WARN wav: Length in output .wav header will be wrong since can't seek to fix it
AUBIO ERROR: source_apple_audio: Failed opening /dev/fd/63, error in ExtAudioFileOpenURL (-40)
AUBIO ERROR: source_wavread: could not find RIFF header in /dev/fd/63
AUBIO ERROR: source: failed creating aubio source with /dev/fd/63 at samplerate 0 with hop_size 256
Error: could not open input file /dev/fd/63

Проблема, кажется, не в sox, так как эта команда работает нормально:

cat <(sox -q -d -t wav -) > output.wav

Это создает output.wav файл, который, кажется, не имеет проблем при воспроизведении, кроме aubiopitch конечно:

$ aubiopitch output.wav
Segmentation fault: 11

Что тут происходит? Проблема с заголовком RIFF, имеющим неправильную длину?

Если это имеет значение, я использую OSX 10.7.5 и перекомпилировал aubio для работы с моей старой версией OSX.

1 ответ

$ sox -q -d -t wav - | aubiopitch -i -

Когда скомпилировано с поддержкой libsndfile, '-' = stdinТаким образом, приведенная выше команда может дать следующий вывод.

sox WARN wav: Length in output .wav header will be wrong since can't seek to fix it
0.000000 0.000000
0.005805 707.323486
0.011610 [...]

Если вы собрали aubio с большим количеством источников (avcodec или же apple_audio), вы получите больше предупреждений. Вы можете скрыть эти предупреждения, перенаправив stderr в /dev/null, Вот пример с aubioonset:

$ ( sox -q -d -t wav - | aubioonset -i - ) 2> /dev/null
0.000000
0.096871
0.279297
[...]
Другие вопросы по тегам