SoundFont2技术协议 之 INFO-list Chunk

本文详细解析了SoundFont2兼容文件的INFO-listChunk结构,包括其强制性和可选子块,如资源交换文件版本、音频引擎、声音库名称等,以及每个子块的功能和数据格式。

INFO-list Chunk【信息列表块】

SoundFont2兼容文件中的INFO-list Chunk(信息列表块)包含三个强制性的子块和多种可选子块,定义如下。INFO-list chunk信息列表块提供有关包含在SoundFont兼容库文件中的基本信息。

<INFO-list> -> LIST (‘INFO’   
                     {    
                        <ifil-ck> ;Refers to the version of the Sound Font RIFF file 
                        <isng-ck> ;Refers to the target Sound Engine    
                        <INAM-ck> ;Refers to the Sound Font Bank Name    
                        [<irom-ck>] ;Refers to the Sound ROM Name    
                        [<iver-ck>] ;Refers to the Sound ROM Version    
                        [<ICRD-ck>] ;Refers to the Date of Creation of the Bank    
                        [<IENG-ck>] ;Sound Designers and Engineers for the Bank    
                        [<IPRD-ck>] ;Product for which the Bank was intended    
                        [<ICOP-ck>] ;Contains any Copyright message    
                        [<ICMT-ck>] ;Contains any Comments on the Bank    
                        [<ISFT-ck>] ;The SoundFont tools used to create and alter the bank 
                     }   
                    ) 


1.  ifil Sub-chunk 【资源交换文件版本 子块】

ifil sub-chunk是一个强制性的子块,用于标识文件符合的SoundFont规范版本级别。它的长度始终为四个字节,并根据结构包含数据:

struct sfVersionTag 
{  
	WORD wMajor;  
	WORD wMinor; 
}; 

WORD wMajor包含SoundFont规范版本中小数点左边的值,WORD wMinor包含小数点右边的值。例如,如果wMajor=2且wMinor=11,则对应版本2.11。

这些值可供读取SoundFont兼容文件的应用程序使用,以确定程序是否可以使用该文件的格式。在固定的wMajor中,对格式的唯一更改是添加Generator(生成器)、Source(源)和Transform(转换)枚举器以及附加的info sub-chunks(信息子块)。如果这些对程序未知是未知的,则这些定义都将被定义为忽略掉。因此,许多应用程序可以设计为在给定的wMajor中完全向上兼容。在编辑器或其他程序中,所有枚举器都应该是已知的,因此wMinor 的值很重要的。通常,应用程序在文件可用则接受,不可用则拒绝,或者警告用户文件数据不可编辑。

如果缺少ifil sub-chunk子块,或者它的大小不是四个字节,那么应该拒绝该文件,因为它的结构不健全。

2. isng Sub-chunk 【音频引擎 子块】

isng sub-chunk是一个强制性的子块,用于标识对文件进行优化的波形声音引擎。它包含一个256个或更少字节的ASCII字符串,包括一个或两个值为零的终止符,以便使总字节数为偶数。默认isng字段是8个字节,表示“EMU8000”为7个ASCII字符,后跟一个零字节。

ASCII应区分大小写。换句话说,“emu8000”与“EMU8000”是不一样的。

芯片驱动程序可以选择使用isng字符串来改变合成算法来模拟目标声音引擎。

如果sub-chunk子块丢失,或者未以零值字节终止,或者其内容是未知的声音引擎,则应忽略该字段,并假定为EMU8000 。


3.  INAM Sub-chunk 【声音库名称 子块】

INAM sub-chunk是一个强制性的子块,提供SoundFont兼容库的名称。它包含一个256个或更少字节的ASCII字符串,包括一个或两个值为零的终止符,以便使总字节数为偶数。典型的INAM子块是14个字节,表示“General MIDI”为12个ASCII字符,后跟2个零字节。

ASCII应区分大小写。换句话说,“General MIDI”与“GENERAL MIDI”不相同。

INAM字符串通常用于识别音源库,即使文件名已更改。

如果INAM子块丢失或未以零值字节终止,则应忽略该字段,如果查询该名称,则将向用户提供相应的错误消息。如果重新写入文件,则应在INAM字段中放置一个有效的名称。


4. irom Sub-chunk 【音频ROM名称 子块】

 irom sub-chunk是一个可选的子块,用于标识任何ROM采样引用的特定波形声音数据ROM。它包含一个256个或更少字节的ASCII字符串,包括一个或两个值为零的终止符,以便使总字节数为偶数。一个典型的IROM字段是6个字节,表示“1MGM”为4个ASCII字符,后跟2个零字节。

