添加竞品数据结构以供分析

This commit is contained in:
2026-04-16 00:11:24 +08:00
parent d92829c85d
commit e0da9dfd4b
11 changed files with 500 additions and 1 deletions
+63
View File
@@ -0,0 +1,63 @@
## A streamlined .gitignore for modern .NET projects
## including temporary files, build results, and
## files generated by popular .NET tools. If you are
## developing with Visual Studio, the VS .gitignore
## https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
## has more thorough IDE-specific entries.
##
## Get latest from https://github.com/github/gitignore/blob/main/Dotnet.gitignore
# Rider
.idea/
#macOS
.DS_Store
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# dotenv environment variables file
.env
# Others
~$*
*~
CodeCoverage/
# MSBuild Binary and Structured Log
*.binlog
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
+3 -1
View File
@@ -1,10 +1,12 @@
# Resonance
每一位声音设计师都值得拥有一个好用的资产管理器。
助你快速将脑子里的动静转换成DAW里的波形。
## 技术栈
.NET + Avaloina + Ffmpeg
.NET + Avaloina + SQLite
## Roadmap
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+191
View File
@@ -0,0 +1,191 @@
让我整理一下这些字段的含义:
1. id - 主键ID
2. path - 原始导入路径
3. filename - 带扩展名的文件名
4. description - 文件自带描述
5. length - 音频长度(时长)
6. bit_depth - 位深度(如16bit, 24bit
7. channels - 声道数(单声道/立体声/环绕声)
8. date_added - 导入日期
9. sample_rate - 采样率(如44.1kHz, 48kHz
10. type - 文件类型(如WAV, MP3, AIFF等)
11. cd_title - CD标题
12. artist - 艺术家
13. coding_history - 编码历史
14. original_date - 原始日期
15. originator_ref - 来源引用
16. originator - 来源/创作者
17. timecode - 时间码
18. subcategory - 子分类
19. category - 分类
20. comments - 注释
21. episode - 剧集/集数
22. frame_rate - 帧率
23. group - 分组
24. library - 音频库
25. location - 位置/地点
26. project_name - 项目名称
27. rating - 评分
28. tape - 磁带
29. scene - 场景
30. sync_point - 同步点
31. take - 录音条次
32. track_title - 曲目标题
33. composer - 作曲家
34. designer - 设计师
35. publisher - 出版商
36. folder - 文件夹
37. genre - 流派/风格
38. keywords - 关键词
39. copyright - 版权
40. recordist - 录音师
41. manufacturer - 制造商
42. notes - 备注
43. microphone - 麦克风
44. directory - 目录
45. origination_time - 创建时间
46. unique_id - 唯一标识符
47. bpm - 每分钟节拍数
48. mood - 情绪/氛围
49. short_id - 短ID
50. cue_number - 提示号
51. style - 风格
52. markers - 标记点
53. is_edited - 是否已编辑
54. is_split - 是否已分割
55-62. user1-user8 - 用户自定义字段
我会为用户提供一个详细的分析报告。
我来为您分析这个音频管理软件的表结构。根据字段名称和数据类型,这是一个专业的**音频资产管理系统**的数据库结构,类似于 SoundMiner、BaseHead 等专业音频库管理软件。
## 字段含义分析
### 📌 基础标识字段
| 字段名 | 类型 | 含义说明 |
| ----------- | ------- | ---------------------------------------------- |
| `id` | integer | **主键ID**,音频文件的唯一数字标识符 |
| `unique_id` | text | **全局唯一标识符**,通常为UUID,用于跨系统识别 |
| `short_id` | text | **短ID**,便于人工识别或显示的简短标识 |
### 📁 文件存储字段
| 字段名 | 类型 | 含义说明 |
| ----------- | ---- | ---------------------------------------------------- |
| `path` | text | **原始导入路径**,音频文件被导入时的完整文件路径 |
| `filename` | text | **文件名**,包含扩展名的音频文件名称(如 sound.wav) |
| `folder` | text | **文件夹**,文件所在的文件夹名称 |
| `directory` | text | **目录**,文件的存储目录路径 |
### 🎵 音频技术参数
| 字段名 | 类型 | 含义说明 |
| ------------- | ------- | -------------------------------------------------------- |
| `length` | real | **时长**,音频文件的播放长度(通常以秒为单位) |
| `bit_depth` | integer | **位深度**,音频采样位深(如 16、24、32 bit |
| `channels` | integer | **声道数**,如 1=单声道、2=立体声、6=5.1环绕声 |
| `sample_rate` | integer | **采样率**,如 44100、48000、96000 Hz |
| `type` | text | **文件类型**,音频格式(WAV、MP3、AIFF、FLAC等) |
| `bpm` | real | **节拍速度**,每分钟节拍数,用于音乐类音频 |
| `frame_rate` | text | **帧率**,视频同步用的时间基准(如 24fps、25fps、30fps |
| `timecode` | integer | **时间码**,用于音视频同步的时间戳信息 |
### 📝 元数据描述字段
| 字段名 | 类型 | 含义说明 |
| ------------- | ------------ | ---------------------------------------------------- |
| `description` | text | **描述**,音频内容的文字说明 |
| `category` | text | **分类**,音频的大类(如:音效、音乐、对白、环境音) |
| `subcategory` | text | **子分类**,更细分的类别(如:交通→汽车→引擎) |
| `genre` | text | **流派**,音乐风格分类(如:摇滚、古典、电子) |
| `style` | text | **风格**,更具体的风格描述 |
| `mood` | text | **情绪**,音频传达的情感氛围(如:紧张、欢快、悲伤) |
| `keywords` | text | **关键词**,用于搜索的标签,多个关键词通常用逗号分隔 |
| `rating` | decimal(5.3) | **评分**,音频质量或推荐度评分(如 0-5星) |
### 👤 创作者信息字段
| 字段名 | 类型 | 含义说明 |
| ---------------- | ---- | -------------------------------- |
| `artist` | text | **艺术家**,表演者或演奏者名称 |
| `composer` | text | **作曲家**,音乐创作者 |
| `designer` | text | **设计师**,音效设计师名称 |
| `recordist` | text | **录音师**,现场录音人员 |
| `publisher` | text | **出版商**,发行方或版权持有方 |
| `manufacturer` | text | **制造商**,音频库或设备的制作方 |
| `originator` | text | **来源方**,原始创建者或来源机构 |
| `originator_ref` | text | **来源引用**,原始来源的参考编号 |
### 🎬 项目制作字段
| 字段名 | 类型 | 含义说明 |
| -------------- | ------- | -------------------------------------- |
| `project_name` | text | **项目名称**,所属制作项目 |
| `library` | text | **音频库**,所属音效库或音乐库的名称 |
| `cd_title` | text | **CD标题**,原始CD专辑名称 |
| `track_title` | text | **曲目标题**,音乐或音轨的标题 |
| `episode` | text | **剧集**,所属剧集或系列编号 |
| `scene` | text | **场景**,对应的影视场景标识 |
| `take` | text | **条次**,录音的版本号或拍摄条次 |
| `tape` | text | **磁带**,原始磁带编号(历史遗留字段) |
| `cue_number` | integer | **提示号**,播放列表或乐谱中的编号 |
| `sync_point` | integer | **同步点**,用于音视频同步的参考点 |
### 📋 管理与状态字段
| 字段名 | 类型 | 含义说明 |
| ------------------ | ------- | -------------------------------------------------- |
| `date_added` | date | **导入日期**,音频入库的时间 |
| `original_date` | text | **原始日期**,音频创建或录制的日期 |
| `origination_time` | text | **创建时间**,音频文件的原始创建时间 |
| `is_edited` | integer | **是否已编辑**,布尔值(0=否,1=是) |
| `is_split` | integer | **是否已分割**,布尔值,标记是否从长文件中分割出来 |
| `location` | text | **位置**,录音地点或存储位置 |
| `group` | text | **分组**,用于组织管理的分组标识 |
| `markers` | text | **标记点**,音频内的关键时间点标记 |
### 📄 备注与版权字段
| 字段名 | 类型 | 含义说明 |
| ---------------- | ---- | -------------------------------------- |
| `comments` | text | **注释**,用户或系统添加的备注 |
| `notes` | text | **备注**,额外的说明信息 |
| `copyright` | text | **版权**,版权声明信息 |
| `coding_history` | text | **编码历史**BWF格式的编码历史记录 |
| `microphone` | text | **麦克风**,录音使用的麦克风型号或设置 |
### 🔧 用户自定义字段
| 字段名 | 类型 | 含义说明 |
| ----------------- | ---- | ------------------------------------------------------------ |
| `user1` ~ `user8` | text | **用户自定义字段**,共8个预留字段,供用户根据实际需求自定义用途 |
## 总结
这是一个**专业级音频资产管理系统**的完整表结构,主要特点:
1. **符合广播级标准**:包含 BWFBroadcast Wave Format)标准字段如 `coding_history``originator``timecode`
2. **支持影视后期制作**:有 `scene``take``episode``sync_point` 等影视制作相关字段
3. **音乐管理功能完善**:包含 `bpm``mood``genre``composer` 等音乐元数据
4. **灵活扩展性**:预留了8个用户自定义字段
5. **版权管理支持**:包含 `copyright``publisher``manufacturer` 等版权相关字段
+14
View File
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.1.72" />
<PackageReference Include="System.Data.SQLite" Version="2.0.3" />
</ItemGroup>
</Project>
+211
View File
@@ -0,0 +1,211 @@
namespace OCES.Resonance.Core;
/// <summary>
/// 音频文件元数据实体类,对应音频资产管理系统中的文件记录
/// </summary>
public class FileMeta
{
/// <summary>主键ID,音频文件的唯一数字标识符</summary>
public int Id { get; set; }
/// <summary>全局唯一标识符,通常为UUID,用于跨系统识别</summary>
public string UniqueId { get; set; }
/// <summary>文件的MD5值,用于查重</summary>
public string Md5 { get; set; }
/// <summary>短ID,便于人工识别或显示的简短标识</summary>
public string? ShortId { get; set; }
/// <summary>原始导入路径,音频文件被导入时的完整文件路径</summary>
public string Path { get; set; }
/// <summary>文件名,包含扩展名的音频文件名称(如 sound.wav</summary>
public string Filename { get; set; }
/// <summary>文件夹,文件所在的文件夹名称</summary>
public string Folder { get; set; }
/// <summary>目录,文件的存储目录路径</summary>
public string Directory { get; set; }
/// <summary>时长,音频文件的播放长度(通常以秒为单位)</summary>
public double Duration { get; set; }
public int TotalSamples { get; set; }
/// <summary>位深度,音频采样位深(如 16、24、32 bit</summary>
public int BitDepth { get; set; }
/// <summary>声道数,如 1=单声道、2=立体声、6=5.1环绕声</summary>
public int Channels { get; set; }
/// <summary>采样率,如 44100、48000、96000 Hz</summary>
public int SampleRate { get; set; }
/// <summary>文件类型,音频格式(WAV、MP3、AIFF、FLAC等)</summary>
public string Type { get; set; }
/// <summary>节拍速度,每分钟节拍数,用于音乐类音频</summary>
public double? Bpm { get; set; }
/// <summary>帧率,视频同步用的时间基准(如 24fps、25fps、30fps</summary>
public string? FrameRate { get; set; }
/// <summary>时间码,用于音视频同步的时间戳信息</summary>
public int? Timecode { get; set; }
/// <summary>描述,音频内容的文字说明</summary>
public string? Description { get; set; }
/// <summary>分类,音频的大类(如:音效、音乐、对白、环境音)</summary>
public string? Category { get; set; }
/// <summary>子分类,更细分的类别(如:交通→汽车→引擎)</summary>
public string? Subcategory { get; set; }
/// <summary> CatId </summary>
public string? CatId { get; set; }
public string? CategoryFull { get; set; }
/// <summary>流派,音乐风格分类(如:摇滚、古典、电子)</summary>
public string? Genre { get; set; }
/// <summary>风格,更具体的风格描述</summary>
public string? Style { get; set; }
/// <summary>情绪,音频传达的情感氛围(如:紧张、欢快、悲伤)</summary>
public string? Mood { get; set; }
/// <summary>关键词,用于搜索的标签,多个关键词通常用逗号分隔</summary>
public string? Keywords { get; set; }
/// <summary>评分,音频质量或推荐度评分(如 0-5星)</summary>
public decimal? Rating { get; set; }
/// <summary>艺术家,表演者或演奏者名称</summary>
public string? Artist { get; set; }
/// <summary>作曲家,音乐创作者</summary>
public string? Composer { get; set; }
/// <summary>设计师,音效设计师名称</summary>
public string? Designer { get; set; }
/// <summary>录音师,现场录音人员</summary>
public string? Recordist { get; set; }
/// <summary>出版商,发行方或版权持有方</summary>
public string? Publisher { get; set; }
/// <summary>制造商,音频库或设备的制作方</summary>
public string? Manufacturer { get; set; }
/// <summary>来源方,原始创建者或来源机构</summary>
public string? Originator { get; set; }
/// <summary>来源引用,原始来源的参考编号</summary>
public string? OriginatorRef { get; set; }
/// <summary>项目名称,所属制作项目</summary>
public string? ProjectName { get; set; }
/// <summary>音频库,所属音效库或音乐库的名称</summary>
public string? Library { get; set; }
/// <summary>CD标题,原始CD专辑名称</summary>
public string? CdTitle { get; set; }
/// <summary>曲目标题,音乐或音轨的标题</summary>
public string? TrackTitle { get; set; }
/// <summary>剧集,所属剧集或系列编号</summary>
public string? Episode { get; set; }
/// <summary>场景,对应的影视场景标识</summary>
public string? Scene { get; set; }
/// <summary>条次,录音的版本号或拍摄条次</summary>
public string? Take { get; set; }
/// <summary>磁带,原始磁带编号(历史遗留字段)</summary>
public string? Tape { get; set; }
/// <summary>提示号,播放列表或乐谱中的编号</summary>
public int? CueNumber { get; set; }
/// <summary>同步点,用于音视频同步的参考点</summary>
public int? SyncPoint { get; set; }
/// <summary>导入日期,音频入库的时间</summary>
public DateTime DateAdded { get; set; }
/// <summary>修改日期,音频创建或录制的日期</summary>
public DateTime OriginalModificationDate { get; set; }
/// <summary>创建时间,音频文件的原始创建时间</summary>
public DateTime OriginationTime { get; set; }
public DateTime? ReleaseDate { get; set; }
public string? TrackYear { get; set; }
/// <summary>是否已编辑,布尔值(0=否,1=是)</summary>
public bool? IsEdited { get; set; }
/// <summary>是否已分割,布尔值,标记是否从长文件中分割出来</summary>
public int? IsSplit { get; set; }
/// <summary>位置,录音地点或存储位置</summary>
public string? Location { get; set; }
/// <summary>分组,用于组织管理的分组标识</summary>
public string? Group { get; set; }
/// <summary>标记点,音频内的关键时间点标记</summary>
public string? Markers { get; set; }
/// <summary>注释,用户或系统添加的备注</summary>
public string? Comments { get; set; }
/// <summary>备注,额外的说明信息</summary>
public string? Notes { get; set; }
/// <summary>版权,版权声明信息</summary>
public string? Copyright { get; set; }
/// <summary>编码历史,BWF格式的编码历史记录</summary>
public string? CodingHistory { get; set; }
/// <summary>麦克风,录音使用的麦克风型号或设置</summary>
public string? Microphone { get; set; }
public string? MicPerspective { get; set; }
// 用户自定义字段(共8个)
/// <summary>用户自定义字段1</summary>
public string? User1 { get; set; }
/// <summary>用户自定义字段2</summary>
public string? User2 { get; set; }
/// <summary>用户自定义字段3</summary>
public string? User3 { get; set; }
/// <summary>用户自定义字段4</summary>
public string? User4 { get; set; }
/// <summary>用户自定义字段5</summary>
public string? User5 { get; set; }
/// <summary>用户自定义字段6</summary>
public string? User6 { get; set; }
/// <summary>用户自定义字段7</summary>
public string? User7 { get; set; }
/// <summary>用户自定义字段8</summary>
public string? User8 { get; set; }
}
+16
View File
@@ -0,0 +1,16 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "Core\Core.csproj", "{855F941D-5DA0-479A-BB79-5C7CE72CD34B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{855F941D-5DA0-479A-BB79-5C7CE72CD34B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{855F941D-5DA0-479A-BB79-5C7CE72CD34B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{855F941D-5DA0-479A-BB79-5C7CE72CD34B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{855F941D-5DA0-479A-BB79-5C7CE72CD34B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
+2
View File
@@ -0,0 +1,2 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/UserDictionary/Words/=Timecode/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>