第一键盘 - 电子琴在线论坛

 找回密码
 现在注册

QQ登录

只需一步,快速开始

查看: 1515|回复: 21
打印 上一主题 下一主题

[技术文章] 揭秘音频节奏的文件格式

  [复制链接]

跳转到指定楼层
1#
发表于 2023-8-16 20:54:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 中国琴音 于 2023-8-17 12:51 编辑

揭秘音频节奏的文件格式

前言

雅马哈在PSR-S950上首发了音频节奏,但这是一项让人又爱又恨的技术。爱是因为音频声部保留了MIDI鼓组难以产生的微妙共鸣和律动,而恨是因为编辑或者制作新节奏时使用音频声部比较麻烦……
“音频节奏”这个词其实有点以偏概全,事实上只有鼓组是音频,其他音轨都是MIDI。相比之下,KETRON Audya5的“音频节奏”,才是真正意义上的音频节奏——因为所有的音轨都是音频。雅马哈发布了“Audio Phraser”软件,供用户创建和编辑音频节奏的基本骨架。这样,用户可以更加自由地创建、编辑和共享原创的音频节奏。

音频节奏的文件格式

自从雅马哈为Genos发布了扩展音频节奏,我就想对音频节奏的文件格式一探究竟。以下是一些初步的研究成果:
音频节奏文件是一个类似于aif格式音频文件的容器,我们熟知的SMF(标准MIDI文件)也是如此。事实上,音频节奏文件和普通的节奏文件同样基于SMF0格式的MIDI文件,但是附加的模块有所不同。
一个音频节奏文件依次含有以下模块(回复可见):
游客,如果您要查看本帖隐藏内容请回复

AASM和AFil模块是新增的,其他模块则是普通节奏已有的。各个模块都有一个模块标识符和一个模块大小字段,两者的长度均为4个字节。模块大小通常不计算模块标识符,以及模块大小字段本身的大小。
AASM模块相对较小,大约有2500字节。该模块由15个长度可变的ASEG子模块组成。每个ASEG子模块都有一个长度为4个字节的子模块大小字段。至于为什么有15个ASEG子模块呢?是因为ASEG子模块和节奏的乐段是一一对应的,3个前奏+4个主奏+4个插入+1个中断+3个尾声=15个乐段。
一个ASEG 子模块依次由以下3部分组成(回复可见):
游客,如果您要查看本帖隐藏内容请回复
Adec部分的长度可变,但是有一个明显的、长度为4个字节的大小字段。Atab和AMix部分的长度似乎是固定的(分别为101和28字节),并且没有明显的大小字段。
Adec部分的内容是ASCII文本,写明了节奏乐段的名称,如“Main A”或“Fill In DD”。乐段名称和4个字节长的大小字段,是Adec部分仅有的信息。
很抱歉,我暂时没有彻底搞清楚Atab部分的作用。Atab部分包含了一个ASCII字符串,用于标明节奏相应乐段所使用的音频文件。除了音频的文件名以外,用于测试的音频文件中,所有Atab部分和AMix部分各自的值都相同。此字符串在转储中清晰可见,如下图所示(回复可见):
游客,如果您要查看本帖隐藏内容请回复

AMix部分则含有MIDI事件的编码,如下图所示(回复可见):
游客,如果您要查看本帖隐藏内容请回复

AMix部分的内容,其含义是设置音频声部的音量、相位和混响发送值。雅马哈喜欢用MIDI事件控制其他参数(如音色文件、OTS等),这次雅马哈仍然用MIDI事件控制音频声部。
AFil模块也由子模块组成,这里的子模块叫ADSg。AFil模块相当大,因为它包含了音频的波形数据。
下表展示了一个AFil模块中,第一个ADSg子模块的偏移量和长度信息,仅做参考(回复可见):
游客,如果您要查看本帖隐藏内容请回复

容器之间的关系很重要,因为容器和子模块是嵌套的(回复可见):
游客,如果您要查看本帖隐藏内容请回复
在编写解析节奏文件的代码时,嵌套让人有点头晕。
ADSg子模块是保存音频的波形(元)信息的容器。和刚才介绍过的ASEG子模块一样,一个AFil模块里面有15个ADSg子模块——和音频文件是一一对应的关系。ANdc内部含有音频文件名,这里的文件名与ASEG子模块中的文件名相匹配。而AWav,则是盛放音频的波形数据的容器。
音频节奏所用的音频文件的格式和wav文件类似,但并不是wav,而是微软的riff文件。我尝试将音频节奏文件当做raw格式的音频文件导入到播放器,其中的音频声部可以正常播放。经分析,音频声部的格式似乎是44100Hz、16位立体声、大端格式(big-endian)。同时,音频没有压缩,也没有加密。所以,转储音频节奏中的音频声部并不是什么难事。

Yamaha Audio Phraser(以下简称YAP)

