4个版本
0.1.4 | 2023年10月22日 |
---|---|
0.1.3 | 2023年10月13日 |
0.1.2 | 2023年10月13日 |
0.1.1 |
|
0.1.0 | 2023年10月12日 |
在 多媒体 中排名 28
79KB
1.5K SLoC
smrec
最简多轨音频录音机,可通过OSC或MIDI控制。
我这样做是因为我需要一个简单的多轨音频录音机,我可以通过OSC或MIDI来控制。
我不想也没有资源在我的设置中使用DAW来完成这个目的,并希望每个通道都有一个单声道WAV文件,按日期和时间组织在目录中。
我在一个设置中使用这个录音机,其中我用Behringer XR18作为音频接口,用LattePanda 3 Delta作为SBC。
现在让我们记录一些声音! 🔔
安装
cargo install smrec
安装Windows和ASIO支持
smrec
使用 cpal
作为底层的音频API。 cpal
在Windows上支持WASAPI、DirectSound和ASIO。然而,由于 asio-sys
构建脚本的原因,由于它不是非常直接,因此很难在Windows上构建具有ASIO支持的 cpal
,因此在此存储库中提供了一个预构建脚本。
要在Windows上安装 smrec
,请按以下步骤操作
- 安装最新的Visual Studio(如果您还没有安装的话)
- 从这里安装最新的LLVM(如果您还没有安装的话)
- 以管理员身份打开命令提示符
- 在环境变量中设置LLVM路径(系统范围)
setx /M LIBCLANG_PATH "C:\Program Files\LLVM\bin"
- 以管理员身份打开PowerShell
- 检查环境变量是否设置正确
$env:LIBCLANG_PATH
- 在存储库中源预构建脚本(假设您在存储库的根目录中)
此脚本将下载ASIO SDK,设置Visual Studio环境变量,并为当前shell会话设置. .\pre-build-win.ps1
CPAL_ASIO_DIR
变量。 - 按常规安装
cargo install smrec
如果您了解自己在做什么,可以跳过这些步骤并查阅 cpal
文档。
预构建的二进制文件
由于目前在Windows上构建具有ASIO支持的 cpal
过程复杂,因此此处提供了Windows的预构建二进制文件作为替代方案在这里。
教程
简单地作为一个命令
smrec
使用默认配置运行,默认配置是:
- 默认音频主机
- 默认音频设备
- 默认的输入通道集
- 默认的录制目录,即当前工作目录
- 录制将继续,直到按下
ctrl+c
并中断程序。 - 在当前工作目录中创建一个名为
rec_YYYYMMDD_HHMMSS
的目录,并在该目录中录制音频。 - 音频以
wav
格式录制。 - 音频以音频设备的默认采样率、缓冲区和采样格式录制。
- 为每个通道创建一个单独的文件(单声道),每个文件的名称为
chn_XX.wav
,其中XX
是通道号。
要录制特定时长,请使用 --duration
标志并指定以秒为单位的时长。以下命令录制了 10 秒
smrec --duration 10
通过使用 --host
和 --device
标志,您可以指定要使用的音频主机和设备。以下命令使用 MacBook Pro Microphone
作为音频设备
smrec --device "MacBook Pro Microphone"
列出 MIDI 端口、音频主机和设备
smrec list
在录制中包含或排除通道
默认情况下,录制音频设备的所有通道。您可以使用 --include
和 --exclude
标志指定要包含或排除的通道。这些标志不能同时使用。以下命令仅录制 4 通道音频设备的第一个两个通道
smrec --include 1,2
此命令录制 4 通道音频设备除了第一个通道之外的所有通道
smrec --exclude 1
如示例所示,通道号从 1 开始,可以指定为以逗号分隔的列表。
将录制保存到特定目录
默认情况下,录制在当前工作目录中完成。您可以使用 --directory
标志指定录制目录。以下命令将录制保存到 ~/Music
目录
smrec --out ~/Music
使用配置文件进行配置
smrec
使用命令行参数进行配置,并且它们位于所有内容之前。然而,您可以通过使用配置文件来配置 smrec
的某些方面(可能还有更多),以替代默认配置。配置文件是一个 toml
文件,其名称为 config.toml
。配置文件按以下顺序搜索
.smrec/config.toml
在当前工作目录。.smrec/config.toml
在用户主目录。- 如果以上都没有找到,则使用默认配置。
配置文件可以配置
- 通道名称
[channel_names]
1 = "Kick"
2 = "Snare"
3 = "Hi-Hat"
- 更多内容将陆续推出..
OSC 控制
smrec
通常在启动时立即开始录制。然而,它也有各种控制方法的选择。
运行 smrec --osc
不会立即开始录音,而是会等待接收一个 OSC 消息来开始录音。默认的 OSC 端口由操作系统随机选择,发送和接收的默认地址为 127.0.0.1
和 0.0.0.0
。运行上述命令后,输出可能如下所示
Will be sending OSC messages to 127.0.0.1:61213
Listening for OSC messages on 0.0.0.0:51014
目前 smrec
不支持 IPv6。
在默认配置下
- 在所有地址上随机选择的端口监听 OSC 消息。
- 在随机选择的端口上向本地主机发送 OSC 消息。
要进一步配置 OSC,可以添加到标志的进一步参数
smrec --osc "<listen_address>:<listen_port>;<send_address>:<send_port>"
或
smrec --osc "<listen_address>:<listen_port>"
第二种形式将保持默认的发送地址和端口。
smrec --osc "0.0.0.0:18000;255.255.255.255:18001"
将在端口 18000
上监听所有地址的 OSC 消息,并在端口 18001
上向所有地址发送 OSC 消息。是的,如果操作系统和网络允许,smrec
也可以广播 OSC 消息。
OSC 消息
smrec
监听的消息是
/smrec/start
- 开始录音,发送第二个启动将停止正在进行的录音并开始新的录音,在指定的根目录中创建新的目录。/smrec/stop
- 如果有正在进行的录音,则停止录音。
smrec
发送的消息是
/smrec/start
- 在开始新的录音时发送。/smrec/stop
- 在停止正在进行的录音时发送。/smrec/error <string>
- 当发生某些错误时发送,错误消息作为参数传递的字符串。
MIDI 控制
smrec
还可以通过 MIDI 控制。它甚至可以同时通过 OSC 和 MIDI 控制。尽管 smrec
是一个简单的应用,用于单一目的,但它提供的 MIDI 通信选项非常广泛。
运行,smrec --midi
不会立即开始录音,而是会等待 MIDI CC 消息来开始录音。
以下是默认配置
- 查找所有可用的 MIDI 端口并开始在它们上监听。
- 监听这些端口上的任何通道。
- 对 CC 16 响应以开始录音,对 CC 17 响应以停止录音。
- 与 OSC 一样,发送后续的 CC 16 消息将停止正在进行的录音并开始新的录音,在指定的根目录中创建新的目录。
smrec --midi
与smrec --midi "[*[(*,16,17)]]"
同义,下面将解释。
配置
--midi
标志接受一个字符串参数,该参数被解析为配置字符串,用于配置输入和输出。这些字符串由分号 (;
) 分隔,第一部分配置输入,第二部分配置输出。任何部分都可以省略。
解析
[..]
是一个输入或输出配置的容器。[端口号[..], ..]
是一个用逗号分隔的端口号列表,smrec
将连接到这些端口。[端口号[(..), ..], ..]
每个端口号应包含至少一个通道/MIDI CC过滤器配置。(<通道号>, <开始录制时的CC号>, <停止录制时的CC号>)
这是通道/MIDI CC过滤器配置的结构。(1,2,3)
这里是一个示例,它将监听通道2上的CC 2以开始录制,以及通道2上的CC 3以停止录制。该端口中所有其他消息都将被忽略。MIDI通道从0开始索引![我喜欢的端口[(1,2,3), ..], ..]
这就是如何使用这个元组。[我喜欢的端口[(1,2,3), (15, 127, 126), ..], ..]
因为我们可以有多个这样的元素。[我的第一个端口[(1,2,3), (15, 127, 126), (12,4,5)], 我的第二个端口[(1,2,3)] ]
这是一个有效的配置字符串。它将在我的第一个端口
上监听CC 2通道来开始录制,并在CC 3通道上停止录制;在我的第二个端口
上监听CC 2通道来开始录制,并在CC 3通道上停止录制。这些端口中的其他所有消息都将被忽略。
使用 '*' 和通配符模式
- 配置字符串中的端口名称被视为 通配符模式。
*
匹配任何端口。这意味着最终匹配所有端口。- 所有有效的通配符模式都可以用来匹配端口名称。
- 分解默认配置字符串:
[*[(*,16,17)]]
现在应该很清楚。 - 监听所有端口,不通过通道过滤,对所有CC 16到开始录制和CC 17到停止录制的MIDI CC消息做出反应。
smrec
还可以在某些事件上发送MIDI消息。如果输出端口配置了配置,则配置的CC消息将在启动和停止事件上通过配置的端口和通道发送。
值
MIDI CC值被认为是瞬时的。
一旦通过配置的MIDI CC号接收到值 127
,则立即采取行动。 这就是为什么发送MIDI CC消息的爆发不是好主意的原因。 如果配置为启动录制,则每条消息都会触发一个新的录制。
smrec
在配置了输出时,会在启动和停止事件上向配置的MIDI CC号发送值为 127
的CC消息。
作为一个最后的例子来熟悉它,这个配置字符串将监听我的第一个端口
上的CC 2通道来开始录制,并在CC 3通道上停止录制;在我的第二个端口
上监听CC 2通道来开始录制,并在CC 3通道上停止录制。这些端口中的其他所有消息都将被忽略。在启动和停止事件上,它将在我的第一个端口
上发送通道2的CC 16,值为127,并在我的第二个端口
上发送通道2的CC 17,值为127。
[ my first port[(1,2,3), (15, 127, 126), (12,4,5)], my second port[(1,2,3)] ];[ my first port[(1,2,3), (15, 127, 126), (12,4,5)], my second port[(1,2,3)] ]
下一步
我将确保,
- 安装过程更顺畅
- 帮助文档完整
- 文档完整
- 错误已修复
- 向用户传达更好的信息
- 软件足够无锁且移除不必要的分配
但我没有计划对这个项目进行大量维护,我只是确保它足够可用并且能够生存。
支持
- 桌面
- macOS
x86_64
✅aarch64
✅
- linux
x86_64
(应该可以工作,但尚未检查,将会进行检查)aarch64
(应该可以工作,但尚未检查,将会进行检查)
- windows
x86_64
✅aarch64
✅
- macOS
贡献
- 友好且富有成效
- 遵循开源贡献的常见实践
- Rust 行为准则适用
谢谢 🙏
结语
这是我为了解决一个特定问题而做的,并且我已经公开分享。我希望它也能解决您的问题。
依赖项
~6–35MB
~540K SLoC