如何在 Windows 上使用 gstreamer 播放 .wav 音频文件?

How to play .wav audio file with gstreamer on Windows?

wavparse documentation 提供了此示例,通过 Linux 上的扬声器使用 Alsa 音频播放 .wav 音频文件。

gst-launch-1.0 filesrc location=sine.wav ! wavparse ! audioconvert ! alsasink

我已尝试将其改编为在 Windows 上使用 wasapisinkautoaudiosink:

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

两次尝试均导致错误:

ERROR: from element /GstPipeline:pipeline0/GstWavParse:wavparse0: Internal data stream error.

完整日志如下所示:

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 在我的 PC 上工作,因为这两个命令都产生了声音:

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. 如何使用 filesrcautoaudiosink 通过我的扬声器播放 .wav 文件的内容?

也许也可以在 audioconvert 之前或之后尝试 audioresample。不完全确定当前的 windows 音频子系统——但现在硬件往往需要 48000 赫兹的采样率。如果音频子系统无法处理,您需要自己处理。