我们已经初步了解了音频节奏文件的格式,以下是YAP所生成内容的简介。
YAP生成一个MThd模块、一个MTrk模块(SMF0格式)、每个音频的波形数据对应的ASEG模块、AFil模块(包括每个音频文件对应的ADSg子模块)和CASM信息模块。
MIDI部分的速度和拍号与YAP中设置的速度和拍号相同,MIDI部分的标题则会作为音频节奏的名称。
MIDI部分的开头有节奏必须的标记:SFF2和SInt,而在SInt标记后面有一条SysEx消息:General MIDI System ON(F0 7E 7F 09 01 F7)。MIDI部分的调号设置为C大调/a小调,之后是:
  • SMPTE偏移量
  • 音序器特定元数据:ff 7f 04 43 00 01 00 00
但是,MIDI通道4里有4个看起来很奇怪的音符关闭事件,这很让人疑惑不解(回复可见):
游客,如果您要查看本帖隐藏内容请回复

这是bug吗?其余的标记表示节奏乐段的开始,乐段的长度则是该乐段音频的波形数据的长度。所以,如果主奏A音频的波形数据长度为2小节,那么该乐段的MIDI音轨的长度也是2小节。
CASM信息模块最小,并为MIDI通道9(鼓组1)设置NTR/NTT。NTR设置为“Root Fixed”,NTT则是“Bypass/Bass Off”。而通道10(鼓组2)并没有设置NTR/NTT,这也是一个奇怪之处。
除此之外,YAP不生成OTSc模块。
YAP为导入音频节奏文件的每个波形文件创建一个awi文件,awi文件很可能保存了音频乐句的分析结果(如节拍、速度的检测结果)。比较awi文件与生成的音频节奏文件中ASEG模块和AInf模块的内容,有助于验证一个猜想:awi文件是ASEG模块和AInf模块的“原型”。
分享到: QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
回复

使用道具 举报

2#
发表于 2023-8-16 22:09:53 | 只看该作者
谢谢分享!
回复 支持 反对

使用道具 举报

3#
发表于 2023-8-17 03:48:28 | 只看该作者
感谢版主技术性文章,正好想研究一下
回复 支持 反对

使用道具 举报

4#
发表于 2023-8-17 06:52:36 | 只看该作者
过来看看
回复 支持 反对

使用道具 举报

5#
发表于 2023-8-17 09:13:19 | 只看该作者
谢谢分享
回复 支持 反对

使用道具 举报

6#
发表于 2023-8-17 14:24:32 | 只看该作者
谢谢分享
回复 支持 反对

使用道具 举报

7#
发表于 2023-8-18 09:03:07 | 只看该作者
谢谢楼主分享
回复 支持 反对

使用道具 举报

8#
发表于 2023-8-22 01:42:27 | 只看该作者
谢谢 老师辛苦了  
回复 支持 反对

使用道具 举报

9#
发表于 2023-8-22 08:58:15 | 只看该作者
谢谢 老师分享
回复 支持 反对

使用道具 举报

10#
发表于 2023-8-23 00:12:33 使用第一键盘发送 | 只看该作者
虽然看不懂,还是得点赞!
回复 支持 反对

使用道具 举报

11#
发表于 2023-8-24 08:00:19 | 只看该作者
回复 支持 反对

使用道具 举报

12#
发表于 2023-9-3 10:52:13 | 只看该作者
我的天哪
回复 支持 反对

使用道具 举报

13#
发表于 2023-9-3 10:57:35 | 只看该作者
我想知道
回复 支持 反对

使用道具 举报

14#
发表于 2023-9-4 09:49:46 | 只看该作者
感谢楼主分享!!!
回复 支持 反对

使用道具 举报

15#
发表于 2023-9-5 06:06:41 使用第一键盘发送 | 只看该作者
回复 支持 反对

使用道具 举报

16#
发表于 2023-9-6 09:14:16 | 只看该作者
送人头阿大使馆
回复 支持 反对

使用道具 举报

17#
发表于 2023-9-7 15:27:51 | 只看该作者
说的好、谢谢作者!
回复 支持 反对

使用道具 举报

18#
发表于 2023-9-26 17:30:16 | 只看该作者
学习一下
回复 支持 反对

使用道具 举报

19#
发表于 2023-10-19 22:23:38 | 只看该作者
过来看看
回复 支持 反对

使用道具 举报

20#
发表于 2023-10-24 08:07:22 | 只看该作者

感谢版主技术性文章
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 现在注册

本版积分规则

关闭

新闻头条上一条 /1 下一条

【重要通知】|申请友链|Archiver|手机版|第一键盘 - 电子琴信息网 - 电子琴在线论坛 ( 粤ICP备14036084号 )

GMT+8, 2024-4-29 20:46 , Processed in 0.121041 second(s), 42 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表