【问题标题】:Convert audio doubles to bytes将音频双精度转换为字节
【发布时间】:2015-09-25 18:31:56
【问题描述】:

我正在处理原始 PCM 音频数据(没有标题的 PCM 文件的音频数据)。

这些数据以双精度向量的形式提供给我。

我想将此数据传递给另一个函数,而此函数需要字节向量形式的音频数据。

我试过了

    Dim nBytes() As Byte = nDoubles.SelectMany(Function(d) BitConverter.GetBytes(d)).ToArray()

但这不会产生预期的结果。

我想我必须手动处理转换,但我不确定应该如何完成。

有人可以帮忙吗?

谢谢。

【问题讨论】:

  • 您需要做什么取决于双打中数据的格式(特别是“位年龄”),以及其他函数期望的格式。那么,原始 PCM 源数据的格式是什么? 8位? 16位? 24 位?
  • @Ian 它是 16 位,48kHz,单声道。
  • 另外函数需要什么格式?
  • @Ian 另一个函数期望字节是直接从 WAV 文件中读取的。
  • 但是什么格式?要么您需要为其指定输入格式,要么它需要一个特定的格式。

标签: vb.net audio type-conversion


【解决方案1】:

由于其他函数所需的格式是 16 位、48 kHz,这与您的源数据相同,因此将源转换为 Short 数组,然后将其序列化为 Byte 数组是一个简单的案例。

您为此建议的代码的问题是错过了第一步,因此它基本上序列化了 Double 数组。但是,您可以在第二步中重复使用它。因此,您可以执行以下操作:

    Dim nShorts() As Short = New Short(nDoubles.Length - 1) {}

    For i = 0 To nDoubles.Length - 1
        nShorts(i) = Convert.ToInt16(nDoubles(i))
    Next

    Dim nBytes() As Byte = nShorts.SelectMany(Function(s) BitConverter.GetBytes(s)).ToArray()

【讨论】:

  • 谢谢!我不得不将 nDoubles(i) 与 32768 相乘,但除此之外它效果很好,谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-11-02
  • 2010-11-21
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 2012-05-06
  • 1970-01-01
  • 2012-03-07
相关资源
最近更新 更多