您也许已经熟悉图像和视频分割,但音频分割则少有人深入探讨。它指的是在一段音频流中分离并隔离不同声音的能力,例如从背景音乐中提取说话声,或在群组会议中只保留某一个人的声音。直到最近,这些任务还需要专门的、面向特定任务的工具和大量手动处理。
在本教程中,我们将探索 SAM Audio——Segment Anything Model 的音频扩展。我们将搭建本地环境、安装必要依赖、加载模型,并在 RTX 3090 GPU 上进行推理。
同时,我们会可视化展示 SAM Audio 如何以比传统音频处理方法更直观、更“临床级”精确的方式,精准分割音频信号中的特定部分。
什么是 SAM Audio?
SAM Audio 是首款同类的统一多模态模型,旨在让音频分离像与声音本身交互一样直观。受视觉领域 Segment Anything Model 成功的启发,SAM Audio 允许用户通过自然提示,从复杂的音频混合中隔离任意声音,无论是通过文本、视频中的视觉线索,还是标注时间片段。该统一方法用一个在语音、音乐和通用声音上都稳定可靠的系统,取代了零散的、单一用途的音频工具,即使在真实世界的“野外”场景中也能良好工作。
来源: facebookresearch/sam-audio
SAM Audio 的核心是 Perception Encoder Audiovisual(PE-AV),这是一台强大的引擎,通过对音频与视觉信号进行时间上的联合编码,使“所见”与“所闻”对齐。
基于 Meta 开源的 Perception Encoder,PE-AV 提供了丰富且时间精确的表示,使其在多模态音频分离中达成最先进的性能。
SAM Audio 与 PE-AV 携手,为创意媒体、无障碍与音频理解带来新的可能,使专业级音频分割比以往更快速、更易用、也更易于控制。
SAM Audio 教程
下面我将带您一步步在本地使用 SAM Audio。
1. 环境搭建
SAM Audio 是一个 受控访问的模型(gated model) ,这意味着您必须先申请访问权限,才能下载并在本地使用。首先访问 Hugging Face 模型页面 facebook/sam-audio-large 并填写访问申请表。通常约 10 分钟即可获批,但在某些情况下,可能会根据您的所在地或 Meta 的其他政策而被拒绝。
来源: facebook/sam-audio-large · Hugging Face
访问获批后,启动本地 Jupyter Notebook,并直接从官方仓库安装 SAM Audio 库:
!pip install - q git+ https: // github. com/ facebookresearch/ sam- audio. git技术支持
使用 SAM Audio 时常见的问题是 Jupyter 内核崩溃或意外重启。通常是由于不兼容的 torchcodec 版本导致。要修复此问题,请先卸载现有版本,再明确安装推荐版本:
! pip uninstall -y torchcodec
! pip install --no-cache-dir "torchcodec==0.7.0" -f https://download.pytorch.org/whl/torchcodec/技术支持
为加速模型与依赖的下载,我们将使用 hf_transfer:
! pip install hf_transfer技术支持
最后,使用访问令牌登录 Hugging Face Hub。请确保您已在 Hugging Face 账号中生成 API 令牌,并将其存储为环境变量(HF_TOKEN):
import os
from huggingface_hub import login
login( token= os. environ[ "HF_TOKEN" ] ) 技术支持
2. 加载 SAM Audio 模型(CUDA 上的 FP16)
此步骤中,我们将下载并加载 SAM Audio 基础模型 。虽然 SAM Audio 也提供大模型变体,但基础模型在显存占用上轻量许多,分离质量却几乎不逊色。
这使其非常适合本地实验,尤其适用于像 RTX 3090 这样的消费级 GPU。
为避免显存不足(OOM)错误,务必以 FP16(半精度) 而非 FP32 的方式加载模型。
RTX 3090 对 FP16 支持出色,切换到半精度几乎能将显存占用减半,且对推理质量影响不明显。
import torch
import torchaudio
from pathlib import Path
from sam_audio import SAMAudio, SAMAudioProcessor
MODEL_ID = "facebook/sam-audio-base"
device = torch. device( "cuda" if torch. cuda. is_available( ) else "cpu" )
model = SAMAudio. from_pretrained( MODEL_ID) . eval ( )
model = model. to( device= device, dtype= torch. float16) . eval ( )
processor = SAMAudioProcessor. from_pretrained( MODEL_ID)
print ( "Device:" , device)
print ( "Sampling rate:" , processor. audio_sampling_rate) 技术支持
首次运行时,下载可能需要一段时间。SAM Audio 会拉取多个组件与检查点,共同构成完整的音频分割流水线,包括感知编码器与生成式分离模块。这是预期行为,且仅首次发生,文件会在本地缓存以供后续运行使用。
模型加载完成后,建议检查一下 GPU 显存使用情况,确保一切在可控范围内:
! nvidia-smi技术支持
您应该会看到, SAM Audio 基础模型大约占用 14 GB 显存 ,能在 RTX 3090 上轻松容纳。这样便能为推理与实验留出足够余量,不会触发内存问题,使本地音频分割任务的环境更稳定可靠。
3. 从 AudioCaps 加载示例音频
要测试 SAM Audio,我们需要一个包含多个重叠声源的真实音频样本。本教程将使用 AudioCaps 的一个示例,这是一个广泛用于音频理解与描述生成的基准数据集。
AudioCaps 包含从真实环境收集的短而多样的音频片段,非常适合评估音频分离模型。
我们使用 datasets 库直接从 Hugging Face 加载数据集。样本音频以 Parquet 格式存储,包含波形数据及采样率等元数据。
from datasets import load_dataset
from IPython. display import Audio
dset = load_dataset(
"parquet" ,
data_files= "hf://datasets/OpenSound/AudioCaps/data/test-00000-of-00041.parquet" ,
)
samples = dset[ "train" ] [ 8 ] [ "audio" ] . get_all_samples( )
Audio( samples. data, rate= samples. sample_rate) 技术支持
这段代码会下载 AudioCaps 测试集的一个分片,并提取一个音频片段用于演示。Audio 小部件可让您在笔记本中直接收听原始混合音频,有助于在分割前了解原始音频的复杂程度。听起来如下:
4. 可视化音轨
用耳朵聆听是理解音频混合最快的方式,但 可视化波形 可以帮助您看清 事件发生在何处 。
波形图更易于识别高能量时刻(如按喇叭、鼓掌或呼喊)、较安静的区域(停顿或背景噪声),以及常对应短促声音事件的突发尖峰。
一旦开始分离声音,这将尤其有用,因为您可以将 原始混合音频 与 分割产出 进行对比,快速验证 SAM Audio 是否提取到了正确的区域。
下面是一个简单的辅助函数,可在固定时长内绘制波形(以保持可读性)。它支持单声道与立体声,并会自动将张量移至 CPU,便于在笔记本中顺畅运行。
import matplotlib. pyplot as plt
import torch
def plot_waveform ( wav, sr, title= "Waveform" , max_seconds= 15 ) :
"""
wav: Tensor [C, T] or [T]
sr: sample rate (int)
"""
if isinstance ( wav, torch. Tensor) :
w = wav. detach( ) . cpu( )
else :
w = torch. tensor( wav)
if w. ndim == 1 :
w = w. unsqueeze( 0 )
max_samples = int ( sr * max_seconds)
w = w[ : , : max_samples]
t = torch. arange( w. shape[ 1 ] ) / sr
plt. figure( figsize= ( 14 , 3 ) )
for c in range ( w. shape[ 0 ] ) :
plt. plot( t, w[ c] . numpy( ) , label= f"ch { c} " )
plt. title( title)
plt. xlabel( "Time (s)" )
plt. ylabel( "Amplitude" )
if w. shape[ 0 ] > 1 :
plt. legend( )
plt. tight_layout( )
plt. show( )
plot_waveform( samples. data, samples. sample_rate, title= "Traffic noise + Horn" ) 技术支持
在此示例中,您通常会注意到代表持续背景噪声(车流)的 繁忙、密集的波形 ,以及常与短促且更响亮的事件(如喇叭声)相匹配的 更尖锐的峰值 。
5. 为推理准备音频
在运行 SAM Audio 之前,我们需要确保输入波形符合模型预期。实践中,来自数据集的原始音频在 形状 、 数据类型(dtype) 、 声道数 与 采样率 方面可能各不相同。如果跳过这一步,您常会遇到报错(维度不对)、效果变差(采样率不匹配)或浪费 GPU 显存(dtype 不合适)。
我们将标准化以下内容:
形状: SAM Audio 期望的音频格式为 [C, T](通道在前)。
精度:先转换为 float32 以便安全处理,然后再与模型 dtype 匹配(在 CUDA 上为 FP16)。
采样率: 重采样到模型所需的采样率(从处理器获取)。
声道: 转换为 单声道 ,以简化分离并保持推理一致性。
设备与 dtype: 将波形移至 GPU,并与模型权重 dtype 保持一致,以避免隐式类型转换和额外内存开销。
wav = torch. tensor( samples. data)
if wav. ndim == 1 :
wav = wav. unsqueeze( 0 )
elif wav. ndim == 2 and wav. shape[ 0 ] > wav. shape[ 1 ] :
wav = wav. transpose( 0 , 1 )
wav = wav. float ( )
orig_sr = int ( samples. sample_rate)
target_sr = int ( processor. audio_sampling_rate)
if orig_sr != target_sr:
wav = torchaudio. functional. resample( wav, orig_sr, target_sr)
wav = wav. mean( 0 , keepdim= True )
wav = wav. to( device= device, dtype= next ( model. parameters( ) ) . dtype)
duration_s = wav. shape[ - 1 ] / target_sr
print ( f"Resampled duration: { duration_s: .2f } s @ { target_sr} Hz" ) 技术支持
如果一切设置正确,您应会看到如下输出:
Resampled duration: 10 .00s @ 48000 Hz技术支持
这表明:(1)音频时长符合预期;(2)波形已使用模型偏好的采样率。
6. 使用 SAM Audio 进行音频分离
接下来是有趣的部分:我们将实际 从原始混音中分离目标声音 。SAM Audio 支持使用自然提示来完成这一点,在本示例中,我们将从包含车流噪声与喇叭声的片段中提取 “鸣笛声(a horn honking)” 。
我们将同时使用两种引导方式:
文本提示 (description):告诉模型我们想要什么(“A horn honking”)。
时间片锚点 (anchors):告诉模型目标在时间上 出现在哪里 (以秒为单位)。
这会让分离在混乱的音频或目标声音很短时更可靠。
锚点格式中:
+ 表示 将该时间区域作为目标声音的正证据纳入 ;
[6.3, 7.0] 表示以秒为单位的时间窗(开始、结束)。
description = "A horn honking"
anchors = [ [ [ "+" , 6.3 , 7.0 ] ] ]
assert 0 <= anchors[ 0 ] [ 0 ] [ 1 ] < anchors[ 0 ] [ 0 ] [ 2 ] <= duration_s + 1e-6 , "Anchor out of range!"
inputs = processor(
audios= [ wav] ,
descriptions= [ description] ,
anchors= anchors,
) . to( device)
with torch. inference_mode( ) :
result = model. separate( inputs)
target_np = result. target[ 0 ] . detach( ) . float ( ) . cpu( ) . numpy( )
resid_np = result. residual[ 0 ] . detach( ) . float ( ) . cpu( ) . numpy( )
Audio( target_np, rate= processor. audio_sampling_rate) 技术支持
如果一切正常,输出会非常令人惊艳:目标音频应听起来像一段干净的喇叭声轨,大部分背景已被移除。这正是 SAM Audio 的关键理念:无需完美的分轨或手动编辑,您只需用直观的提示引导模型,它就能为您隔离所需声音。下面是听感示例:
用耳朵聆听是最佳证据,但通过波形图也能直观看到发生了什么。
plot_waveform( target_np, processor. audio_sampling_rate, title= "Cleand Audio with only Horn" ) 技术支持
在已分离的输出中,您通常会看到喇叭出现的位置有清晰的尖峰,而其余波形则相对安静。
SAM Audio 还会返回残差信号,即移除目标后“剩下的音频”。
plot_waveform( resid_np, processor. audio_sampling_rate, title= "Residual Audio with no Horn" ) 技术支持
这里我们只能看到车流/背景噪声,不再有喇叭声。
7. 从数据集中再加载一个样本
我们来试一个更难、更接近真实世界的示例。这次我们选择一段非英语使用者在嘈杂背景中通话的音频(街噪、环境声、重叠声音)。
这正是音频分离真正发挥作用的情境:语音存在,但由于混音凌乱而难以听清。
首先,加载一个新样本并收听原始混合音频:
samples_2 = dset[ "train" ] [ 45 ] [ "audio" ] . get_all_samples( )
Audio( samples_2. data, rate= samples_2. sample_rate) 技术支持
接着,可视化该波形。
plot_waveform( samples_2. data, samples_2. sample_rate, title= "Background Noise and a Man Talking" ) 技术支持
您会在大部分片段中看到密集且高能量的信号,这通常意味着强烈的背景噪声与重叠音频:
我们将与之前相同地进行预处理:确保形状为 [C, T],重采样到处理器目标采样率,转为单声道,并以 FP16 迁移到 GPU。
wav = torch. tensor( samples_2. data)
if wav. ndim == 1 :
wav = wav. unsqueeze( 0 )
elif wav. ndim == 2 and wav. shape[ 0 ] > wav. shape[ 1 ] :
wav = wav. transpose( 0 , 1 )
wav = wav. float ( )
orig_sr = int ( samples. sample_rate)
target_sr = int ( processor. audio_sampling_rate)
if orig_sr != target_sr:
wav = torchaudio. functional. resample( wav, orig_sr, target_sr)
wav = wav. mean( 0 , keepdim= True )
wav = wav. to( device= device, dtype= next ( model. parameters( ) ) . dtype)
duration_s = wav. shape[ - 1 ] / target_sr
print ( f"Duration: { duration_s: .2f } s @ { target_sr} Hz" )
技术支持
您应会看到类似如下的输出:
Duration: 10 .00s @ 48000 Hz技术支持
在上一个示例中,我们通过时间片锚点与文本提示帮助了模型。这里我们仅使用文本提示,这是测试模型在缺少额外引导时泛化能力的好方法。
description = "A man speaking"
inputs = processor(
audios= [ wav] ,
descriptions= [ description] ,
) . to( device)
with torch. inference_mode( ) :
result = model. separate( inputs)
target_np = result. target[ 0 ] . detach( ) . float ( ) . cpu( ) . numpy( )
plot_waveform( target_np, processor. audio_sampling_rate, title= "Clean Audio with a Man Talking" ) 技术支持
最后,绘制已分离语音的波形。与原始混合相比,波形应更干净、不那么“繁忙”,尤其是在早先被背景噪声主导的区域:
如果在执行上述代码时遇到任何问题,请参考下方链接的 DataLab 笔记本,内含完整可运行的参考与更多指导:Using SAM-Audio Locally — DataLab 。
SAM Audio 的应用场景
SAM Audio 面向真实世界的音频理解与编辑。它不依赖任务特定工具,而是通过自然提示,在语音、音乐与日常环境中分离并隔离声音。
这些特性使其在需要干净、可控音频的创意、专业与研究工作流程中都颇具价值。
播客与语音录音清理 :将说话人与背景噪声和环境声分离,提升播客、采访与语音录音的语音清晰度。
音乐制作与 Stem 提取 :从混音曲目中分离人声或单个乐器,用于混音、采样、母带处理或创意声音设计。
影视与视频后期制作 :移除诸如车流、风声或人群等不需要的背景声,同时保留对白与重要音效。
无障碍与助听增强 :在嘈杂环境中增强语音,有助于助听工具与以无障碍和清晰沟通为目标的应用。
音频研究与声音分析 :对复杂的真实世界录音进行分割,用于声学事件检测、音频取证与声景分析等研究任务。
结语
老实说,关于如何在本地实际运行 SAM Audio 的资料并不多。我尝试过在 Kaggle 的 T4 GPU 上运行,但失败了;也尝试过用 UV 和虚拟 Python 环境搭建,同样失败。
我反复遇到的主要问题是依赖冲突。直接从 GitHub 仓库安装 SAM Audio 往往会覆盖现有的音频与 PyTorch 库,从而导致 Jupyter 内核崩溃。
因此我强烈建议从干净环境开始(使用 Conda 或全新的 Python 虚拟环境),先安装 PyTorch 与 CUDA,再添加所需库。在本教程中,一旦通过重新安装正确版本的 torchcodec 解决了崩溃问题,环境就稳定了。
在本教程中,我们成功在 RTX 3090 上运行了 SAM Audio 基础模型,显存占用约 14 GB,对于本地推理来说非常合理。推理速度很快,音频分离质量也相当出色。您还可以将此设置扩展到基于视频的提示,让 SAM Audio 与 SAM 3 协同,根据视觉线索来隔离音频。
想进一步了解 SAM 3,建议查看我们的 SAM 3 教程 。
您也许已经熟悉图像和视频分割,但音频分割则少有人深入探讨。它指的是在一段音频流中分离并隔离不同声音的能力,例如从背景音乐中提取说话声,或在群组会议中只保留某一个人的声音。直到最近,这些任务还需要专门的、面向特定任务的工具和大量手动处理。
在本教程中,我们将探索 SAM Audio——Segment Anything Model 的音频扩展。我们将搭建本地环境、安装必要依赖、加载模型,并在 RTX 3090 GPU 上进行推理。
同时,我们会可视化展示 SAM Audio 如何以比传统音频处理方法更直观、更“临床级”精确的方式,精准分割音频信号中的特定部分。
什么是 SAM Audio?
SAM Audio 是首款同类的统一多模态模型,旨在让音频分离像与声音本身交互一样直观。受视觉领域Segment Anything Model成功的启发,SAM Audio 允许用户通过自然提示,从复杂的音频混合中隔离任意声音,无论是通过文本、视频中的视觉线索,还是标注时间片段。该统一方法用一个在语音、音乐和通用声音上都稳定可靠的系统,取代了零散的、单一用途的音频工具,即使在真实世界的“野外”场景中也能良好工作。
来源:facebookresearch/sam-audio
SAM Audio 的核心是 Perception Encoder Audiovisual(PE-AV),这是一台强大的引擎,通过对音频与视觉信号进行时间上的联合编码,使“所见”与“所闻”对齐。
基于 Meta 开源的 Perception Encoder,PE-AV 提供了丰富且时间精确的表示,使其在多模态音频分离中达成最先进的性能。
SAM Audio 与 PE-AV 携手,为创意媒体、无障碍与音频理解带来新的可能,使专业级音频分割比以往更快速、更易用、也更易于控制。
SAM Audio 教程
下面我将带您一步步在本地使用 SAM Audio。
1. 环境搭建
SAM Audio 是一个受控访问的模型(gated model),这意味着您必须先申请访问权限,才能下载并在本地使用。首先访问 Hugging Face 模型页面facebook/sam-audio-large并填写访问申请表。通常约 10 分钟即可获批,但在某些情况下,可能会根据您的所在地或 Meta 的其他政策而被拒绝。
来源:facebook/sam-audio-large · Hugging Face
访问获批后,启动本地 Jupyter Notebook,并直接从官方仓库安装 SAM Audio 库:
使用 SAM Audio 时常见的问题是 Jupyter 内核崩溃或意外重启。通常是由于不兼容的
torchcodec版本导致。要修复此问题,请先卸载现有版本,再明确安装推荐版本:为加速模型与依赖的下载,我们将使用
hf_transfer:最后,使用访问令牌登录 Hugging Face Hub。请确保您已在 Hugging Face 账号中生成 API 令牌,并将其存储为环境变量(
HF_TOKEN):2. 加载 SAM Audio 模型(CUDA 上的 FP16)
此步骤中,我们将下载并加载SAM Audio 基础模型。虽然 SAM Audio 也提供大模型变体,但基础模型在显存占用上轻量许多,分离质量却几乎不逊色。
这使其非常适合本地实验,尤其适用于像 RTX 3090 这样的消费级 GPU。
为避免显存不足(OOM)错误,务必以FP16(半精度)而非 FP32 的方式加载模型。
RTX 3090 对 FP16 支持出色,切换到半精度几乎能将显存占用减半,且对推理质量影响不明显。
首次运行时,下载可能需要一段时间。SAM Audio 会拉取多个组件与检查点,共同构成完整的音频分割流水线,包括感知编码器与生成式分离模块。这是预期行为,且仅首次发生,文件会在本地缓存以供后续运行使用。
模型加载完成后,建议检查一下 GPU 显存使用情况,确保一切在可控范围内:
您应该会看到,SAM Audio 基础模型大约占用 14 GB 显存,能在 RTX 3090 上轻松容纳。这样便能为推理与实验留出足够余量,不会触发内存问题,使本地音频分割任务的环境更稳定可靠。
3. 从 AudioCaps 加载示例音频
要测试 SAM Audio,我们需要一个包含多个重叠声源的真实音频样本。本教程将使用AudioCaps 的一个示例,这是一个广泛用于音频理解与描述生成的基准数据集。
AudioCaps 包含从真实环境收集的短而多样的音频片段,非常适合评估音频分离模型。
我们使用
datasets库直接从 Hugging Face 加载数据集。样本音频以 Parquet 格式存储,包含波形数据及采样率等元数据。这段代码会下载 AudioCaps 测试集的一个分片,并提取一个音频片段用于演示。
Audio小部件可让您在笔记本中直接收听原始混合音频,有助于在分割前了解原始音频的复杂程度。听起来如下:4. 可视化音轨
用耳朵聆听是理解音频混合最快的方式,但可视化波形可以帮助您看清事件发生在何处。
波形图更易于识别高能量时刻(如按喇叭、鼓掌或呼喊)、较安静的区域(停顿或背景噪声),以及常对应短促声音事件的突发尖峰。
一旦开始分离声音,这将尤其有用,因为您可以将原始混合音频与分割产出进行对比,快速验证 SAM Audio 是否提取到了正确的区域。
下面是一个简单的辅助函数,可在固定时长内绘制波形(以保持可读性)。它支持单声道与立体声,并会自动将张量移至 CPU,便于在笔记本中顺畅运行。
在此示例中,您通常会注意到代表持续背景噪声(车流)的繁忙、密集的波形,以及常与短促且更响亮的事件(如喇叭声)相匹配的更尖锐的峰值。
5. 为推理准备音频
在运行 SAM Audio 之前,我们需要确保输入波形符合模型预期。实践中,来自数据集的原始音频在形状、数据类型(dtype)、声道数与采样率方面可能各不相同。如果跳过这一步,您常会遇到报错(维度不对)、效果变差(采样率不匹配)或浪费 GPU 显存(dtype 不合适)。
我们将标准化以下内容:
C,T](通道在前)。float32以便安全处理,然后再与模型 dtype 匹配(在 CUDA 上为 FP16)。如果一切设置正确,您应会看到如下输出:
这表明:(1)音频时长符合预期;(2)波形已使用模型偏好的采样率。
6. 使用 SAM Audio 进行音频分离
接下来是有趣的部分:我们将实际从原始混音中分离目标声音。SAM Audio 支持使用自然提示来完成这一点,在本示例中,我们将从包含车流噪声与喇叭声的片段中提取“鸣笛声(a horn honking)”。
我们将同时使用两种引导方式:
description):告诉模型我们想要什么(“A horn honking”)。anchors):告诉模型目标在时间上出现在哪里(以秒为单位)。这会让分离在混乱的音频或目标声音很短时更可靠。
锚点格式中:
6.3,7.0] 表示以秒为单位的时间窗(开始、结束)。如果一切正常,输出会非常令人惊艳:目标音频应听起来像一段干净的喇叭声轨,大部分背景已被移除。这正是 SAM Audio 的关键理念:无需完美的分轨或手动编辑,您只需用直观的提示引导模型,它就能为您隔离所需声音。下面是听感示例:
用耳朵聆听是最佳证据,但通过波形图也能直观看到发生了什么。
在已分离的输出中,您通常会看到喇叭出现的位置有清晰的尖峰,而其余波形则相对安静。
SAM Audio 还会返回残差信号,即移除目标后“剩下的音频”。
这里我们只能看到车流/背景噪声,不再有喇叭声。
7. 从数据集中再加载一个样本
我们来试一个更难、更接近真实世界的示例。这次我们选择一段非英语使用者在嘈杂背景中通话的音频(街噪、环境声、重叠声音)。
这正是音频分离真正发挥作用的情境:语音存在,但由于混音凌乱而难以听清。
首先,加载一个新样本并收听原始混合音频:
接着,可视化该波形。
您会在大部分片段中看到密集且高能量的信号,这通常意味着强烈的背景噪声与重叠音频:
我们将与之前相同地进行预处理:确保形状为 [
C, T],重采样到处理器目标采样率,转为单声道,并以 FP16 迁移到 GPU。您应会看到类似如下的输出:
在上一个示例中,我们通过时间片锚点与文本提示帮助了模型。这里我们仅使用文本提示,这是测试模型在缺少额外引导时泛化能力的好方法。
最后,绘制已分离语音的波形。与原始混合相比,波形应更干净、不那么“繁忙”,尤其是在早先被背景噪声主导的区域:
如果在执行上述代码时遇到任何问题,请参考下方链接的 DataLab 笔记本,内含完整可运行的参考与更多指导:Using SAM-Audio Locally — DataLab。
SAM Audio 的应用场景
SAM Audio 面向真实世界的音频理解与编辑。它不依赖任务特定工具,而是通过自然提示,在语音、音乐与日常环境中分离并隔离声音。
这些特性使其在需要干净、可控音频的创意、专业与研究工作流程中都颇具价值。
结语
老实说,关于如何在本地实际运行 SAM Audio 的资料并不多。我尝试过在 Kaggle 的 T4 GPU 上运行,但失败了;也尝试过用 UV 和虚拟 Python 环境搭建,同样失败。
我反复遇到的主要问题是依赖冲突。直接从 GitHub 仓库安装 SAM Audio 往往会覆盖现有的音频与 PyTorch 库,从而导致 Jupyter 内核崩溃。
因此我强烈建议从干净环境开始(使用 Conda 或全新的 Python 虚拟环境),先安装 PyTorch 与 CUDA,再添加所需库。在本教程中,一旦通过重新安装正确版本的
torchcodec解决了崩溃问题,环境就稳定了。在本教程中,我们成功在 RTX 3090 上运行了 SAM Audio 基础模型,显存占用约 14 GB,对于本地推理来说非常合理。推理速度很快,音频分离质量也相当出色。您还可以将此设置扩展到基于视频的提示,让 SAM Audio 与 SAM 3 协同,根据视觉线索来隔离音频。
想进一步了解 SAM 3,建议查看我们的SAM 3 教程。