【问题标题】:How to convert a long array to an int array with lossy conversion如何使用有损转换将 long 数组转换为 int 数组
【发布时间】:2022-11-18 02:52:06
【问题描述】:

我目前正在做一些实时音频处理。我想将 long[] 转换为 int[]。转换应该是有损的,例如如果 long 值大于 int.MaxValue,则结果应为 int.MaxValue。

我也对 byte[] 到 long[] 的转换感兴趣,其中 byte[] 包含 32 位整数。

由于它是实时音频处理,性能是关键。

最好的方法是什么?

【问题讨论】:

  • 例如如果 long 值大于 int.MaxValue,则结果应为 int.MaxValue。“这是否意味着您接受生成的音频可能会受到削波的影响?
  • 是的,裁剪应该发生
  • “由于是实时音频处理,性能是关键。” - 您是否测量过像 for 循环这样的简单解决方案是否足够(不足)?
  • 由于我还没有任何算法,我无法进行任何分析

标签: c# naudio


【解决方案1】:

由于您不知道这是否会成为您的性能阻止程序,我建议您首先开始使用一个简单的解决方案:

int[] intArray = longArray
  .Select(l => (int)(Math.Max(int.MinValue, Math.Min(l, int.MaxValue))))
  .ToArray();

优化版本可以用压缩在 long 的低/高部分中的 int 数组替换 long 数组的前半部分,并使用特殊的访问代码来访问值。这将消除分配新内存的需要,从而提高性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多