【问题标题】:How to write ROS AudioData message into wav file?如何将 ROS AudioData 消息写入 wav 文件?
【发布时间】:2020-11-18 13:35:09
【问题描述】:

我在我的机器人上使用 ReSpeaker Mic Array v2.0,我使用了以下 git repo:https://github.com/furushchev/respeaker_ros.git 来捕获扬声器接收到的音频。我订阅了它的原始音频 ros 主题 /audio,它只是字节数组数据(http://docs.ros.org/noetic/api/audio_common_msgs/html/msg/AudioData.html

如何将 AudioData 消息的 uint8[] 数据写入 C++ 中的 wav 文件?以后想通过其他方式播放wav文件。

我在ros audio_common库示例中看到它使用gstreamer进行编写,但是看了代码后我很困惑(https://github.com/ros-drivers/audio_common/blob/master/audio_capture/src/audio_capture.cpp

【问题讨论】:

    标签: c++ audio gstreamer wav ros


    【解决方案1】:

    您看到的示例是使用 Gstremaer 的 alsasrc 从该行中的麦克风捕获音频

    _source = gst_element_factory_make("alsasrc", "source");
    

    因此,Gstreamer 的管道在内部处理/捕获音频字节数组,并且在输入参数 dst_type=="filesink"format=="wave" 的情况下,将其编码为

    _filter = gst_element_factory_make("wavenc", "filter");
    

    并创建 .wav 文件

    _sink = gst_element_factory_make("filesink", "sink");
    

    另一方面,使用输入参数 dst_type=="appsink"format=="wave" 运行该代码实际上会再次捕获音频字节,但不是写入文件,而是在 ros 主题 /audio发布它们。

    如果您不能(出于任何原因)将此代码与输入参数 dst_type=="filesink"format=="wave" 一起使用,我想您将需要使用 Gstreamer 的 appsrc 元素并用您的 AudioData 消息中的字节提供它。在这种情况下,用于编码和写入文件的 Gstreamer 管道的其余部分应与示例中的相同。

    【讨论】:

      猜你喜欢
      • 2020-01-02
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 2019-03-14
      • 1970-01-01
      相关资源
      最近更新 更多