生成平方,锯齿和正弦采样并写入AIFF文件-big-endian问题

贾斯汀·莱维·温特

尝试在代码中生成一个正方形,锯齿状和正弦波形,然后根据Chris Adam的《 Learning Core Audio》一书保存到AIFF文件。我可以使用它,但是我对为什么我不需要.bigEndian在Swift中将样本转换为您却在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))

这是我离开的情况下Swift操场图的样子 .bigEndian 迅速的操场看到波

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

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

完整资源在这里https : //gist.github.com/justinlevi/7a846070ee6e7e245cc3

这是生成的音频文件的链接。由于某些原因,方波的音量也确实很低。

跟进问题:为什么方波相对于锯波或正弦波要安静得多?

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

贾斯汀·莱维·温特

gh ... @jaybers完全使我意识到AIFF文件是作为littleEndian编写的,这就是为什么图形看起来像这样的原因。当我添加.bigEndian到样本时,我正在操场上看到这些图形我已经更新了上面的github项目,现在一切都按预期方式渲染。方波也和其他样本一样响...

大尾数AIFF图

这是带有.bigEndian转换的新音频文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

.bin 文件的 Python Big-Endian 转换

Big Endian和Little Endian支持字节排序

将 little Endian hexdump 输出转换为 Big Endian(C 编程)的问题

BOOST_ENDIAN_BIG_BYTE和BOOST_ENDIAN_BIG_WORD有什么区别?

Little Endian与Big Endian架构

示例中big-endian和little-endian处理器之间的区别

为什么python的结构认为little-endian和big-endian暗示了不同的长度?

在Big Endian和Little Endian机器中解释32位整数时的困惑

将Little Endian转换为Big Endian

检查系统为Little Endian或Big Endian

Mp3文件的PCM数据的存储是否取决于Big Endian和Little Endian?

是否有一个oneliner可以将二进制文件从Little Endian转换为Big Endian?

如何以Big Endian读取和解析二进制文件

用PHP编码为OCS-2 Big Endian的输出文件

如何在Python中读取Big End或Lower Endian格式的文件

PowerPC和SPARC(均为big-endian)上的data.table错误行为

.Net Core中的Big-Endian处理

怎么把UUID转换成big endian?

4 字节 big-endian 到 int

有没有一种通用的方法可以将结构写入Big Endian格式的字节中?

分解旧的.COM文件。卡在48个字节之内。Endian问题?

Numpy读取big-endian数据:数据类型格式

在 Python 中将哈希摘要更改为 big-endian

htons()在Big-Endian系统上做什么?

Java Byte []转换为使用<< Weirdness的int(Big Endian)

前往:无法在powerpc64(big-endian)上运行

将int转换为char数组Big Endian

在Python中获取整数的big-endian字节序列

IS_BIG_ENDIAN 宏有效,但在 #if 中无效