basic-tutorial-3: Add audioresample
authorVivia Nikolaidou <vivia@ahiru.eu>
Mon, 27 Jan 2020 13:53:27 +0000 (15:53 +0200)
committerVivia Nikolaidou <vivia@ahiru.eu>
Wed, 29 Jan 2020 22:10:20 +0000 (00:10 +0200)
If the sink chosen by autoaudiosink doesn't do resampling internally,
the pipeline may fail. In this specific case, someone on Windows had
configured their sound card to 96000 instead of 48000 and the tutorial
was failing.

Thanks to Olivi55 from IRC for reporting.

markdown/tutorials/basic/dynamic-pipelines.md

index 96f546b..652a1e9 100644 (file)
@@ -279,6 +279,7 @@ This is a forward reference, to be used later.
 /* Create the elements */
 data.source = gst_element_factory_make ("uridecodebin", "source");
 data.convert = gst_element_factory_make ("audioconvert", "convert");
+data.resample = gst_element_factory_make ("audioresample", "resample");
 data.sink = gst_element_factory_make ("autoaudiosink", "sink");
 ```
 
@@ -293,6 +294,11 @@ making sure that this example will work on any platform, since the
 format produced by the audio decoder might not be the same that the
 audio sink expects.
 
+`audioresample` is useful for converting between different audio sample rates,
+similarly making sure that this example will work on any platform, since the
+audio sample rate produced by the audio decoder might not be one that the audio
+sink supports.
+
 The `autoaudiosink` is the equivalent of `autovideosink` seen in the
 previous tutorial, for audio. It will render the audio stream to the
 audio card.
@@ -401,11 +407,11 @@ if (!g_str_has_prefix (new_pad_type, "audio/x-raw")) {
 }
 ```
 
-Now we will check the type of data this new pad is going to output,
-because we are only interested in pads producing audio. We have
-previously created a piece of pipeline which deals with audio (an
-`audioconvert` linked with an `autoaudiosink`), and we will not be able
-to link it to a pad producing video, for example.
+Now we will check the type of data this new pad is going to output, because we
+are only interested in pads producing audio. We have previously created a
+piece of pipeline which deals with audio (an `audioconvert` linked with an
+`audioresample` and an `autoaudiosink`), and we will not be able to link it to
+a pad producing video, for example.
 
 `gst_pad_get_current_caps()` retrieves the current *capabilities* of the pad
 (that is, the kind of data it currently outputs), wrapped in a `GstCaps`