ASCII应区分大小写。换句话说,“1mgm”与“1MGM”不相同。

驱动程序使用irom字符串来验证文件引用的ROM数据是否可用于声音引擎。

如果irom sub-chunk丢失,未以零值字节终止,或其内容是未知的ROM,则应忽略该字段,并假定该文件未引用任何ROM采样。如果ROM采样是可访问的,则应终止对此类乐器的任何访问且不发声。若没有有效的irom 和iver 存在,则文件不应编写试图访问ROM的采样。

5.  iver Sub-chunk 【ROM版本 子块】

iver sub-chunk是一个可选的子块,用于标识任何ROM采样所引用的特定可波形声音数据ROM版本。它的长度始终为四个字节,并根据结构包含数据:

struct sfVersionTag 
{  
	WORD wMajor;  
	WORD wMinor; 
};

 WORD wMajor 包含ROM版本中小数点左边的值。 WORD wMinor 包含小数点右边的值。例如,如果wMajor=1且wMinor=36,则示意版本1.36。

驱动程序使用iver sub-chunk子块来验证文件引用的ROM数据是否位于声音头指定的确切位置。

如果缺少iver sub-chunk子块,长度不是4个字节,或者其内容指示未知或不正确的ROM,则应忽略该字段,并假定该文件未引用任何ROM采样。如果ROM采样被访问,则应终止对此类仪器的任何访问且不可发声。请注意,要使ROM样本正常工作,必须同时存在有效的iver 和irom。若没有有效的irom 和iver 存在,则不应编写试图访问ROM采样的文件。


6.  ICRD Sub-chunk 【库创建日期 子块】

ICRD Sub-chunk子块是一个可选的子块,用于标识SoundFont兼容库的创建日期。它包含一个256个或更少字节的ASCII字符串,包括一个或两个值为零的终止符,以便使总字节数为偶数。典型的ICRD字段是12个字节,表示“May 1, 1995”为11个ASCII字符,后跟一个零字节。

传统上,字符串的格式是“Month Day, Year”,其中Month最初是大写的,是常规完整英文拼写;Day 是小数点后接逗号的日期;Year 是完整的十进制年份。因此,字段通常不应超过32个字节。

ICRD字符串是为库管理目的而提供的。

如果ICRD子块丢失,未以零值字节终止,或由于某些原因无法作为ASCII字符串如实复制,则应忽略该字段,如果重新写入,则不应复制该字段。如果该字段的内容看起来没有意义,则可以如实复制。


7. IENG Sub-chunk 【设计师或工程师名称 子块】

ieng子块是一个可选的子块,用于标识负责SoundFont兼容库的任何声音设计师或工程师的名称。它包含一个256个或更少字节的ASCII字符串,包括一个或两个值为零的终止符,以便使总字节数为偶数。典型的IENG字段是12个字节,表示“Tim Swartz”为10个ASCII字符,后跟2个零字节。

IENG 字符串是为库管理目的而提供的。

如果缺少IENG sub-chunk子块,未以零值字节终止,或由于某种原因无法被忠实地复制为ASCII字符串,则应忽略该字段,如果重新写入,则不应复制该字段。如果该字段的内容看起来没有意义,则可以如实复制。

8.IPRD Sub-chunk 【知识产权 子块】

IPRD sub-chunk子块是一个可选的子块,用于标识SoundFont兼容库所针对的任何特定产品。它包含一个256个或更少字节的ASCII字符串,包括一个或两个值为零的终止符,以便使总字节数为偶数。典型的IPRD字段是8个字节,将“SBAWE32”表示为7个ASCII字符,后跟一个零字节。

IPRD字符串是为库管理目的而提供的。

如果缺少IPRD sub-chunk子块,未以零值字节终止,或者由于某些原因无法作为ASCII字符串如实复制,则应忽略该字段,如果重新写入,则不应复制该字段。如果该字段的内容看起来没有意义,则可以如实地复制。

 

9.  ICOP Sub-chunk 【版权 子块】

ICOP sub-chunk子块是一个可选的子块,包含与SoundFont兼容库关联的所有版权声明字符串。它包含一个256个或更少字节的ASCII字符串,包括一个或两个值为零的终止符,以便使总字节数为偶数。典型的ICOP字段是40个字节,代表“Copyright (c) 1995 E-mu Systems, Inc.”,即38个ASCII字符,后跟两个零字节。

