https://github.com/sakuzypeng/atmosrecorder
一款由 AI 开发的 macOS 命令行工具,可录制系统解码的杜比全景声(Dolby Atmos)并保存为 12 声道 WAV 文件。
https://github.com/sakuzypeng/atmosrecorder
ai-programming audio-recorder avfoundation cli command-line-tool dolby-atmos macos objective-c spatial-audio
Last synced: about 1 month ago
JSON representation
一款由 AI 开发的 macOS 命令行工具,可录制系统解码的杜比全景声(Dolby Atmos)并保存为 12 声道 WAV 文件。
- Host: GitHub
- URL: https://github.com/sakuzypeng/atmosrecorder
- Owner: SakuzyPeng
- License: mit
- Created: 2025-06-12T16:11:08.000Z (12 months ago)
- Default Branch: master
- Last Pushed: 2025-06-13T07:21:53.000Z (12 months ago)
- Last Synced: 2025-06-13T08:27:28.344Z (12 months ago)
- Topics: ai-programming, audio-recorder, avfoundation, cli, command-line-tool, dolby-atmos, macos, objective-c, spatial-audio
- Language: Objective-C
- Homepage:
- Size: 63.5 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
> **开发说明**
>
> 本程序由 AI 完成编写和优化工作,开发者仅提供需求和反馈。这是一个探索 AI 辅助编程能力的实验项目。
>
> **开发工具**
>
> - **AI**(网页端):
> - 主要编写:Claude 4 Opus (Anthropic)
> - 辅助优化:Gemini 2.5 Pro Preview (Google)
> - 气氛组:ChatGPT o4-mini-high (OpenAI)
> - **IDE**:Xcode 16.4
> - **系统**:macOS 15.5
>
> **Q: 处理时可以使用其他音频应用吗?**
>
> A: **通常可以**。经测试,播放音乐、视频等不会影响录制。但建议不要在处理过程中切换音频设备或更改设备设置。
>
> **Q: 录制的音频会受到系统空间音频设置的影响吗?**
>
> A: **不会**。本程序直接获取解码后的原始多声道数据,不受头部追踪、个性化空间音频(HRTF)等系统设置的影响。您获得的是纯净的 12 声道解码结果。
# 全景声音频录制工具
一个简单的 macOS 命令行工具,用于录制由系统解码后的多声道音频(如杜比全景声),并将其保存为 12 声道 WAV 文件。
**声明**:本程序完全由 AI 开发,开发者未参与代码编写。
## 功能特点
🎵 基础音频处理:使用 Apple 的 MTAudioProcessingTap API 进行音频提取
🔊 固定输出格式:输出为 12 声道 7.1.4 格式(48kHz, 32-bit Float)
📦 批量处理:支持处理多个文件
📊 进度显示:显示基本的处理进度
🚀 使用方便:支持拖拽文件处理
## 系统要求
- macOS 10.15 或更高版本(推荐 macOS 11.0+)
- 支持的输入格式:`.m4a`、`.ec3`
**注**:在 macOS 15.0+ 上开发和测试,较旧版本可能存在兼容性问题。
## 安装方法
### 方法一:下载预编译版本(推荐)
1. 访问 **Releases** 页面。
2. 下载最新的 `AtmosRecorder-unix.tar.gz`。
3. 解压并运行:
```
tar -xzf AtmosRecorder-unix.tar.gz
chmod +x AtmosRecorder
./AtmosRecorder
```
### 方法二:通过 GitHub Actions 下载
1. 访问 **Actions** 页面。
2. 选择最新的成功构建。
3. 下载 `unix-executable-AtmosRecorder` artifact。
4. 解压后即可使用。
### 方法三:从源码编译
1. 克隆仓库:
```
git clone https://github.com/Sakuzy/AtmosRecorder.git
cd AtmosRecorder
```
2. 使用 Xcode 打开项目:
```
open AtmosRecorder.xcodeproj
```
3. 选择目标设备为 "My Mac"。
4. 点击 **Product → Build**(或按 `⌘B`)编译。
## 使用方法
### 基本用法
**自动查找模式**
```
./AtmosRecorder
```
程序会在当前目录中查找第一个支持的音频文件并处理。
**指定文件**
```
./AtmosRecorder /path/to/audio.m4a
```
处理指定的音频文件。
**批量处理**
```
./AtmosRecorder file1.m4a file2.eac3 file3.ec3
```
一次处理多个文件。
**处理整个文件夹**
```
./AtmosRecorder /path/to/folder/
```
自动查找并处理文件夹中的所有支持格式的音频文件。
### 快捷用法
**拖拽**:将文件或文件夹拖到程序图标上,自动处理。
**双击**:双击程序图标,自动处理同目录下的音频文件。
## 输出说明
- **输出格式**:WAV 文件
- 声道配置
:12 声道 7.1.4
- `L`, `R`, `C`, `LFE` (前置左右、中置、低音)
- `Ls`, `Rs` (环绕左右)
- `Ltf`, `Rtf` (前置顶部左右)
- `Ltr`, `Rtr` (后置顶部左右)
- 备用声道 x2
- **采样率**:48,000 Hz
- **位深度**:32-bit Float
- **文件命名**:`原文件名_atmos_714.wav`
- **避免覆盖**:如果输出文件已存在,会自动添加编号(如 `_atmos_714_1.wav`)
### 声道映射
程序采用简单的声道映射方式:
- 如果解码后的结果少于 12 声道,额外的声道将为静音。
- 如果解码后的结果超过 12 声道,只使用前 12 个声道。
- 尽量保持原始音频的基本特性。
## 性能说明
- 处理速度为实时播放速度(1x),这是当前实现的限制。
- 处理过程中音频会静音播放,不会产生声音。
- 输出文件较大,约每分钟 **140MB**。
- 处理前请确保有足够的磁盘空间。
#### 实际案例参考
以下是一次真实的处理记录,可供参考:
- **输入文件**:一个 `3分58秒` 的全景声音频 (`.ec3`, 1024kb/s, `30.5 MB`)
- **峰值内存**:约 `50 MB` (在 Xcode 调试环境下观测)
- **输出文件**:一个 12 声道的 `.wav` 文件,大小为 `549.5 MB`
## 注意事项
> #### ⚠️ 重要提醒
>
> - **版权注意**:请确保您有权处理相关音频文件。本工具仅供个人学习和合法用途使用。
>
> - 文件大小
>
> :输出的 WAV 文件会比原始压缩格式大很多。例如:
>
> - 5 分钟的音频 ≈ 700MB
> - 1 小时的音频 ≈ 8.4GB
>
> - **处理时间**:由于采用实时处理,一个 5 分钟的音频文件需要约 5 分钟处理时间。
>
> - **内存使用**:处理大文件时可能占用较多内存,建议关闭其他大型应用。
>
> #### 音频设备注意事项:
>
> 本程序录制的是纯净的解码结果,**不受**以下因素影响:
>
> - 头部追踪(Head Tracking)
> - 个性化空间音频(Personalized HRTF)
> - 系统音效处理
>
> 经测试,其他程序的音频播放通常不会影响录制。
>
> **重要**:处理过程中请**避免**:
>
> - 切换音频输出设备
> - 更改音频设备设置(如 AirPods 的空间音频开关)
> - 插拔音频设备
>
> 这些操作可能会导致录制中断或产生异常。
>
> #### 如何验证输入文件为全景声?
>
> 在处理文件时,您可以随时检查您的音频文件是否被 macOS 正确识别为杜比全景声格式。这是一个非常有用的验证方法:
>
> 1. 运行 `AtmosRecorder` 并开始处理一个音频文件。
> 2. 连接您的空间音频耳机(如 AirPods Pro 2)。
> 3. 打开 macOS 的**控制中心**,并点击**声音**模块。
> 4. 如果您看到如下图所示,在音量条旁边明确显示 **“杜比全景声”** 字样,这证明系统已成功激活全景声解码器。
>
> 这表明您的输入文件是有效的全景声音频,并且本工具正在正确地截取解码后的数据。
>
> **注**:本工具默认以**静音模式**在后台处理音频。即使**不连接任何耳机**,录制过程也完全可以正常工作。不过,“杜比全景声”这个视觉提示是 macOS 空间音频功能的一部分,通常只在使用受支持的耳机时才会显示。因此,如果您使用内置扬声器,将看不到此提示,经测试这不影响最终录制的 12 声道 WAV 文件。
## 故障排除
- **问题:程序提示"未找到音频轨道"**
- 确保输入文件包含音频数据。
- 检查文件是否损坏。
- **问题:输出文件声道数不正确**
- 这通常表示输入文件不是真正的全景声格式。
- 尝试使用其他全景声音频文件。
- **问题:处理速度很慢**
- 这是正常的,程序使用实时播放速度以确保质量。
- 确保磁盘有足够的写入速度(建议使用 SSD)。
- 问题:控制台出现系统警告信息
如果看到类似以下的警告信息,这是正常的,不会影响转换结果:
```
AddInstanceForFactory: No factory registered for id...
PlatformUtilities::CopyHardwareModelFullName() returns unknown value...
MEMixerChannel:: failed to set kAudioUnitProperty_ChannelLayout...
HALC_ProxyIOContext::IOWorkLoop: skipping cycle due to overload
```
这些是 macOS 音频系统的内部警告,可以安全忽略。最后一条关于 "overload" 的警告可能在系统负载较高时出现,但不影响音频质量。
为了尽可能地提升程序的稳定性和可靠性,**AtmosRecorder 内部已经实现了一项尝试**:程序在启动时,会通过执行 `[NSThread setThreadPriority:1.0];` 这行代码,主动向 macOS 系统申请更高的线程处理优先级。
这样做的目的是,当您的电脑比较繁忙时,操作系统会更倾向于将宝贵的 CPU 资源分配给 AtmosRecorder,从而尽力避免因处理超时而产生 `overload` 警告。
尽管有这项优化,但 `overload` 警告的出现与整个系统的瞬时负载都有关系,因此可能无法 100% 杜绝。
## 技术细节
本工具使用了以下技术:
- **MTAudioProcessingTap**:Apple 的音频处理 API
- **AVFoundation**:用于媒体文件的读取
- **非交错音频格式**:用于多声道音频处理
工具仍在持续改进中,可能存在一些限制和不足。
## 常见问题
Q: 为什么固定为 12 声道输出?
A: 这是基于 Apple 系统解码全景声的常见格式。我们采用了这个配置作为默认输出。
Q: 可以加快处理速度吗?
A: 目前的实现基于实时播放,暂时无法加速。我们正在研究可能的优化方案。
Q: 支持其他输出格式吗?
A: 目前仅支持 WAV 格式。未来可能会考虑支持更多格式。
Q: 可以在 Windows/Linux 上使用吗?
A: 由于依赖 macOS 的音频框架,目前仅支持 macOS 系统。
## 更新日志
**v1.0 (2025.6.13)**
- 初始版本
- 支持基本的多声道音频录制功能
- 支持 `.m4a`, `.ec3` 格式
- 实现了批量处理和进度显示
## 许可证
本项目仅供学习和研究使用。使用者需自行承担使用本工具的责任。作者不对使用本工具产生的任何后果负责。
## 开源信息
### 开源协议
本项目基于 **MIT** 协议开源。详见 `LICENSE` 文件。
### GitHub Actions 自动构建
本项目使用 GitHub Actions 实现自动化构建:
- **触发条件**:推送到 `master` 分支或 Pull Request
- **构建环境**:macOS 15 (最新版)
- 构建配置:
- Release 模式
- 无代码签名(方便分发)
- 最低支持 macOS 12.0
- 构建产物:
- `unix-executable-AtmosRecorder`:包含可执行文件和便携式启动脚本
- `release-package`:压缩包版本(仅 `master` 分支)
查看 `.github/workflows/objective-c-xcode.yml` 了解构建细节。
### 项目结构
```
AtmosRecorder/
├── AtmosRecorder.xcodeproj # Xcode 项目文件
├── AtmosRecorder/ # 源代码目录
│ ├── main.m # 主程序入口
│ └── TapManager.h/m # MTAudioProcessingTap 实现
├── .github/workflows/ # GitHub Actions 配置
├── LICENSE # MIT 开源协议
└── README.md # 本文档
```
## 贡献
欢迎提交问题报告、功能建议和改进意见。这是一个学习项目,还有很多可以改进的地方。
如需贡献代码:
1. Fork 本仓库
2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 提交 Pull Request
------
**免责声明**:本工具与 Dolby Laboratories 无关。Dolby Atmos 是 Dolby Laboratories 的注册商标。本工具仅是一个学习项目,可能存在各种限制和不足。本程序完全由 AI 开发,作者不对程序的正确性和稳定性做任何保证。