# Sound-map **Repository Path**: handsomest/sound-map ## Basic Information - **Project Name**: Sound-map - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-25 - **Last Updated**: 2026-07-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 声音地图:校园一分钟 原生 TypeScript 微信小程序 MVP:在校园地图上记录 10–60 秒环境声音,并让其他用户按地点漫游聆听。 项目保留**本地体验模式**:不需要开通 CloudBase、不需要部署云函数,也不会产生云开发费用。该模式下录音、声音记录、收藏和举报仅保存在当前微信客户端,适合离线调试录音、地图、发布和播放体验。 ## 自建服务真机模式 默认运行模式已切换为 `SELF_HOSTED`,小程序会连接 `https://sound-map.parkerluxu.space`。该域名必须继续在微信公众平台配置为 request、uploadFile 和 downloadFile 合法域名。 部署服务端新代码后,用两个不同微信账号进行验证: 1. A 在真机预览中允许定位和麦克风权限,录制至少 10 秒声音并发布。 2. B 刷新地图,确认出现 A 的点位,进入详情页并播放音频。 3. B 收藏并举报该声音,确认接口返回成功提示。 4. A 打开“我的记录”,确认能看到刚发布的内容。 服务器生产环境必须设置 `WECHAT_APP_ID`、`WECHAT_APP_SECRET`、强随机 `JWT_SECRET`、`DEV_AUTH_BYPASS=false`;试点期间可设置 `AUTO_PUBLISH=true`,接入审核后改为 `false`。 ## 已实现 - 地图浏览、地图选点、地点预览; - 10–60 秒录音、试听、文字感受与标签; - 云存储上传、草稿创建、发布前校验与“待审核”状态; - 我的记录、公开详情、短期音频播放 URL; - 收藏、举报和基础云函数鉴权骨架。 ## 本地体验模式 1. 在微信开发者工具中导入本目录,填入自己的小程序 AppID。 2. 将 [miniprogram/utils/config.ts](./miniprogram/utils/config.ts) 中 `RUNTIME_MODE` 改为 `LOCAL`。 3. 点击“编译”查看地图和页面;点击“预览”并用手机扫码,测试定位、录音和播放。 4. 在地图点击“记录此刻”,录制一段 10–60 秒的声音。发布后会直接显示在同一台设备的地图和“我的记录”中。 本地数据可在微信开发者工具中通过“清缓存 → 清除数据缓存”重置;真机则可通过删除小程序本地数据重置。录音功能必须在真机预览中验证。 ## 云开发多人版(后续可选) 1. 将 [miniprogram/utils/config.ts](./miniprogram/utils/config.ts) 的 `USE_LOCAL_MODE` 改为 `false`,并填入 CloudBase 环境 ID。 2. 创建一个 CloudBase 云环境;基础库选择 3.0.0 或更高版本。 3. 右键上传并部署 `cloudfunctions` 下每个函数(安装依赖选择“云端安装依赖”)。 4. 在云数据库创建:`users`、`soundPosts`、`audioAssets`、`favorites`、`reports`、`idempotencyKeys`、`playEvents`、`moderationLogs` 集合。 5. 将 `cloudfunctions/_shared/campus.js` 中的校园中心、发布边界和禁区替换为真实数据;同一份文件同步复制进 `createUploadTicket` 与 `submitSoundPost` 函数目录后再部署。 ## 数据库权限建议 MVP 阶段将上述业务集合的客户端读写权限设为“仅云函数可读写”。公开地图、详情和我的记录均通过云函数读取,避免客户端绕过状态和权限校验。 ## 当前限制 - 新帖子统一先进入人工审核;管理员审核端尚未实现。 - 服务端会校验客户端时长范围、文件大小、文件路径归属;生产环境应补充可信音频解析/转码任务,不能只信任客户端上报的时长。 - `listMapPosts` 当前按小校区 MVP 数据量读取已发布记录后做视区/聚合;发布量上升后须替换为 GeoJSON/Geohash 范围查询。 详细产品与技术设计见 [声音地图-校园一分钟-需求分析与实现方案.md](./声音地图-校园一分钟-需求分析与实现方案.md)。