- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一块数据(void *)是2 ch,44100 Hz,'lpcm'8.24位little-endian有符号整数,已解交织。
我需要将该块记录为2 ch,44100 Hz,'lpcm'16位little-endian有符号整数。
如何转换数据?我可以想象我需要做这样的事情:
uint dataByteSize = sizeof(UInt32) * samplesCount;
UInt32* source = ...;
UInt32* dest = (UInt32*)malloc(dataByteSize);
for (int i = 0; i < samplesCount; ++i) {
UInt32 sourceSample = source[i];
UInt32 destSample = sourceSample>>24;
dest[i] = destSample;
}
最佳答案
好的,我花了一些时间调查此问题,并意识到该问题包含的信息太少,无法回答=)
所以这笔交易:
首先,关于非交织:
我最初以为它看起来像这样:
l1 l2 l3 l4 ... ln r1 r2 r3 r4 ... rn
但是事实证明,在我的数据权利 channel 中只是缺失了。事实证明,它不是非交织的数据,而只是普通的单声道数据。
是的,它应该始终是多个缓冲区,以防数据实际上是非交错的。
如果是交错的,应该是
l1 r1 l2 r2 l3 r3 l4 r4 ...
第二,关于实际的转换:
这一切都取决于 sample 的范围。就我而言(如果我正确的话,以及在涉及核心音频的任何情况下),定点8.24值的范围应在(-1,1)之间,而16位有符号值的范围应在(-32768,32767)之间。
因此,8.24值将始终将其前8位设置为0(如果为正)或为1(如果为负)。前8位应删除(保留c的符号)。另外,您可以根据需要删除任意数量的尾随位-这只会降低声音的柔和度,但不会破坏声音。如果转换为16位带符号格式,则8-22位(即15位)实际上将包含我们需要用于SInt16的数据。位7可用作符号位。
因此,要将8.24转换为SInt16,您只需要向右移9位(因为您需要保留符号就将其移至9位)并转换为SInt16
11111111 10110110 11101110 10000011-> 11111111 11111111(11011011 01110111)
00000000 01101111 00000000 11000001-> 00000000 00000000(00110111 10000000)
而已。再没有什么比遍历数组和右移位更重要了。
希望这可以节省一个人几个小时。
关于core-audio - 如何手动将8.24位解交织的lpcm转换为16位lpcm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5323739/
我正在寻找一个好的压缩算法或库,让我可以将多个压缩数据流交织成一个数据流,不会造成性能或压缩损失。 更多背景信息:我一直在研究一种专用于特定应用程序的压缩格式。这种压缩格式对数据执行一堆特定领域的分析
Google Mock documentation说: Important note: Google Mock requires expectations to be set before the m
我想交织(?)两个字符串,例如: string A = 'HELLO WORLD!' string B = '66666666666666666666' //twenty 6's output = '
我如何按列交织 numpy 矩阵。 给出这个例子: >>> import numpy as np >>> a = np.zeros((3,3)) >>> b = np.ones((3,3)) >>>
我正在尝试按照交错 GStreamer 文档中的说明交错两个音频文件: gst-launch interleave name=i ! audioconvert ! wavenc ! filesink
我有两个列表,保证第一个比第二个多一个项目。我想知道创建一个新列表的最 Pythonic 方法,该列表的偶数索引值来自第一个列表,奇数索引值来自第二个列表。 # example inputs list
我是一名优秀的程序员,十分优秀!