SoundFont2技术协议 之 sdta-list Chunk

SDTA列表块

SoundFont2兼容文件中的SDTA列表块包含一个可选的smpl 子块,该子块包含与SoundFont兼容库关联的所有基于RAM的声音数据。smpl 子块的长度是任意的,并且包含偶数个字节。如果存在sm24 子块,则其尺寸正好是smpl 子块的½ ,如果需要,则加上1个字节,以满足RIFF 16位对齐规范。

<sdta-ck> -> LIST (‘sdta’   
                     {    
                        [<smpl-ck>] ; The Digital Audio Samples for the upper 16 bits   
                     }   
                     {    
                        [<sm24-ck>] ; The Digital Audio Samples for the lower 8 bits   
                     } 
                )


1. SMPL子块中的采样数据格式

SMPL子块(如果存在)包含一个或多个数字音频信息的“采样”,其形式为线性编码的16位有符号小尾数(最低有效字节优先)字。每个采样后面至少有46个零值样本数据点。这些零值数据点是必要的,以保证插值器进行合理地音高偏移都可以在声音结束时对零数据进行循环。

2. SM24子块中的采样数据格式

sm24 子块(如果存在)包含与smpl 块中包含的每个采样数据点相对应的最低有效字节。注意,这意味着对于[smpl]子块中的每两个字节,[sm24]子块中都有一个1字节的对应项。

这些采样波形点将与smpl 子块中的采样波形点组合,以共同创建一个分辨率高达24位的单个采样数据池。

如果smpl子块不存在,则应忽略sm24子块。如果该格式的ifil版本小于表示2.04的版本,则应忽略sm24子块。如果sm24块的大小不完全等于smpl块的½大小(如果smpl块的½大小为奇数,则为1字节),则应忽略sm24子块。

在忽略sm24子块的任何的情况下,合成器应该只呈现包含在smpl子块中的那些采样。

3.采样数据循环规则

在每个采样中,可能存在一个或多个循环点对。这些点的位置是在pdta-list chunk列表块中定义的,但是采样数据点本身必须符合某些规则,以便循环在多个平台上兼容。

循环由样本中的“等效点”来定义。这意味着有两个逻辑上相等的采样数据点,当这些点相互重叠时,就会出现循环。在概念上,循环终点是循环过程中从未实际播放过;相反,循环开始点位于循环结束点之前。由于数字音频采样的带限特性,无缝环路将在等效点周围显示几乎相同的数据。

实际上,由于波形表合成器使用的各种插值算法,环路起点和终点周围的数据都会影响环路的声音。因此,循环的起点和终点都必须被连续的音频数据包围。例如,即使声音被编程为在整个衰减过程中继续循环,也必须在循环终点之外提供采样数据点。这些数据通常与循环开始时的数据相同。在循环开始之前和循环结束之后,至少需要存在八个有效数据点。

围绕两个等效循环点的八个数据点(每侧四个)也应强制相同。通过强制数据相同,所有的插值算法都可以保证正确地重现一个无缝的循环。

发布了26 篇原创文章 · 获赞 49 · 访问量 137万+

猜你喜欢

转载自blog.csdn.net/ldghd/article/details/89377424