本文整理汇总了Python中audio.Audio_Input_Dict.keys方法的典型用法代码示例。如果您正苦于以下问题:Python Audio_Input_Dict.keys方法的具体用法?Python Audio_Input_Dict.keys怎么用?Python Audio_Input_Dict.keys使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类audio.Audio_Input_Dict
的用法示例。
在下文中一共展示了Audio_Input_Dict.keys方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: Recorder
# 需要导入模块: from audio import Audio_Input_Dict [as 别名]
# 或者: from audio.Audio_Input_Dict import keys [as 别名]
class Recorder(Plugin):
"""Capture Recorder"""
def __init__(self,g_pool,session_name = get_auto_name(),rec_dir=None, user_info={'name':'','additional_field':'change_me'},info_menu_conf={},show_info_menu=False, record_eye = False, audio_src = 'No Audio',raw_jpeg=False):
super(Recorder, self).__init__(g_pool)
#update name if it was autogenerated.
if session_name.startswith('20') and len(session_name)==10:
session_name = get_auto_name()
base_dir = self.g_pool.user_dir.rsplit(os.path.sep,1)[0]
default_rec_dir = os.path.join(base_dir,'recordings')
if rec_dir and rec_dir != default_rec_dir and self.verify_path(rec_dir):
self.rec_dir = rec_dir
else:
try:
os.makedirs(default_rec_dir)
except OSError as e:
if e.errno != errno.EEXIST:
logger.error("Could not create Rec dir")
raise e
else:
logger.info('Created standard Rec dir at "%s"'%default_rec_dir)
self.rec_dir = default_rec_dir
self.raw_jpeg = raw_jpeg
self.order = .9
self.record_eye = record_eye
self.session_name = session_name
self.audio_devices_dict = Audio_Input_Dict()
if audio_src in self.audio_devices_dict.keys():
self.audio_src = audio_src
else:
self.audio_src = 'No Audio'
self.running = False
self.menu = None
self.button = None
self.user_info = user_info
self.show_info_menu = show_info_menu
self.info_menu = None
self.info_menu_conf = info_menu_conf
def get_init_dict(self):
d = {}
d['record_eye'] = self.record_eye
d['audio_src'] = self.audio_src
d['session_name'] = self.session_name
d['user_info'] = self.user_info
d['info_menu_conf'] = self.info_menu_conf
d['show_info_menu'] = self.show_info_menu
d['rec_dir'] = self.rec_dir
d['raw_jpeg'] = self.raw_jpeg
return d
def init_gui(self):
self.menu = ui.Growing_Menu('Recorder')
self.g_pool.sidebar.insert(3,self.menu)
self.menu.append(ui.Info_Text('Pupil recordings are saved like this: "path_to_recordings/recording_session_name/nnn" where "nnn" is an increasing number to avoid overwrites. You can use "/" in your session name to create subdirectories.'))
self.menu.append(ui.Info_Text('Recordings are saved to "~/pupil_recordings". You can change the path here but note that invalid input will be ignored.'))
self.menu.append(ui.Text_Input('rec_dir',self,setter=self.set_rec_dir,label='Path to recordings'))
self.menu.append(ui.Text_Input('session_name',self,setter=self.set_session_name,label='Recording session name'))
self.menu.append(ui.Switch('show_info_menu',self,on_val=True,off_val=False,label='Request additional user info'))
self.menu.append(ui.Selector('raw_jpeg',self,selection = [True,False], labels=["bigger file, less CPU", "smaller file, more CPU"],label='compression'))
self.menu.append(ui.Info_Text('Recording the raw eye video is optional. We use it for debugging.'))
self.menu.append(ui.Switch('record_eye',self,on_val=True,off_val=False,label='Record eye'))
self.menu.append(ui.Selector('audio_src',self, selection=self.audio_devices_dict.keys()))
self.button = ui.Thumb('running',self,setter=self.toggle,label='Record',hotkey='r')
self.button.on_color[:] = (1,.0,.0,.8)
self.g_pool.quickbar.insert(1,self.button)
def deinit_gui(self):
if self.menu:
self.g_pool.sidebar.remove(self.menu)
self.menu = None
if self.button:
self.g_pool.quickbar.remove(self.button)
self.button = None
def toggle(self, _=None):
if self.running:
self.stop()
else:
self.start()
def on_notify(self,notification):
if notification['subject'] == 'rec_should_start':
if self.running:
logger.warning('Recording is already running!')
else:
self.set_session_name(notification["session_name"])
self.start(network_propagate=notification.get('network_propagate',True))
elif notification['subject'] == 'rec_should_stop':
if self.running:
self.stop(network_propagate=notification.get('network_propagate',True))
#.........这里部分代码省略.........
示例2: Audio_Capture
# 需要导入模块: from audio import Audio_Input_Dict [as 别名]
# 或者: from audio.Audio_Input_Dict import keys [as 别名]
class Audio_Capture(Plugin):
"""docstring for Audio_Capture"""
def __init__(self, g_pool, audio_src='No Audio'):
super().__init__(g_pool)
self.audio_devices_dict = Audio_Input_Dict()
if audio_src in list(self.audio_devices_dict.keys()):
self.audio_src = audio_src
else:
self.audio_src = 'No Audio'
self.thread = None
self.running = Event()
self.recording = Event()
self.recording.clear()
self.audio_container = None
self.audio_out_stream = None
self.queue = queue.Queue()
self.start_capture(self.audio_src)
def init_gui(self):
self.menu = ui.Growing_Menu('Audio Capture')
self.menu.collapsed = True
self.g_pool.sidebar.append(self.menu)
def close():
self.alive = False
help_str = 'Creates events for audio input.'
self.menu.append(ui.Button('Close', close))
self.menu.append(ui.Info_Text(help_str))
def audio_dev_getter():
# fetch list of currently available
self.audio_devices_dict = Audio_Input_Dict()
devices = list(self.audio_devices_dict.keys())
return devices, devices
self.menu.append(ui.Selector('audio_src', self,
selection_getter=audio_dev_getter,
label='Audio Source',
setter=self.start_capture))
self.menu.append(ui.Info_Text(NOT_REC_STR))
def get_init_dict(self):
return {'audio_src': self.audio_src}
def deinit_gui(self):
if self.menu:
self.g_pool.sidebar.remove(self.menu)
self.menu = None
def cleanup(self):
if self.audio_container is not None:
self.close_audio_recording()
self.running.clear()
self.deinit_gui()
if self.thread and self.thread.is_alive():
self.thread.join(timeout=1)
def on_notify(self, notification):
if notification['subject'] == 'recording.started':
self.rec_dir = notification['rec_path']
self.recording.set()
if self.running.is_set(): # and self.audio_container is None:
self.menu[-2].read_only = True
del self.menu[-1]
self.menu.append(ui.Info_Text(REC_STR))
elif not self.running.is_set():
logger.warning('Recording was started without an active audio capture')
elif notification['subject'] == 'recording.stopped':
self.recording.clear()
self.close_audio_recording()
def close_audio_recording(self):
self.menu[-2].read_only = False
del self.menu[-1]
self.menu.append(ui.Info_Text(NOT_REC_STR))
def write_audio_packet(self, audio_frame):
# Test if audio outstream has been initialized
if self.audio_out_stream is None:
try:
self.audio_out_stream = self.audio_container.add_stream('aac')
except ValueError as e:
# packet.stream codec is not supported in target container.
logger.error('Failed to create audio stream. Aborting recording.')
logger.debug('Reason: {}'.format(e))
self.close_audio_recording()
self.timestamps.append(audio_frame.timestamp)
packet = self.audio_out_stream.encode(audio_frame)
if packet is not None:
self.audio_container.mux(packet)
def start_capture(self, audio_src):
if self.thread and self.thread.is_alive():
if self.audio_src == audio_src:
return # capture is already running for our selected source
# else stop current capture gracefully
#.........这里部分代码省略.........
示例3: Recorder
# 需要导入模块: from audio import Audio_Input_Dict [as 别名]
# 或者: from audio.Audio_Input_Dict import keys [as 别名]
class Recorder(Plugin):
"""Capture Recorder"""
def __init__(self,g_pool,session_name = get_auto_name(),rec_dir=None, user_info={},info_menu_conf={},show_info_menu=False, record_eye = True, audio_src = 'No Audio',raw_jpeg=True):
super(Recorder, self).__init__(g_pool)
#update name if it was autogenerated.
if session_name.startswith('20') and len(session_name)==10:
session_name = get_auto_name()
base_dir = self.g_pool.user_dir.rsplit(os.path.sep,1)[0]
default_rec_dir = os.path.join(base_dir,'recordings')
if rec_dir and rec_dir != default_rec_dir and self.verify_path(rec_dir):
self.rec_dir = rec_dir
else:
try:
os.makedirs(default_rec_dir)
except OSError as e:
if e.errno != errno.EEXIST:
logger.error("Could not create Rec dir")
raise e
else:
logger.info('Created standard Rec dir at "%s"'%default_rec_dir)
self.rec_dir = default_rec_dir
self.raw_jpeg = raw_jpeg
self.order = .9
self.record_eye = record_eye
self.session_name = session_name
self.audio_devices_dict = Audio_Input_Dict()
if audio_src in self.audio_devices_dict.keys():
self.audio_src = audio_src
else:
self.audio_src = 'No Audio'
self.running = False
self.menu = None
self.button = None
self.user_info = user_info
self.show_info_menu = show_info_menu
self.info_menu = None
self.info_menu_conf = info_menu_conf
self.calibration_start_at = None
self.calibration_end_at = None
def get_init_dict(self):
d = {}
d['record_eye'] = self.record_eye
d['audio_src'] = self.audio_src
d['session_name'] = self.session_name
d['user_info'] = self.user_info
d['info_menu_conf'] = self.info_menu_conf
d['show_info_menu'] = self.show_info_menu
d['rec_dir'] = self.rec_dir
d['raw_jpeg'] = self.raw_jpeg
return d
def init_gui(self):
self.menu = ui.Growing_Menu('Recorder')
self.g_pool.sidebar.insert(3,self.menu)
self.menu.append(ui.Info_Text('Pupil recordings are saved like this: "path_to_recordings/recording_session_name/nnn" where "nnn" is an increasing number to avoid overwrites. You can use "/" in your session name to create subdirectories.'))
self.menu.append(ui.Info_Text('Recordings are saved to "~/pupil_recordings". You can change the path here but note that invalid input will be ignored.'))
self.menu.append(ui.Text_Input('rec_dir',self,setter=self.set_rec_dir,label='Path to recordings'))
self.menu.append(ui.Text_Input('session_name',self,setter=self.set_session_name,label='Recording session name'))
self.menu.append(ui.Switch('show_info_menu',self,on_val=True,off_val=False,label='Request additional user info'))
self.menu.append(ui.Selector('raw_jpeg',self,selection = [True,False], labels=["bigger file, less CPU", "smaller file, more CPU"],label='Compression'))
self.menu.append(ui.Info_Text('Recording the raw eye video is optional. We use it for debugging.'))
self.menu.append(ui.Switch('record_eye',self,on_val=True,off_val=False,label='Record eye'))
self.menu.append(ui.Selector('audio_src',self, selection=self.audio_devices_dict.keys(),label='Audio Source'))
# record on enter click from the remote shutter
self.button = ui.Thumb('running',self,setter=self.toggle,label='Record',hotkey=GLFW_KEY_ENTER)
self.button.on_color[:] = (1,.0,.0,.8)
self.g_pool.quickbar.insert(1,self.button)
def deinit_gui(self):
if self.menu:
self.g_pool.sidebar.remove(self.menu)
self.menu = None
if self.button:
self.g_pool.quickbar.remove(self.button)
self.button = None
def toggle(self, _=None):
if self.running:
if self.calibration_start_at and not self.calibration_end_at: # Mark the end of claibration
self.calibration_end_at = self.timestamps[-1]
else:
self.notify_all( {'subject':'should_stop_recording','network_propagate':True} )
else:
self.notify_all( {'subject':'should_start_recording','session_name':self.session_name,'network_propagate':True} )
def on_notify(self,notification):
#.........这里部分代码省略.........
示例4: Recorder
# 需要导入模块: from audio import Audio_Input_Dict [as 别名]
# 或者: from audio.Audio_Input_Dict import keys [as 别名]
class Recorder(Plugin):
"""Capture Recorder"""
def __init__(
self,
g_pool,
session_name=get_auto_name(),
rec_dir=None,
user_info={"name": "", "additional_field": "change_me"},
info_menu_conf={},
show_info_menu=False,
record_eye=False,
audio_src="No Audio",
raw_jpeg=False,
):
super(Recorder, self).__init__(g_pool)
# update name if it was autogenerated.
if session_name.startswith("20") and len(session_name) == 10:
session_name = get_auto_name()
if rec_dir:
self.set_rec_dir(rec_dir)
else:
# lets make a rec dir next to the user dir
base_dir = self.g_pool.user_dir.rsplit(os.path.sep, 1)[0]
self.rec_dir = os.path.join(base_dir, "recordings")
if not os.path.isdir(self.rec_dir):
os.mkdir(self.rec_dir)
self.raw_jpeg = raw_jpeg
self.order = 0.9
self.record_eye = record_eye
self.session_name = session_name
self.audio_devices_dict = Audio_Input_Dict()
if audio_src in self.audio_devices_dict.keys():
self.audio_src = audio_src
else:
self.audio_src = "No Audio"
self.running = False
self.menu = None
self.button = None
self.user_info = user_info
self.show_info_menu = show_info_menu
self.info_menu = None
self.info_menu_conf = info_menu_conf
self.height, self.width = self.g_pool.capture.frame_size
def get_init_dict(self):
d = {}
d["record_eye"] = self.record_eye
d["audio_src"] = self.audio_src
d["session_name"] = self.session_name
d["user_info"] = self.user_info
d["info_menu_conf"] = self.info_menu_conf
d["show_info_menu"] = self.show_info_menu
d["rec_dir"] = self.rec_dir
d["raw_jpeg"] = self.raw_jpeg
return d
def init_gui(self):
self.menu = ui.Growing_Menu("Recorder")
self.g_pool.sidebar.insert(3, self.menu)
self.menu.append(
ui.Info_Text(
'Pupil recordings are saved like this: "path_to_recordings/recording_session_name/nnn" where "nnn" is an increasing number to avoid overwrites. You can use "/" in your session name to create subdirectories.'
)
)
self.menu.append(
ui.Info_Text(
'Recordings are saved to "~/pupil_recordings". You can change the path here but note that invalid input will be ignored.'
)
)
self.menu.append(ui.Text_Input("rec_dir", self, setter=self.set_rec_dir, label="Path to recordings"))
self.menu.append(
ui.Text_Input("session_name", self, setter=self.set_session_name, label="Recording session name")
)
self.menu.append(
ui.Switch("show_info_menu", self, on_val=True, off_val=False, label="Request additional user info")
)
self.menu.append(
ui.Selector(
"raw_jpeg",
self,
selection=[True, False],
labels=["bigger file, less CPU", "smaller file, more CPU"],
label="compression",
)
)
self.menu.append(ui.Info_Text("Recording the raw eye video is optional. We use it for debugging."))
self.menu.append(ui.Switch("record_eye", self, on_val=True, off_val=False, label="Record eye"))
self.menu.append(ui.Selector("audio_src", self, selection=self.audio_devices_dict.keys()))
self.button = ui.Thumb("running", self, setter=self.toggle, label="Record", hotkey="r")
self.button.on_color[:] = (1, 0.0, 0.0, 0.8)
self.g_pool.quickbar.insert(1, self.button)
def deinit_gui(self):
if self.menu:
self.g_pool.sidebar.remove(self.menu)
#.........这里部分代码省略.........
示例5: Recorder
# 需要导入模块: from audio import Audio_Input_Dict [as 别名]
# 或者: from audio.Audio_Input_Dict import keys [as 别名]
class Recorder(Plugin):
"""Capture Recorder"""
def __init__(self,g_pool,session_name = get_auto_name(),rec_dir=None, user_info={'name':'','additional_field':'change_me'},info_menu_conf={},show_info_menu=False, record_eye = True, audio_src = 'No Audio',raw_jpeg=True):
super(Recorder, self).__init__(g_pool)
#update name if it was autogenerated.
if session_name.startswith('20') and len(session_name)==10:
session_name = get_auto_name()
base_dir = self.g_pool.user_dir.rsplit(os.path.sep,1)[0]
default_rec_dir = os.path.join(base_dir,'recordings')
if rec_dir and rec_dir != default_rec_dir and self.verify_path(rec_dir):
self.rec_dir = rec_dir
else:
try:
os.makedirs(default_rec_dir)
except OSError as e:
if e.errno != errno.EEXIST:
logger.error("Could not create Rec dir")
raise e
else:
logger.info('Created standard Rec dir at "%s"'%default_rec_dir)
self.rec_dir = default_rec_dir
self.raw_jpeg = raw_jpeg
self.order = .9
self.record_eye = record_eye
self.session_name = session_name
self.audio_devices_dict = Audio_Input_Dict()
if audio_src in self.audio_devices_dict.keys():
self.audio_src = audio_src
else:
self.audio_src = 'No Audio'
self.running = False
self.menu = None
self.button = None
self.user_info = user_info
self.show_info_menu = show_info_menu
self.info_menu = None
self.info_menu_conf = info_menu_conf
def get_init_dict(self):
d = {}
d['record_eye'] = self.record_eye
d['audio_src'] = self.audio_src
d['session_name'] = self.session_name
d['user_info'] = self.user_info
d['info_menu_conf'] = self.info_menu_conf
d['show_info_menu'] = self.show_info_menu
d['rec_dir'] = self.rec_dir
d['raw_jpeg'] = self.raw_jpeg
return d
def init_gui(self):
self.menu = ui.Growing_Menu('Recorder')
self.g_pool.sidebar.insert(3,self.menu)
self.menu.append(ui.Info_Text('Pupil recordings are saved like this: "path_to_recordings/recording_session_name/nnn" where "nnn" is an increasing number to avoid overwrites. You can use "/" in your session name to create subdirectories.'))
self.menu.append(ui.Info_Text('Recordings are saved to "~/pupil_recordings". You can change the path here but note that invalid input will be ignored.'))
self.menu.append(ui.Text_Input('rec_dir',self,setter=self.set_rec_dir,label='Path to recordings'))
self.menu.append(ui.Text_Input('session_name',self,setter=self.set_session_name,label='Recording session name'))
self.menu.append(ui.Switch('show_info_menu',self,on_val=True,off_val=False,label='Request additional user info'))
self.menu.append(ui.Selector('raw_jpeg',self,selection = [True,False], labels=["bigger file, less CPU", "smaller file, more CPU"],label='Compression'))
self.menu.append(ui.Info_Text('Recording the raw eye video is optional. We use it for debugging.'))
self.menu.append(ui.Switch('record_eye',self,on_val=True,off_val=False,label='Record eye'))
self.menu.append(ui.Selector('audio_src',self, selection=self.audio_devices_dict.keys(),label='Audio Source'))
self.button = ui.Thumb('running',self,setter=self.toggle,label='Record',hotkey='r')
self.button.on_color[:] = (1,.0,.0,.8)
self.g_pool.quickbar.insert(1,self.button)
def deinit_gui(self):
if self.menu:
self.g_pool.sidebar.remove(self.menu)
self.menu = None
if self.button:
self.g_pool.quickbar.remove(self.button)
self.button = None
def toggle(self, _=None):
if self.running:
self.notify_all( {'subject':'recording.should_stop'} )
self.notify_all( {'subject':'recording.should_stop', 'remote_notify':'all'} )
else:
self.notify_all( {'subject':'recording.should_start','session_name':self.session_name} )
self.notify_all( {'subject':'recording.should_start','session_name':self.session_name,'remote_notify':'all'} )
def on_notify(self,notification):
"""Handles recorder notifications
Reacts to notifications:
``recording.should_start``: Starts a new recording session
``recording.should_stop``: Stops current recording session
#.........这里部分代码省略.........
示例6: Audio_Capture
# 需要导入模块: from audio import Audio_Input_Dict [as 别名]
# 或者: from audio.Audio_Input_Dict import keys [as 别名]
class Audio_Capture(Plugin):
"""docstring for Audio_Capture"""
icon_chr = chr(0xE029)
icon_font = "pupil_icons"
def __init__(self, g_pool, audio_src="No Audio"):
super().__init__(g_pool)
self.audio_devices_dict = Audio_Input_Dict()
if audio_src in list(self.audio_devices_dict.keys()):
self.audio_src = audio_src
else:
self.audio_src = "No Audio"
self.thread = None
self.running = Event()
self.recording = Event()
self.recording.clear()
self.audio_container = None
self.audio_out_stream = None
self.queue = queue.Queue()
self.start_capture(self.audio_src)
def init_ui(self):
self.add_menu()
self.menu.label = "Audio Capture"
help_str = "Creates events for audio input."
self.menu.append(ui.Info_Text(help_str))
def audio_dev_getter():
# fetch list of currently available
audio_src_val = None
if self.audio_devices_dict is not None:
if self.audio_src in self.audio_devices_dict.keys():
audio_src_val = self.audio_devices_dict[self.audio_src]
self.audio_devices_dict = Audio_Input_Dict()
if audio_src_val is not None:
self.audio_devices_dict[self.audio_src] = audio_src_val
devices = list(self.audio_devices_dict.keys())
return devices, devices
self.menu.append(
ui.Selector(
"audio_src",
self,
selection_getter=audio_dev_getter,
label="Audio Source",
setter=self.start_capture,
)
)
self.menu.append(ui.Info_Text(NOT_REC_STR))
def deinit_ui(self):
self.remove_menu()
def get_init_dict(self):
return {"audio_src": self.audio_src}
def cleanup(self):
if self.audio_container is not None:
self.close_audio_recording()
self.running.clear()
if self.thread and self.thread.is_alive():
self.thread.join(timeout=1)
def on_notify(self, notification):
if notification["subject"] == "recording.started":
self.rec_dir = notification["rec_path"]
self.recording.set()
if self.running.is_set(): # and self.audio_container is None:
self.menu[-2].read_only = True
del self.menu[-1]
self.menu.append(ui.Info_Text(REC_STR))
elif not self.running.is_set():
logger.warning("Recording was started without an active audio capture")
elif notification["subject"] == "recording.stopped":
self.recording.clear()
self.close_audio_recording()
def close_audio_recording(self):
self.menu[-2].read_only = False
del self.menu[-1]
self.menu.append(ui.Info_Text(NOT_REC_STR))
def write_audio_packet(self, audio_frame):
# Test if audio outstream has been initialized
if self.audio_out_stream is None:
try:
self.audio_out_stream = self.audio_container.add_stream("aac")
except ValueError as e:
# packet.stream codec is not supported in target container.
logger.error("Failed to create audio stream. Aborting recording.")
logger.debug("Reason: {}".format(e))
self.close_audio_recording()
self.timestamps.append(audio_frame.timestamp)
packet = self.audio_out_stream.encode(audio_frame)
#.........这里部分代码省略.........
示例7: Audio_Capture
# 需要导入模块: from audio import Audio_Input_Dict [as 别名]
# 或者: from audio.Audio_Input_Dict import keys [as 别名]
class Audio_Capture(Plugin):
"""docstring for Audio_Capture"""
def __init__(self, g_pool, audio_src='No Audio'):
super().__init__(g_pool)
self.audio_devices_dict = Audio_Input_Dict()
if audio_src in list(self.audio_devices_dict.keys()):
self.audio_src = audio_src
else:
self.audio_src = 'No Audio'
self.thread = None
self.running = Event()
self.audio_container = None
self.audio_out_stream = None
self.queue = queue.Queue()
self.start_capture(self.audio_src)
def recent_events(self, events):
audio_packets = []
while True:
try:
packet = self.queue.get_nowait()
except queue.Empty:
break
audio_packets.append(packet)
events['audio_packets'] = audio_packets
if self.audio_container is not None:
for packet in audio_packets:
self.write_audio_packet(packet)
def init_gui(self):
self.menu = ui.Growing_Menu('Audio Capture')
self.menu.collapsed = True
self.g_pool.sidebar.append(self.menu)
def close():
self.alive = False
help_str = 'Creates events for audio input.'
self.menu.append(ui.Button('Close', close))
self.menu.append(ui.Info_Text(help_str))
def audio_dev_getter():
# fetch list of currently available
self.audio_devices_dict = Audio_Input_Dict()
devices = list(self.audio_devices_dict.keys())
return devices, devices
self.menu.append(ui.Selector('audio_src', self,
selection_getter=audio_dev_getter,
label='Audio Source',
setter=self.start_capture))
self.menu.append(ui.Info_Text(NOT_REC_STR))
def get_init_dict(self):
return {'audio_src': self.audio_src}
def deinit_gui(self):
if self.menu:
self.g_pool.sidebar.remove(self.menu)
self.menu = None
def cleanup(self):
if self.audio_container is not None:
self.close_audio_recording()
self.running.clear()
self.deinit_gui()
if self.thread and self.thread.is_alive():
self.thread.join(timeout=1)
def on_notify(self, notification):
if notification['subject'] == 'recording.started':
if self.running.is_set() and self.audio_container is None:
self.rec_dir = notification['rec_path']
rec_file = os.path.join(self.rec_dir, 'audio.wav')
self.audio_container = av.open(rec_file, 'w')
self.timestamps = []
self.menu[-2].read_only = True
del self.menu[-1]
self.menu.append(ui.Info_Text(REC_STR))
elif not self.running.is_set():
logger.warning('Recording was started without an active audio capture')
else:
logger.warning('Audio is already being recorded')
elif notification['subject'] == 'recording.stopped':
if self.audio_container is not None and self.audio_out_stream is not None:
self.close_audio_recording()
def close_audio_recording(self):
self.audio_container.close()
ts_loc = os.path.join(self.rec_dir, 'audio_timestamps.npy')
np.save(ts_loc, np.asarray(self.timestamps))
self.timestamps = None
self.audio_out_stream = None
self.audio_container = None
self.menu[-2].read_only = False
del self.menu[-1]
#.........这里部分代码省略.........
示例8: Recorder
# 需要导入模块: from audio import Audio_Input_Dict [as 别名]
# 或者: from audio.Audio_Input_Dict import keys [as 别名]
class Recorder(Plugin):
"""Capture Recorder"""
def __init__(self,g_pool,session_name = get_auto_name(),rec_dir=None, user_info={'name':'','additional_field':'change_me'},info_menu_conf={},show_info_menu=False, record_eye = False, audio_src = 'No Audio', raw_jpeg=False):
super(Recorder, self).__init__(g_pool)
self.states = ['start', 'want', 'pick']
self.all_qr = {'termo1' : 75, 'light1' : False, 'light2' : False, 'light3': False}
self.this_state = 'start'
self.start_state = time()
self.qr_codes = {}
self.gaze_x = -1
self.gaze_y = -1
self.avg_col = 0
self.choice = ""
#update name if it was autogenerated.
if session_name.startswith('20') and len(session_name)==10:
session_name = get_auto_name()
base_dir = self.g_pool.user_dir.rsplit(os.path.sep,1)[0]
default_rec_dir = os.path.join(base_dir, 'recordings')
if rec_dir and rec_dir != default_rec_dir and self.verify_path(rec_dir):
self.rec_dir = rec_dir
else:
try:
os.makedirs(default_rec_dir)
except OSError as e:
if 'File exists' in '%s'%e:
pass
else:
logger.error("Could not create Rec dir")
raise e
else:
logger.info('Created standard Rec dir at "%s"'%default_rec_dir)
self.rec_dir = default_rec_dir
# if rec_dir and rec_dir != default_rec_dir and self.verify_path(rec_dir):
# self.rec_dir = rec_dir
# else:
# #lets make a rec dir next to the user dir
# base_dir = self.g_pool.user_dir.rsplit(os.path.sep,1)[0]
# self.rec_dir = os.path.join(base_dir,'recordings')
# if not os.path.isdir(self.rec_dir):
# os.mkdir(self.rec_dir)
self.raw_jpeg = raw_jpeg
self.order = .9
self.record_eye = record_eye
self.session_name = session_name
self.audio_devices_dict = Audio_Input_Dict()
if audio_src in self.audio_devices_dict.keys():
self.audio_src = audio_src
else:
self.audio_src = 'No Audio'
self.running = False
self.menu = None
self.button = None
self.user_info = user_info
self.show_info_menu = show_info_menu
self.info_menu = None
self.info_menu_conf = info_menu_conf
self.height, self.width = self.g_pool.capture.frame_size
def get_init_dict(self):
d = {}
d['record_eye'] = self.record_eye
d['audio_src'] = self.audio_src
d['session_name'] = self.session_name
d['user_info'] = self.user_info
d['info_menu_conf'] = self.info_menu_conf
d['show_info_menu'] = self.show_info_menu
d['rec_dir'] = self.rec_dir
d['raw_jpeg'] = self.raw_jpeg
# if self.menu:
# d['menu_conf'] = self.menu.configuration
# else:
# d['menu_conf'] = self.menu_conf
return d
def init_gui(self):
self.menu = ui.Growing_Menu('Recorder')
# self.menu.configuration = self.menu_conf
self.g_pool.sidebar.insert(3,self.menu)
self.menu.append(ui.Info_Text('Pupil recordings are saved like this: "path_to_recordings/recording_session_name/nnn" where "nnn" is an increasing number to avoid overwrites. You can use "/" in your session name to create subdirectories.'))
self.menu.append(ui.Info_Text('Recordings are saved to "~/pupil_recordings". You can change the path here but note that invalid input will be ignored.'))
self.menu.append(ui.Text_Input('rec_dir',self,setter=self.set_rec_dir,label='Path to recordings'))
self.menu.append(ui.Text_Input('session_name',self,setter=self.set_session_name,label='Recording session name'))
self.menu.append(ui.Switch('show_info_menu',self,on_val=True,off_val=False,label='Request additional user info'))
self.menu.append(ui.Selector('raw_jpeg',self,selection = [True,False], labels=["bigger file, less CPU", "smaller file, more CPU"],label='compression'))
self.menu.append(ui.Info_Text('Recording the raw eye video is optional. We use it for debugging.'))
self.menu.append(ui.Switch('record_eye',self,on_val=True,off_val=False,label='Record eye'))
self.menu.append(ui.Selector('audio_src',self, selection=self.audio_devices_dict.keys()))
self.button = ui.Thumb('running',self,setter=self.toggle,label='QR',hotkey='r')
self.button.on_color[:] = (1,.0,.0,.8)
self.g_pool.quickbar.insert(1,self.button)
#.........这里部分代码省略.........