【问题标题】:load wave file data into a buffer将波形文件数据加载到缓冲区中
【发布时间】:2010-03-04 04:21:29
【问题描述】:

gcc 4.4.2 c89

我有一个波形文件: 8000赫兹 16位

我想知道是否可以将这个波形文件的原始数据加载到缓冲区中。

非常感谢您的建议

【问题讨论】:

  • 与将任何文件加载到缓冲区中有何不同?
  • 如果你想要样本数据,标题中有字段指定样本数据的偏移量及其长度。

标签: c


【解决方案1】:

是的,您正在寻找用 C 语言读取二进制文件。 像这样的:

FILE* f;
char buf[MAX_FILE_SIZE];
int n;

f = fopen("filename.bin", "rb");
if (f)
{
    n = fread(buf, sizeof(char), MAX_FILE_SIZE, f);
}
else
{
    // error opening file
}

这会读取 bytes 的缓冲区。您可以从中构建数据。直接读取多字节数据更加棘手,因为您会遇到表示和字节序的问题。

使用了两个关键的 C 函数:

  • fopen 以二进制模式打开文件(“rb”标志)
  • fread 读取块数据(对二进制流有用)。记录在here

【讨论】:

  • 谢谢。表示和字节序是什么意思?
  • @robUK:我的意思是 - 多字节值如何存储在内存中(基本上是一个字节数组)。字节顺序是您必须阅读的一个重要问题 - en.wikipedia.org/wiki/Endianness
【解决方案2】:

如果您想处理声音样本,最好使用为您解释声音数据的库。例如libsndfile

【讨论】:

    【解决方案3】:

    恕我直言,最好的方法是使用链表,其中的元素包含大型(1024 或更多)固定大小的字符数组。

    【讨论】:

      【解决方案4】:

      此项目将 WAVE 文件数据转储到 csv 文件。您可以破解它并获取转储到 csv 文件的数组。

      https://github.com/dilawar/sound

      免责声明:我是此存储库的作者。

      【讨论】:

        猜你喜欢
        • 2018-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-09
        • 1970-01-01
        相关资源
        最近更新 更多