代码之家  ›  专栏  ›  技术社区  ›  Vigo

将音频文件存储到数组/字符串流C中++

  •  2
  • Vigo  · 技术社区  · 11 年前

    我想使用套接字通过网络将音频文件的内容发送到另一个系统。这两个系统都在Windows操作系统上运行。有没有教程介绍如何将音频内容存储到C++数组或Stringstream数据类型中,以便更容易地将其发送到不同的节点。

    我基本上想知道如何从音频文件中提取数据字节。

    2 回复  |  直到 11 年前
        1
  •  3
  •   pattivacek    11 年前

    最简单的方法是简单地以字节块的形式发送数据。如果你从一个音频文件开始,只需像打开其他二进制文件一样打开它 file = fopen(filename, "rb"); (其中filename是音频文件的名称)。然后进入一个循环来读取字节块,直到到达文件的末尾。只需使用类似的东西 bytes_read = fread(buffer, sizeof(char), read_size, file); 哪里 buffer 应该是 char 最小大小的数组 read_size ,可以是1024。每次之后 fread ,您可以拨打网络发送电话。或者,您可以先读取整个文件,然后逐块发送。你的电话。无论哪种方式,当你到达文件的末尾时,发送某种信号,表明你已经到达了末尾。接收系统应该接收这些块并调用 fwrite 以创建新的音频文件。您可以在每个区块进入时将其追加,也可以将其全部缓冲,直到到达末尾,然后将其全部写入。

        2
  •  0
  •   MARK    11 年前

    如果您只有wav文件,则可以使用soundfile++。查看此处的readtest和writetest演示程序 http://sig.sapp.org/doc/examples/soundfile/