class AudioCommon:
@staticmethod
def play_and_rec(infile,usrdefine=None):
"""
:param infile:
:param outfile:
:param devicetuple:
:return:
"""
# AudioCommon.send_serialPort_cmd(0)
if usrdefine is None:
now = time.time()
timeArray = time.localtime(now)
userdefineDate = time.strftime("%Y-%m-%d",timeArray)
userdefineHour = 'hour_'+time.strftime("%H", timeArray)
userdefineTime = time.strftime("%Y-%m-%d-%H-%M-%S", timeArray)
targetPath = 'resultFiles/' + userdefineDate +'/' + userdefineHour
if not os.path.exists(targetPath):
os.makedirs(targetPath)
outfile = targetPath + '/res_' + userdefineTime + '.wav'
else:
outfile = usrdefine
sd.default.device = (AudioCommon.get_device_id(config.INPUT,config.MME),AudioCommon.get_device_id(config.OUTPUT,config.MME))
datacur,framerate,nchannels = get_data_array(infile)
dataout = sd.playrec(data=datacur,samplerate=framerate,channels=1,blocking=True,dtype=np.int16)
make_out_file(outfile,dataout.astype(np.int16),framerate,1)
# AudioCommon.send_serialPort_cmd(1)
return outfile
这段代码定义了一个名为AudioCommon的类,其中包含了一个名为play_and_rec的静态方法。下面是逐行的中文解释:
if usrdefine is None::如果用户未指定输出文件名,则执行以下操作:
else::如果用户指定了输出文件名,则使用用户指定的值作为输出文件名sd.default.device = (AudioCommon.get_device_id(config.INPUT,config.MME),AudioCommon.get_device_id(config.OUTPUT,config.MME)):设置音频设备datacur,framerate,nchannels = get_data_array(infile):从输入文件中获取音频数据、帧率和声道数dataout = sd.playrec(data=datacur,samplerate=framerate,channels=1,blocking=True,dtype=np.int16):使用sd.playrec函数播放并录制音频数据make_out_file(outfile,dataout.astype(np.int16),framerate,1):将录制的音频数据保存到输出文件中return outfile:返回输出文件名