You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Audacity mod-script-pipeline用Python获取轨道名称?

解决Audacity mod-script-pipeline获取轨道名称为空的问题

问题原因

GetInfo: Type="Tracks"命令默认不会返回轨道名称字段,必须明确指定要获取的信息项,或者针对单个轨道进行精准查询。

修正方案

以下两种方式可正确获取轨道名称,结合你遍历轨道片段的需求,推荐第二种方式:

方式1:一次性获取所有轨道名称

修改GetInfo命令,添加Info="Name"参数,让Audacity直接返回所有轨道的名称信息:

import sys

def send_audacity_cmd(cmd):
    # 与mod-script-pipeline通信的核心逻辑(假设你已实现基础通信)
    sys.stdout.write(f"{cmd}\n")
    sys.stdout.flush()
    return sys.stdin.readline().strip()

# 获取所有轨道名称
raw_response = send_audacity_cmd('GetInfo: Type="Tracks" Info="Name"')
track_names = []
for line in raw_response.split('\n'):
    if 'Name="' in line:
        # 从响应字符串中提取名称
        name = line.split('Name="')[1].split('"')[0]
        track_names.append(name)

print("所有轨道名称:", track_names)

方式2:按轨道索引逐个查询(适配片段遍历场景)

先获取轨道总数,再逐个查询每个轨道的名称,同时结合你原有片段遍历逻辑:

import sys

def send_audacity_cmd(cmd):
    sys.stdout.write(f"{cmd}\n")
    sys.stdout.flush()
    return sys.stdin.readline().strip()

# 获取轨道总数
track_count = int(send_audacity_cmd('GetInfo: Type="Tracks" Info="Count"').split('=')[1])

# 遍历每个轨道,获取名称和片段信息
for track_idx in range(1, track_count + 1):
    # 获取当前轨道名称
    name_response = send_audacity_cmd(f'GetInfo: Type="Track" Track={track_idx} Info="Name"')
    track_name = name_response.split('Name="')[1].split('"')[0]
    
    # 这里插入你原有获取该轨道所有片段的逻辑
    clips_response = send_audacity_cmd(f'GetInfo: Type="Track" Track={track_idx} Info="Clips"')
    
    print(f"轨道名称: {track_name}")
    print(f"该轨道片段信息: {clips_response}\n")

注意事项

  • Audacity轨道索引从1开始,不是0
  • 命令参数的引号、空格必须严格匹配要求,格式错误会导致返回异常
  • 部分Audacity版本可能返回XML格式的响应,此时需要用XML解析库(如xml.etree.ElementTree)处理结果

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:51:01