OOC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
struct Object {
const struct Class * class; // 没变化
};

struct Class {
// 这里去掉 Object 继承,const struct Object _;
const char * name;
const struct Class * super;
size_t size;
void * (* ctor) (void * self, va_list * app);
void * (* dtor) (void * self);
int (* differ) (const void * self, const void * b);
int (* puto) (const void * self, FILE * fp);
};

struct Class Object = {.name = "Object"}; // 只定义 Object 的类描述符,不再定义 Class 的类描述符

struct Point {
const struct Object _;
int x, y;
};

struct PointClass { // 静态初始化类描述符
const struct Class _;
void (* draw) (const void * self);
} Point = {_.name = "Point", _.super = &Object, _.size = sizeof(struct Point), _.ctor = Point_ctor, .draw = Point_draw};

p = new(Point, 1, 2); // new 里面按照 Point 的大小申请内存和调构造函数

Object-oriented design patterns in the kernel 1,多态部分 Object-oriented design patterns in the kernel 2,继承部分 下载保存 https://www.cs.princeton.edu/courses/archive/spring21/cos217/ https://www.cs.princeton.edu/courses/archive/spring21/cos217/lectures/ 1 封装 - 参考文件操作 FILE* - 使用不完全类型 - 头文件分成 2 个,一个对外接口,一个用来给子类嵌套继承 2 多态 两种实现方式,常用第 2 种,文章对内核种第 2 种使用的特殊情况做了讨论 1. 最简单的方法是结构体包含函数指针,函数第一个参数为结构体指针。bar->foo ...

阅读更多

GPT-SoVITS

1
2
3
4
5
6
7
8
9
10
11
# 先设置好代理
export http_proxy="http://127.0.0.1:11081"
export https_proxy="http://127.0.0.1:11081"
export all_proxy="http://127.0.0.1:11081"

git config --global http.proxy http://127.0.0.1:11081

# 安装
conda create -n GPTSoVits python=3.9
conda activate GPTSoVits
bash install.sh

- 最方便的环境部署:参考视频 AutoDL+GPT-SoVITS ,直接用 autodl 传一段音频走一遍流程 - 手动环境部署: - PyTorch 2.0.1 + Python 3.8 + cuda 11.8 - 参考 README linux 装 - 参考 README 拷贝预训练模型,模型来源于整合包 - 由于使用的是录播,ffmpeg 提取录播的音频片段,交给 UVR5 进行处理,这里参考文档 整合包教程 中的内容 - 由于录播片段已经有 whisper 识别的 srt 字幕,在 UVR5 处理后,参考文档 使用字幕标注 中的工具进行切分,字符限制用的 15 字。然后手动修改 dataset_mapping.list 校对标注,标注文件的第一列的 vocal_path 要用绝对路径。校对除了改正 text 的内容 ...

阅读更多