New Decryptor: Add js decoder for Ximalaya X2M and X3M #23

Merged
um-dev merged 9 commits from Yuki1536/um-web1:master into master 2022-12-22 16:24:43 +00:00
1 changed files with 1 additions and 1 deletions
Showing only changes of commit 3393bb0bff - Show all commits

View File

@ -3,7 +3,7 @@ import { AudioMimeType, SniffAudioExt, GetArrayBuffer, GetMetaFromFile } from ".
import { DecryptResult } from '@/decrypt/entity';
const HandlerMap: Map<string, Function> = new Map([
const HandlerMap: Map<string, (data: Uint8Array) => Uint8Array> = new Map([
["x2m", ProcessX2M],
["x3m", ProcessX3M],
]);
Yuki1536 marked this conversation as resolved Outdated

类型可以考虑更改为 Record<string, Handler>

不过看这个 handler 只有一个成员,可以考虑更改一下类型:

const HandlerMap: Record<string, (data: Uint8Array) => void> = { ... };

使用的时候可以直接:

HandlerMap.x2m( ... );

或者使用真正的 Map 类型:

const HandlerMap: Map<string, (data: Uint8Array) => void> = new Map([
  ["x2m", ProcessX2M],
  ["x3m", ProcessX3M],
]);

const handler = HandlerMap.get( key );
if (!handler) throw new Error( ... );
类型可以考虑更改为 `Record<string, Handler>` 不过看这个 handler 只有一个成员,可以考虑更改一下类型: ```ts const HandlerMap: Record<string, (data: Uint8Array) => void> = { ... }; ``` 使用的时候可以直接: ```ts HandlerMap.x2m( ... ); ``` 或者使用真正的 Map 类型: ```ts const HandlerMap: Map<string, (data: Uint8Array) => void> = new Map([ ["x2m", ProcessX2M], ["x3m", ProcessX3M], ]); const handler = HandlerMap.get( key ); if (!handler) throw new Error( ... ); ```

感谢。

抱歉,前两天发烧了,今天舒服点了在改了。

感谢。 抱歉,前两天发烧了,今天舒服点了在改了。

感谢你们的帮忙

感谢你们的帮忙

const HandlerMap: Map<string, (data: Uint8Array) => void>

不太明白这个数据类型的定义后的用法,为啥string后面是(data: Uint8Array),还通过=>指向一个void

目前用Map写的是

const HandlerMap: Map<string, Function> = new Map( ... );

谢谢

> const HandlerMap: Map<string, (data: Uint8Array) => void> 不太明白这个数据类型的定义后的用法,为啥string后面是(data: Uint8Array),还通过=>指向一个void 目前用Map写的是 ```ts const HandlerMap: Map<string, Function> = new Map( ... ); ``` 谢谢

(data: Uint8Array) => void 是一起的,这是一个函数签名,表示它读入一个 Uint8Array 的参数,并没有返回值(返回值为 undefined)

`(data: Uint8Array) => void` 是一起的,这是一个函数签名,表示它读入一个 Uint8Array 的参数,并没有返回值(返回值为 undefined)

感谢,那么我想调用相应key中的value的话,还是用

const handler = HandlerMap.get(raw_ext);

...

let musicDecoded: Uint8Array = handler(buffer);

这种写法么?

感谢,那么我想调用相应key中的value的话,还是用 ```ts const handler = HandlerMap.get(raw_ext); ... let musicDecoded: Uint8Array = handler(buffer); ``` 这种写法么?

试着这么写被VS画了红线

试着这么写被VS画了红线

把 vscode 报告的 TypeScript 错误信息发出来看看

把 vscode 报告的 TypeScript 错误信息发出来看看

抱歉,仔细看了一下逻辑。
函数是要返回一个新的数据,因此返回类型是错的。

(data: Uint8Array) => void

应该改为

(data: Uint8Array) => Uint8Array

抱歉,仔细看了一下逻辑。 函数是要返回一个新的数据,因此返回类型是错的。 `(data: Uint8Array) => void` 应该改为 `(data: Uint8Array) => Uint8Array`

明白了,那么最后是写Function好还是改成(data: Uint8Array) => Uint8Array比较好?

两种写法都能跑起来。

明白了,那么最后是写```Function```好还是改成```(data: Uint8Array) => Uint8Array```比较好? 两种写法都能跑起来。

我的建议是后者,因为提供了更详细的信息让 type script 来进行类型检查。

如果是前者然后改掉了函数参数类型,是不会报错的。

我的建议是后者,因为提供了更详细的信息让 type script 来进行类型检查。 如果是前者然后改掉了函数参数类型,是不会报错的。

OK

OK