在我的 RobotFramework 项目中,我正在录制音频输入(麦克风)并创建一个用于音频处理的 wav 文件。当我运行 .py 文件时,会录制音频并可以接收 wav 文件。 当执行机器人文件时,测试通过,但我的目录中没有 wav 文件。
这是我的代码:
# Start Audio Recording - Robotframework
def StartAudioRecording():
Thread(target=Start).start()
# Start Audio Recording - Function
def Start():
global q
global file
global stop_flag
global filename
stop_flag = False
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument(
'-l', '--list-devices', action='store_true',
help='show list of audio devices and exit')
args, remaining = parser.parse_known_args()
if args.list_devices:
print(sd.query_devices())
parser.exit(0)
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter,
parents=[parser])
parser.add_argument(
'filename', nargs='?', metavar='FILENAME',
help='audio file to store recording to')
parser.add_argument(
'-d', '--device', type=int_or_str,
help='input device (numeric ID or substring)')
parser.add_argument(
'-r', '--samplerate', type=int, help='sampling rate')
parser.add_argument(
'-c', '--channels', type=int, default=1, help='number of input channels')
parser.add_argument(
'-t', '--subtype', type=str, help='sound file subtype (e.g. "PCM_24")')
args = parser.parse_args(remaining)
q = queue.Queue()
if args.samplerate is None:
device_info = sd.query_devices(args.device, 'input')
# soundfile expects an int, sounddevice provides a float:
args.samplerate = int(device_info['default_samplerate'])
if args.filename is None:
#args.filename = tempfile.mktemp(prefix='output_',suffix='.wav', dir='')
args.filename = 'recording.wav'
# Make sure the file is opened before recording anything:
with sf.SoundFile(args.filename, mode='x', samplerate=args.samplerate,
channels=args.channels, subtype=args.subtype) as file:
with sd.InputStream(samplerate=args.samplerate, device=args.device,
channels=args.channels, callback=callback):
print('Recording')
while not stop_flag:
file.write(q.get())
# Stop Audio Recording - Robotframework
def Stop_Audio_Recording():
Thread(target=Stop).start()
# Stop Audio Recording - Function
def Stop():
global stop_flag
stop_flag = True
print('Recording stopped.')
# StartAudioRecording_2
#write("recording.wav", freq, recording)
if __name__ == '__main__':
StartAudioRecording()
time.sleep(10)
Stop_Audio_Recording()
在我的代码示例中,我得到一个音频持续时间约为 10 秒的 wav 文件。 我不确定出了什么问题,也许有人有想法:) 感谢您的帮助!
你如何称呼你的图书馆?请展示一个基本示例。
我的猜测是您期望 Robot Framework 在“main”调用中运行脚本。这不会发生。您需要修改代码来运行这些函数,无论是在库导入时,还是通过调用 keywords。
例如,您可以:
*** Test Cases ***
Record Audio
Start Audio Recording
Sleep 10 seconds
Stop Audio Recording
注意:由于使用了全局变量,我不确定您的代码是否会直接改编为库。请参阅 https://robotframework.org 用户指南,了解库部分。