【问题标题】:Generating a Square, Saw, and Sine Sample and Writing to an AIFF file - big-endian Issues生成正方形、锯齿和正弦样本并写入 AIFF 文件 - 大端问题
【发布时间】:2015-06-28 18:12:03
【问题描述】:

尝试在代码中生成 square、saw 和 sin wav,然后根据 Chris Adam 的 Learning Core Audio 书籍保存到 AIFF 文件。我有它的工作,但我很困惑为什么我不需要在 Swift 中将样本转换为 .bigEndian 而你需要在 Obj-C 中?

Obj-C 中的工作代码如下所示:

SInt16 sample = CFSwapInt16HostToBig ((( i / wavelengthInSamples) * 
SHRT_MAX *2) - SHRT_MAX); 

以下是 Swift2 中的工作代码:

var sample = Int16(((Double(i) / wavelengthInSamples) 
* Double(Int16.max) * 2) - Double(Int16.max))

如果我离开.bigEndian,这就是 Swift Playground 图表的样子

如果我在转换为Int16() 后添加.bigEndian 并发送到AudioFileWriteBytes,则生成的音频听起来不正确:

var sample = Int16(((Double(i) / wavelengthInSamples) 
* Double(Int16.max) * 2) - Double(Int16.max)).bigEndian
AudioFileWriteBytes(audioFile, 0, Int64(sampleCount * 2), &bytesToWrite, &sample)

Full source here:https://gist.github.com/justinlevi/7a846070ee6e7e245cc3

这里是生成的音频文件的链接。由于某种原因,方波的音量也非常低。

后续问题:为什么方波比锯齿波或正弦波要安静得多?

消息来源:亚当森,克里斯;阿维拉,凯文(2012-04-03)。学习核心音频:Mac 和 iOS 音频编程动手指南(Kindle 位置 1063-1073)。培生教育。 Kindle 版。

【问题讨论】:

  • 在 Swift 版本中,如果你不加.bigEndian,你写音频文件,听起来正确吗?
  • 是的,如果我不添加.bigEndian,那么波形听起来是正确的,但这是我的问题。为什么需要在 Obj-C 中将样本转换为 .bigEndian 而在 Swift 中不需要?尤其是当 AIFF 需要 Big Endian 样本时。
  • 这很有趣,每个迹象都表明你应该转换为大端,奇怪... re:输出的音频文件,使用你的要点我无法得到它编写一个可以由 Quicktime 或 Logic 打开的文件...如果您有时间这样做,您能否更新您的要点以编写一个完整的文件?我有兴趣在编辑器中打开时查看生成的波形 - 谢谢!
  • 在这里发布了整个项目:github.com/justinlevi/CAToneGeneratorSwift
  • 这可能值得关注 :) bugreport.apple.com - 可能在 Foundation 或 Audio Toolbox 框架中发生了一些变化,一些尚未通信的东西会自动进行字节序字节交换对于需要它的文件类型?有这么多的可能性,但我不确定我们会在这里找到更多的东西 - 除非一些新的眼光注意到这一点并发现我们没有发现的东西!

标签: ios swift core-audio swift2


【解决方案1】:

对于您的后续问题,方波的平均 RMS 功率高于正弦波。方波大部分时间都处于其最大峰值幅度。有关详细信息,请参阅 wikipediastack exchange

您上传的正弦波、锯齿波和方波文件不是您期望的波形。它们似乎是重复的功能,但波形并不纯。我大胆地打开了波形。顶部是正弦。中间是锯子,底部是正方形。您可以看到幅度在方波上明显下降(几乎听不见)。如果波形正确,方波会响亮得多。

【讨论】:

  • 哦,这真的很有趣。我没想到在渲染后检查 Audicity 中的波形......有趣的是,当我将 .bigEndian 添加到样本值时,出现在 Audicity 中的波形正是我在操场上看到的。跨度>
【解决方案2】:

呃...@jaybers 完全让我意识到 AIFF 文件被编写为 littleEndian,这就是图表看起来像这样的原因。当我在示例中添加.bigEndian 时,我在操场上看到了这些图表。我已经更新了上面的 github 项目,现在一切都按预期呈现。方波也和其他样本一样响亮...

以下是经过 .bigEndian 转换的新音频文件。

【讨论】:

    猜你喜欢
    • 2011-04-28
    • 2021-12-23
    • 2010-11-11
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2012-10-06
    相关资源
    最近更新 更多