Как воспроизвести аудиофайл .wav с помощью gstreamer в Windows?

#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 Гц. Если аудиоподсистема не позаботится об этом, вам нужно позаботиться об этом самостоятельно.