【问题标题】:Play file audio播放文件音频
【发布时间】:2015-02-16 23:18:00
【问题描述】:

我有一个录音的原始数据文件,每个样本都存储为 16 位短。我想通过 Redhawk 播放这个文件。

我有一个 file_source_s 连接到 AudioSink,如下所示:

我希望在启动这些组件时能听到扬声器发出的声音。但是当我启动这两个组件时,我听不到任何声音。

以下是 file_source_s 属性值:

  • 文件名:名称
  • 项目大小:2
  • 重复:真的
  • 寻找:真
  • seek_point: 0
  • 来源:SEEK_SET

我知道:

  • 问题不在于 AudioSink。我已经使用信号发生器 (SigGen) 测试了 AudioSink,我可以通过我的扬声器听到声音。
  • file_source_s 正在查找文件。当我输入一个不存在的文件名时,file_source_s 给出“没有这样的文件或目录”错误。当我绘制 short_out 端口时,我还可以看到文件的前 1024 个字节,但绘图没有更新。

【问题讨论】:

    标签: redhawksdr


    【解决方案1】:

    AudioSink 组件使用接收到的 SRI(信号相关信息)中的信息来确定音频的采样率。从 AudioSink 组件的第 156 行可以看到:

    int sample_rate = static_cast<int>(rint(1.0/current_sri.xdelta));
    

    它从下游组件接收 SRI,在本例中为 file_source_s。

    组件 file_source_s 是 gnuhawk 组件包的一部分。 GNUHAWK 库提供的软件可以将 GNU Radio 模块集成到 REDHAWK 软件框架中。由于 SRI 是一个 REDHAWK 结构,并且不存在于 GNURADIO 中,因此似乎 file_source_s 块没有通过属性收集足够的信息来表示音频文件的正确 xdelta / 采样率。

    我建议使用纯 REDHAWK 组件,例如 DataReader,它将采样率作为属性。

    【讨论】:

    • 感谢您的快速和精心编写的回复。我正在读取的输入文件是short 类型,但DataReader 似乎只能读取float 类型。是否可以将 DataReader 配置为读取类型短?
    • 我只是尝试使用 DataReader 从文件中读取浮点数。我没有听到任何声音。我还尝试绘制来自 DataReader 的数据,但没有看到任何数据流动。
    • DataReader 似乎也不使用 SRI。我使用了 GNUHAWK 的 sourcesocket 组件,因为它具有 SRI 属性。我编写了一个简单的 Python 脚本来将输入数据发送到 sourcesocket 正在侦听的套接字。在sourcesocket的属性中,我将SRI的xdelta设置为输入数据的周期。现在,当我启动 AudioSink 时,我可以通过扬声器听到声音。它现在似乎正在工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 2011-11-26
    • 2020-02-11
    • 2021-11-26
    • 2017-08-27
    • 2021-05-19
    • 2017-05-08
    相关资源
    最近更新 更多