如何通过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
相关产品推荐
相关产品推荐

