Robotframework:创建的 .wav 文件缺少 python 声音设备

问题描述 投票:0回答:1

在我的 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 文件。 我不确定出了什么问题,也许有人有想法:) 感谢您的帮助!

python multithreading robotframework wav recording
1个回答
0
投票

你如何称呼你的图书馆?请展示一个基本示例。

我的猜测是您期望 Robot Framework 在“main”调用中运行脚本。这不会发生。您需要修改代码来运行这些函数,无论是在库导入时,还是通过调用 keywords

例如,您可以:

*** Test Cases ***
Record Audio
    Start Audio Recording
    Sleep    10 seconds
    Stop Audio Recording

注意:由于使用了全局变量,我不确定您的代码是否会直接改编为库。请参阅 https://robotframework.org 用户指南,了解库部分。

© www.soinside.com 2019 - 2024. All rights reserved.