Floaout
Floaout是下一代音频格式。
名称 |
类型 (字节) |
描述 |
规范版本 |
u8 (1) |
泡泡文件格式规范版本。 |
泡泡ID |
u128 (16) |
此文件的泡泡ID。如果泡泡未定义,则值为0。如果不为0,则必须基于bkbkb.net管理的ID。 |
泡泡版本 |
u16 (2) |
泡泡版本 |
帧数 |
u64 (8) |
帧数 |
第一个头部绝对帧 |
u64 (8) |
第一个头部绝对帧 |
每秒采样数 |
f64 (8) |
每秒采样数 |
LpcmKind |
u8 (1) |
LpcmKind |
BubSampleKind |
u8 (1) |
BubSampleKind |
名称大小 |
u8 (1) |
名称大小 (0~255) |
名称 |
字符串 |
名称 (UTF-8) |
CRC-32K/4.2 |
u32 (4) |
在汉明距离4的最大长度为2147483615(位)。在汉明距离6的最大长度为6167(位)。 |
LpcmKind
变体 |
描述 |
值 (类型 ) |
F32LE |
f32 小端 |
0 (u8 ) |
F64LE |
f64 小端 |
1 (u8 ) |
BubSampleKind
变体 |
描述 |
值 |
Lpcm |
Lpcm |
0 |
表达式 |
表达式 |
1 |
CRC
Algorithm::<u32> {
endian: Endian::Little,
poly: 0x93a409eb, // CRC-32K/4.2
init: 0xffffffff,
refin: true,
refout: true,
xorout: 0xffffffff,
residue: 0x76e908ce,
}
每个样本
| 泡泡样本 | | BubbleSample
|
泡泡样本
名称 |
类型 (字节) |
描述 |
泡泡函数大小 |
u16 (1) |
泡泡函数大小 |
泡泡的绝对X坐标 |
总和 |
泡泡的绝对X坐标 (X_0) |
空间 |
char (1) |
' ' |
泡泡的绝对Y坐标 |
总和 |
泡泡的绝对Y坐标 (Y_0) |
空间 |
char (1) |
' ' |
泡泡的绝对Z坐标 |
总和 |
泡泡的绝对Z坐标 (Z_0) |
空间 |
char (1) |
' ' |
域 |
OrOrExpr |
|
空间 |
char (1) |
' ' |
音量 |
总和 |
|
空间或空 |
char (1) |
' ' 如果有另一个 |
脚部相对帧 |
u64 (8) |
在 BubFnsBlock 结尾的帧数。 |
下一个头部相对帧 |
可选<u64> (8) |
在下一个 BubFnsBlock 开始的帧数。如果为0,则为 None 。 |
样本数据 |
|
样本数据 |
CRC-32K/4.2 |
u32 (4) |
在每脚帧之后。从上一个CRC。 |
样本数据
Lpcm
名称 |
类型 (字节) |
描述 |
示例 |
f32 或 f64 (4 或 8) |
依赖于 LpcmKind |
表达式
名称 |
类型 (字节) |
描述 |
表达式大小 |
u16 (2) |
表达式大小 |
表达式 |
总和 |
表达式 |
关键字
变量
关键字 |
描述 |
X |
说话者的绝对 X 坐标 |
Y |
说话者的绝对 Y 坐标 |
Z |
说话者的绝对 Z 坐标 |
x |
x = X - X_0 (X_0 是 Bubble 的绝对 X 坐标)。说话者的相对 X 坐标。 |
y |
y = Y - Y_0 (Y_0 是 Bubble 的绝对 Y 坐标)。说话者的相对 Y 坐标。 |
z |
z = Z - Z_0 (Z_0 是 Bubble 的绝对 Z 坐标)。说话者的相对 Z 坐标。 |
N |
绝对帧号 n。从文件开始的帧数。(as f64 ) |
n |
相对帧号 n。从 BubFnsBlock 开始的帧数。( as f64 ) |
F |
帧 (as f64 ) |
S |
每秒采样数 |
常量
函数
关键字 |
描述 |
sin |
正弦 |
cos |
余弦 |
tan |
正切 |
ln |
数的自然对数 |
lg |
数的以 2 为底的对数 |
其他
标点符号
符号 |
名称 |
+ |
加号 |
- |
减号 |
* |
星号 |
/ |
斜杠 |
&& |
AndAnd |
|
|
== |
EqEq |
!= |
Ne |
> |
Gt |
< |
Lt |
>= |
Ge |
<= |
Le |
分隔符
语法
// BubFns
BubFns = BubFn ZeroOrMoreBubFns / f
ZeroOrMoreBubFns = SpaceAndBubFn ZeroOrMoreBubFns / ()
SpaceAndBubFn = Space BubFn / f
// BubFn
// BubFn = Sum Space Sum Space Sum Space OrOrExpr Space Sum
BubFn = SumAndSpace BubFn1 / f
BubFn1 = SumAndSpace BubFn2 / f
BubFn2 = SumAndSpace BubFn3 / f
BubFn3 = OrOrExprAndSpace BubFn4 / f
BubFn4 = Sum () / f
SumAndSpace = Sum Space / f
OrOrExprAndSpace = OrOrExpr Space / f
// OrOr Expr
OrOrExpr = AndAndExpr OrOrExpr1 / AndAndExpr
OrOrExpr1 = OrOr OrOrExpr / f
OrOr = "||" () / f
// AndAnd Expr
AndAndExpr = ComparisonExpr AndAndExpr1 / ComparisonExpr
AndAndExpr1 = AndAnd AndAndExpr / f
AndAnd = "&&" () / f
// Comparison Expr
ComparisonExpr = Sum ComparisonExpr1 / f
ComparisonExpr1 = Comparison Sum / f
Comparison = EqEq () / Comparison1
Comparison1 = Ne () / Comparison2
Comparison2 = Ge () / Comparison3
Comparison3 = Le () / Comparison4
Comparison4 = Gt () / Comparison5
Comparison5 = Lt () / f
EqEq = "==" () / f
Ne = "!=" () / f
Ge = ">=" () / f
Le = "<=" () / f
Gt = '>' () / f
Lt = '<' () / f
// Sum
Sum = Term ZeroOrMorePlusOrMinusAndTerms / f
ZeroOrMorePlusOrMinusAndTerms = PlusOrMinusAndTerm ZeroOrMorePlusOrMinusAndTerms / ()
PlusOrMinusAndTerm = PlusOrMinus Term / f
// Term
Term = Factor ZeroOrMoreStarOrSlashAndFactors / f
ZeroOrMoreStarOrSlashAndFactors = StarOrSlashAndFactor ZeroOrMoreStarOrSlashAndFactors / ()
StarOrSlashAndFactor = StarOrSlash Factor / f
// Factor
Factor = PlusOrMinus Factor / Power
// Power
Power = Atom PowerAndFactor / Atom
PowerAndFactor = '^' Factor / f
// Atom
Atom = ExprInParentheses () / Atom1
Atom1 = FloatLiteral () / Atom2
Atom2 = IntegerLiteral () / Atom3
Atom3 = Function () / Atom4
Atom4 = Variable () / Atom5
Atom5 = Constant () / f
// Variable
Variable = UppercaseX () / Variable1
Variable1 = UppercaseY () / Variable2
Variable2 = UppercaseZ () / Variable3
Variable3 = LowercaseX () / Variable4
Variable4 = LowercaseY () / Variable5
Variable5 = LowercaseZ () / Variable6
Variable6 = UppercaseN () / Variable7
Variable7 = LowercaseN () / Variable8
Variable8 = UppercaseF () / Variable9
Variable9 = UppercaseS () / f
UppercaseX = 'X' () / f
UppercaseY = 'Y' () / f
UppercaseZ = 'Z' () / f
LowercaseX = 'x' () / f
LowercaseY = 'y' () / f
LowercaseZ = 'z' () / f
UppercaseN = 'N' () / f
LowercaseN = 'n' () / f
UppercaseF = 'F' () / f
UppercaseS = 'S' () / f
// Constant
Constant = E () / Constant1
Constant1 = Pi () / f
E = 'E' () / f
Pi = "PI" () / f
// Function
Function = Sine () / Function1
Function1 = Cosine () / Function2
Function2 = Tangent () / Function3
Function3 = Ln () / Function4
Function4 = Lg () / f
Sine = "sin" Factor / f
Cosine = "cos" Factor / f
Tangent = "tan" Factor / f
Ln = "ln" Factor / f
Lg = "lg" Factor / f
// Delimiters
ExprInParentheses = '(' ExprAndClose / f
ExprAndClose = Sum ')' / f
// Integer
IntegerLiteral = DecLiteral () / f
// Float
FloatLiteral = DecLiteral PointAndDecLiteral / BytesF64Literal
PointAndDecLiteral = '.' DecLiteral / f
BytesF64Literal = 'b' ???????? / f
// Dec
DecLiteral = DecDigit ZeroOrMoreDecDigits / f
ZeroOrMoreDecDigits = DecDigit ZeroOrMoreDecDigits / ()
DecDigit = '0' () / DecDigit1
DecDigit1 = '1' () / DecDigit2
DecDigit2 = '2' () / DecDigit3
DecDigit3 = '3' () / DecDigit4
DecDigit4 = '4' () / DecDigit5
DecDigit5 = '5' () / DecDigit6
DecDigit6 = '6' () / DecDigit7
DecDigit7 = '7' () / DecDigit8
DecDigit8 = '8' () / '9'
// Others
PlusOrMinus = Plus () / PlusOrMinus1
PlusOrMinus1 = Minus () / f
Plus = '+' () / f
Minus = '-' () / f
StarOrSlash = Star () / StarOrSlash1
StarOrSlash1 = Slash () / f
Star = '*' () / f
Slash = '/' () / f
Space = ' ' () / f
名称 |
类型 (字节) |
描述 |
规范版本 |
u8 (1) |
Floaout 文件格式规范版本 |
Floaout ID |
u128 (16) |
Floaout 文件此文件的 Floaout ID。如果歌曲未定义,值为 0。如果不为 0,它必须基于 bkbkb.net 管理的 ID。 |
Floaout 版本 |
u16 (2) |
Floaout 版本 |
泡泡 |
u16 (2) |
泡泡数量 |
帧数 |
u64 (8) |
帧数 |
每秒采样数 |
f64 (8) |
每秒采样数 |
LpcmKind |
u8 (1) |
LpcmKind |
标题大小 |
u8 (1) |
标题大小 (0~255) |
标题 |
字符串 |
标题 (UTF-8) |
艺术家大小 |
u8 (1) |
艺术家大小 (0~255) |
艺术家 |
字符串 |
艺术家 (UTF-8) |
CRC-32K/4.2 |
u32 (4) |
在汉明距离4的最大长度为2147483615(位)。在汉明距离6的最大长度为6167(位)。 |
每个泡泡
泡泡文件将是 'i.bub' (i = 0, ... , 泡泡数量 - 1)
名称 |
类型 (字节) |
描述 |
文件名大小 |
u8 (1) |
文件名大小 (0~255) |
文件名 |
字符串 |
不带 ".bub" 的泡泡文件名 (UTF-8) |
泡泡起始帧 |
u16 (2) |
泡泡起始帧的数量 |
泡泡起始帧 |
u64 (8) |
泡泡起始帧 |
... |
... |
... |
泡泡起始帧 |
u64 (8) |
泡泡起始帧 |
CRC-32K/4.2 |
u32 (4) |
从上一个 CRC。 |
库许可证
(作为预防措施,版权和其他知识产权属于艺术家及其关联方。)
待办事项
- 在
Color
和 Space
中使用泛型类型。
- 在 BubFrameReader 中添加
read_bub_fns_block
- 错误处理
- 阐明是否需要 #[derive(Order)]
- 在 BubfnsInterpreter 中添加位置字段
- 检查文件是否支持版本
- 并行计算
- 添加 pow、sinh 等函数