ICOP字符串是为知识产权保护和管理目的而提供的。

如果缺少ICOP sub-chunk子块,未以零值字节终止,或由于某些原因无法作为ASCII字符串如实复制,则应忽略该字段,如果重新写入,则不应复制该字段。如果该字段的内容看起来没有意义,则可以如实地。


10. ICMT Sub-chunk  【库注释 子块】

ICMT sub-chunk子块是一个可选的子块,包含与SoundFont兼容库相关的所有注释。它包含一个小于等于65536字节的ASCII字符串,包括一个或两个值为零的终止符,以便使总字节数为偶数。一个典型的icmt字段是40个字节,代表“This space unintentionally left blank”作为38个ASCII字符,后跟两个零字节。

ICMT 字符串用于任何非散射用途。

如果ICMT sub-chunk子块丢失,没有以零值字节终止,或者由于某些原因不能作为ASCII字符串忠实地复制,则应忽略该字段,如果重新写入,则不应复制该字段。如果该字段的内容看起来没有意义,则可以如实地复制。


11. ISFT Sub-chunk 【音源工具 子块】

ISFT sub-chunk子块是一个可选的子块,用于标识用于创建和最近修改SoundFont兼容库的工具。它包含一个256个或更少字节的ASCII字符串,包括一个或两个值为零的终止符,以便使总字节数为偶数。典型的ISFT字段是表示“Preditor 2.00a:Preditor 2.00a”的30个字节,即29个ASCII字符,后跟一个零字节。

ASCII应视为区分大小写。换句话说,“Preditor”与“PREDITOR”不同。
 
通常,在创建工具和修改工具的时候工具名称和修订控制编号首先被包括进去。这两个字符串由冒号分隔。字符串应由具有空修改工具字段(例如“Preditor 2.00a:”)的创建程序生成,并且在工具每次修改银行时,应使用其自己的名称和修订控制编号替换修改工具字段。

ISFT字符串主要用于错误跟踪。

如果缺少ISFT sub-chunk子块,未以零值字节终止,或由于某些原因无法作为ASCII字符串如实复制,则应忽略该字段,如果重新写入,则不应复制该字段。如果该字段的内容看起来没有意义,则可以如实地复制。

 

 

### SoundFont 2 格式概述 SoundFont 2 是一种用于存储乐器声音样本及其相关参数的标准文件格式。这种格式允许音乐家和开发者创建复杂的合成器音色,并将其应用于各种音频设备和软件中[^1]。 #### 文件结构与规范 SoundFont 2 文件通常具有 `.sf2` 扩展名,内部包含了多个层次的数据: - **预设 (Presets)**:定义了完整的乐器设置,可以直接加载到兼容的硬件或软件上使用。 - **仪器 (Instruments)**:描述了一个具体的物理模型或采样集合,可以被不同的预设调用共享。 - **样本 (Samples)**:实际录制下来的音频片段,作为构建所有其他部分的基础材料。 这些组件通过特定的方式组合在一起形成一个完整的 SoundFont 文件,使得用户能够方便地管理和编辑其中的内容。 #### 使用方法 要利用 SoundFont 2 文件中的资源,一般需要借助专门的支持工具来实现播放效果或是进一步处理。对于希望集成此功能的应用程序而言,则可以通过调用相应的 API 接口完成操作。例如,在 Linux 平台上运行时,FluidSynth 就是一个很好的选择;它不仅实现了基于 SoundFont 的软合成能力,还提供了丰富的 C/C++ 库以便第三方开发人员轻松接入[^4]。 另外值得注意的是,当涉及到跨平台移植等问题时,确保所选方案具备良好的兼容性和稳定性是非常重要的。比如 ALSA 这样的底层框架就为 Linux 提供了一套全面而稳定的音频解决方案,包括对多种常见音频接口的有效支持以及向后兼容旧版 OSS API 等特性[^2]。 ```bash fluidsynth -l my_soundfont.sf2 ``` 上述命令展示了如何启动 FluidSynth 来加载指定路径下的 SoundFont 文件 `my_soundfont.sf2` ,从而可以在系统内启用对应的虚拟乐器服务。 #### 支持该格式的软件 除了前面提到过的 FluidSynth 外,还有许多其他的音频制作工具也广泛采用了 SoundFont 技术,如 QSynth(一款图形化的 FluidSynth 客户端)、LinuxSampler 或者是 Windows 上流行的 Kontakt 等插件形式的产品都可以很好地读取并运用此类资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值