#windows #audio #gstreamer #wav #gstreamer-1.0
#Windows #Аудио #gstreamer #wav #gstreamer-1.0
Вопрос:
В wavparse
документации приведен этот пример для воспроизведения .wav
аудиофайла через динамики в Linux с помощью Alsa audio.
gst-launch-1.0 filesrc location=sine.wav ! wavparse ! audioconvert ! alsasink
Я попытался адаптировать это для использования в Windows с wasapisink
или autoaudiosink
:
gst-launch-1.0.exe -v filesrc location=1.wav ! wavparse ! audioconvert ! autoaudiosink
gst-launch-1.0.exe -v filesrc location=1.wav ! wavparse ! audioconvert ! wasapisink
Обе попытки приводят к ошибке:
ОШИБКА: из элемента /GstPipeline:pipeline0/GstWavParse:wavparse0: Ошибка внутреннего потока данных.
Полные журналы выглядят следующим образом:
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstWavParse:wavparse0.GstPad:src: caps = audio/x-raw, format=(string)S16LE, layout=(string)interleaved, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, rate=(int)44100
ERROR: from element /GstPipeline:pipeline0/GstWavParse:wavparse0: Internal data stream error.
Additional debug info:
../gst/wavparse/gstwavparse.c(2308): gst_wavparse_loop (): /GstPipeline:pipeline0/GstWavParse:wavparse0:
streaming stopped, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
ERROR: from element /GstPipeline:pipeline0/GstAutoAudioSink:autoaudiosink0/GstWasapiSink:autoaudiosink0-actual-sink-wasapi: The stream is in the wrong format.
Additional debug info:
../gst-libs/gst/audio/gstaudiobasesink.c(1117): gst_audio_base_sink_wait_event (): /GstPipeline:pipeline0/GstAutoAudioSink:autoaudiosink0/GstWasapiSink:autoaudiosink0-actual-sink-wasapi:
Sink not negotiated before eos event.
ERROR: pipeline doesn't want to preroll.
Freeing pipeline ...
Я пробовал использовать несколько .wav
файлов из разных источников. Всегда один и тот же результат.
Я подтвердил, что autoaudiosink
работает на моем компьютере, потому что обе эти команды генерировали звуковой сигнал:
gst-launch-1.0.exe -v audiotestsrc samplesperbuffer=160 ! audioconvert ! autoaudiosink
gst-launch-1.0.exe -v audiotestsrc samplesperbuffer=160 ! autoaudiosink
Я также подтвердил, что playbin
могу воспроизводить файл через свои динамики, но у меня это не работает, потому что в конечном итоге мне нужно будет еще немного разделить конвейер.
gst-launch-1.0.exe -v playbin uri=file:///C:/1.wav
Я использую gstreamer 1.18,0 с Windows 10. Как мне воспроизвести содержимое .wav
файла через динамики, используя filesrc
и autoaudiosink
?
Ответ №1:
Может быть, попробовать audioresample
до или после audioconvert
тоже. Не совсем уверен в современных аудиосистемах Windows, но в настоящее время аппаратное обеспечение, как правило, требует частоты дискретизации 48000 Гц. Если аудиоподсистема не позаботится об этом, вам нужно позаботиться об этом самостоятельно.