【问题标题】:Unpacking 3-byte/24-bit data chunks with Ruby用 Ruby 解压 3 字节/24 位数据块
【发布时间】:2010-01-24 23:12:48
【问题描述】:

我正在构建一个纯 Ruby WAV 文件读/写库,同时学习更深入的 Ruby 功能。它目前适用于 16 位音频,因为我可以使用 String.unpack('s*') 将单个音频样本提取到有符号整数数组中。但是,我很难考虑如何处理 24 位音频。在这种情况下,每个样本都是 3 个字节长。在这种情况下,你会推荐什么打包/解包字符串,我是否可能不得不彻底改变我的方法(使用填充或类似的东西)?

【问题讨论】:

    标签: ruby arrays audio string binary-data


    【解决方案1】:

    当你使用 unpack("s+") 时,我假设你的样本是大端的。这是一个不那么快但可行的解决方案。

    >> "ABCDEF".scan(/.../).map {|s| (s.reverse + 0.chr ).unpack("V")}.flatten
    => [4276803, 4474182]    #=> [0x414243, 0x444546] in HEX
    

    【讨论】:

    • [4276803, 4474182].map { |s| [s].pack("VX").reverse }.join 似乎反过来了。
    • 看起来我的样本是小端的,所以我不需要反过来。 0.chr 是关键......它需要被填充以使解包正常工作。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    相关资源
    最近更新 更多