4 * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include "appearanceprefs.h"
23 #include "deleteallindexes.h"
25 #include "edlsession.h"
27 #include "filesystem.h"
30 #include "preferences.h"
31 #include "preferencesthread.h"
32 #include "shbtnprefs.h"
36 AppearancePrefs::AppearancePrefs(MWindow *mwindow, PreferencesWindow *pwindow)
37 : PreferencesDialog(mwindow, pwindow)
49 AppearancePrefs::~AppearancePrefs()
58 delete thumbnail_size;
62 void AppearancePrefs::create_objects()
64 BC_Resources *resources = BC_WindowBase::get_resources();
65 int margin = mwindow->theme->widget_border;
66 char string[BCTEXTLEN];
67 int x0 = mwindow->theme->preferencesoptions_x;
68 int y0 = mwindow->theme->preferencesoptions_y;
69 int x = x0, y = y0, x1 = x + 100;
71 add_subwindow(new BC_Title(x, y, _("Layout:"), LARGEFONT,
72 resources->text_default));
77 add_subwindow(new BC_Title(x, y, _("Theme:")));
78 add_subwindow(theme = new ViewTheme(x1, y, pwindow));
79 theme->create_objects();
80 y += theme->get_h() + 5;
83 ViewPluginIcons *plugin_icons;
84 add_subwindow(new BC_Title(x, y, _("Plugin Icons:")));
85 add_subwindow(plugin_icons = new ViewPluginIcons(x1, y, pwindow));
86 plugin_icons->create_objects();
87 y += plugin_icons->get_h() + 15;
90 int x2 = x1 + 160, y2 = y;
92 add_subwindow(new BC_Title(x1, y, _("View thumbnail size:")));
93 thumbnail_size = new ViewThumbnailSize(pwindow, this, x2, y);
94 thumbnail_size->create_objects();
95 y += thumbnail_size->get_h() + 5;
96 add_subwindow(new BC_Title(x1, y, _("Vicon quality:")));
97 vicon_size = new ViewViconSize(pwindow, this, x2, y);
98 vicon_size->create_objects();
99 y += vicon_size->get_h() + 5;
100 add_subwindow(new BC_Title(x1, y, _("Vicon color mode:")));
101 add_subwindow(vicon_color_mode = new ViewViconColorMode(pwindow, x2, y));
102 vicon_color_mode->create_objects();
103 y += vicon_color_mode->get_h() + 5;
107 add_subwindow(new BC_Bar(5, y, get_w() - 10));
110 add_subwindow(new BC_Title(x, y, _("Time Format:"), LARGEFONT,
111 resources->text_default));
113 add_subwindow(new BC_Title(x1, y, _("Flags:"), LARGEFONT,
114 resources->text_default));
116 y += get_text_height(LARGEFONT) + 5;
120 add_subwindow(hms = new TimeFormatHMS(pwindow, this,
121 pwindow->thread->edl->session->time_format == TIME_HMS,
124 add_subwindow(hmsf = new TimeFormatHMSF(pwindow, this,
125 pwindow->thread->edl->session->time_format == TIME_HMSF,
128 add_subwindow(samples = new TimeFormatSamples(pwindow, this,
129 pwindow->thread->edl->session->time_format == TIME_SAMPLES,
132 add_subwindow(hex = new TimeFormatHex(pwindow, this,
133 pwindow->thread->edl->session->time_format == TIME_SAMPLES_HEX,
136 add_subwindow(frames = new TimeFormatFrames(pwindow, this,
137 pwindow->thread->edl->session->time_format == TIME_FRAMES,
140 add_subwindow(feet = new TimeFormatFeet(pwindow, this,
141 pwindow->thread->edl->session->time_format == TIME_FEET_FRAMES,
143 x += feet->get_w() + 15;
145 add_subwindow(title = new BC_Title(x, y, _("Frames per foot:")));
146 x += title->get_w() + margin;
147 sprintf(string, "%0.2f", pwindow->thread->edl->session->frames_per_foot);
148 add_subwindow(new TimeFormatFeetSetting(pwindow,
152 add_subwindow(seconds = new TimeFormatSeconds(pwindow, this,
153 pwindow->thread->edl->session->time_format == TIME_SECONDS,
157 add_subwindow(new BC_Bar(5, y, get_w()/2 - 30));
160 add_subwindow(new BC_Title(x, y, _("Color:"), LARGEFONT,
161 resources->text_default));
163 add_subwindow(title = new BC_Title(x, y, _("Highlighting Inversion color:")));
164 x += title->get_w() + margin;
165 char hex_color[BCSTRLEN];
166 sprintf(hex_color, "%06x", preferences->highlight_inverse);
167 add_subwindow(new HighlightInverseColor(pwindow, x, y, hex_color));
171 add_subwindow(title = new BC_Title(x, y, _("YUV color space:")));
172 x += title->get_w() + margin;
173 add_subwindow(yuv_color_space = new YuvColorSpace(x, y, pwindow));
174 yuv_color_space->create_objects();
175 y += yuv_color_space->get_h() + 5;
178 add_subwindow(title = new BC_Title(x, y, _("YUV color range:")));
179 x += title->get_w() + margin;
180 add_subwindow(yuv_color_range = new YuvColorRange(x, y, pwindow));
181 yuv_color_range->create_objects();
182 y += yuv_color_range->get_h() + 5;
184 UseTipWindow *tip_win = new UseTipWindow(pwindow, x1, y1);
185 add_subwindow(tip_win);
186 y1 += tip_win->get_h() + 5;
187 AutocolorAssets *autocolor_assets = new AutocolorAssets(pwindow, x1, y1);
188 add_subwindow(autocolor_assets);
189 y1 += autocolor_assets->get_h() + 5;
190 UseWarnIndecies *idx_win = new UseWarnIndecies(pwindow, x1, y1);
191 add_subwindow(idx_win);
192 y1 += idx_win->get_h() + 5;
193 UseWarnVersion *ver_win = new UseWarnVersion(pwindow, x1, y1);
194 add_subwindow(ver_win);
195 y1 += ver_win->get_h() + 5;
196 BD_WarnRoot *bdwr_win = new BD_WarnRoot(pwindow, x1, y1);
197 add_subwindow(bdwr_win);
198 y1 += bdwr_win->get_h() + 5;
199 PopupMenuBtnup *pop_win = new PopupMenuBtnup(pwindow, x1, y1);
200 add_subwindow(pop_win);
201 y1 += pop_win->get_h() + 5;
202 GrabFocusPolicy *grab_input_focus = new GrabFocusPolicy(pwindow, x1, y1);
203 add_subwindow(grab_input_focus);
204 y1 += grab_input_focus->get_h() + 5;
205 ActivateFocusPolicy *focus_activate = new ActivateFocusPolicy(pwindow, x1, y1);
206 add_subwindow(focus_activate);
207 y1 += focus_activate->get_h() + 5;
208 DeactivateFocusPolicy *focus_deactivate = new DeactivateFocusPolicy(pwindow, x1, y1);
209 add_subwindow(focus_deactivate);
210 y1 += focus_deactivate->get_h() + 5;
211 ForwardRenderDisplacement *displacement = new ForwardRenderDisplacement(pwindow, x1, y1);
212 add_subwindow(displacement);
213 y1 += displacement->get_h() + 5;
214 add_subwindow(thumbnails = new ViewThumbnails(x1, y1, pwindow));
215 y1 += thumbnails->get_h() + 5;
216 PerpetualSession *perpetual = new PerpetualSession(x1, y1, pwindow);
217 add_subwindow(perpetual);
218 y1 += perpetual->get_h() + 5;
219 CtrlToggle *ctrl_toggle = new CtrlToggle(x1, y1, pwindow);
220 add_subwindow(ctrl_toggle);
221 y1 += ctrl_toggle->get_h() + 5;
222 RectifyAudioToggle *rect_toggle = new RectifyAudioToggle(x1, y1, pwindow);
223 add_subwindow(rect_toggle);
224 y1 += rect_toggle->get_h() + 5;
228 int AppearancePrefs::update(int new_value)
230 pwindow->thread->redraw_times = 1;
231 pwindow->thread->edl->session->time_format = new_value;
232 hms->update(new_value == TIME_HMS);
233 hmsf->update(new_value == TIME_HMSF);
234 samples->update(new_value == TIME_SAMPLES);
235 hex->update(new_value == TIME_SAMPLES_HEX);
236 frames->update(new_value == TIME_FRAMES);
237 feet->update(new_value == TIME_FEET_FRAMES);
238 seconds->update(new_value == TIME_SECONDS);
243 TimeFormatHMS::TimeFormatHMS(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
244 : BC_Radial(x, y, value, TIME_HMS_TEXT)
245 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
247 int TimeFormatHMS::handle_event()
249 tfwindow->update(TIME_HMS);
253 TimeFormatHMSF::TimeFormatHMSF(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
254 : BC_Radial(x, y, value, TIME_HMSF_TEXT)
255 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
257 int TimeFormatHMSF::handle_event()
259 tfwindow->update(TIME_HMSF);
263 TimeFormatSamples::TimeFormatSamples(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
264 : BC_Radial(x, y, value, TIME_SAMPLES_TEXT)
265 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
267 int TimeFormatSamples::handle_event()
269 tfwindow->update(TIME_SAMPLES);
273 TimeFormatFrames::TimeFormatFrames(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
274 : BC_Radial(x, y, value, TIME_FRAMES_TEXT)
275 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
277 int TimeFormatFrames::handle_event()
279 tfwindow->update(TIME_FRAMES);
283 TimeFormatHex::TimeFormatHex(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
284 : BC_Radial(x, y, value, TIME_SAMPLES_HEX_TEXT)
285 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
287 int TimeFormatHex::handle_event()
289 tfwindow->update(TIME_SAMPLES_HEX);
293 TimeFormatSeconds::TimeFormatSeconds(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
294 : BC_Radial(x, y, value, TIME_SECONDS_TEXT)
296 this->pwindow = pwindow;
297 this->tfwindow = tfwindow;
300 int TimeFormatSeconds::handle_event()
302 tfwindow->update(TIME_SECONDS);
306 TimeFormatFeet::TimeFormatFeet(PreferencesWindow *pwindow, AppearancePrefs *tfwindow, int value, int x, int y)
307 : BC_Radial(x, y, value, TIME_FEET_FRAMES_TEXT)
308 { this->pwindow = pwindow; this->tfwindow = tfwindow; }
310 int TimeFormatFeet::handle_event()
312 tfwindow->update(TIME_FEET_FRAMES);
316 TimeFormatFeetSetting::TimeFormatFeetSetting(PreferencesWindow *pwindow, int x, int y, char *string)
317 : BC_TextBox(x, y, 90, 1, string)
318 { this->pwindow = pwindow; }
320 int TimeFormatFeetSetting::handle_event()
322 pwindow->thread->edl->session->frames_per_foot = atof(get_text());
323 if(pwindow->thread->edl->session->frames_per_foot < 1) pwindow->thread->edl->session->frames_per_foot = 1;
328 ViewTheme::ViewTheme(int x, int y, PreferencesWindow *pwindow)
329 : BC_PopupMenu(x, y, 200, pwindow->thread->preferences->theme, 1)
331 this->pwindow = pwindow;
333 ViewTheme::~ViewTheme()
337 void ViewTheme::create_objects()
339 ArrayList<PluginServer*> themes;
340 MWindow::search_plugindb(0, 0, 0, 0, 1, themes);
342 for(int i = 0; i < themes.total; i++) {
343 add_item(new ViewThemeItem(this, themes.values[i]->title));
347 int ViewTheme::handle_event()
352 ViewThemeItem::ViewThemeItem(ViewTheme *popup, const char *text)
358 int ViewThemeItem::handle_event()
360 popup->set_text(get_text());
361 strcpy(popup->pwindow->thread->preferences->theme, get_text());
362 popup->handle_event();
367 ViewPluginIcons::ViewPluginIcons(int x, int y, PreferencesWindow *pwindow)
368 : BC_PopupMenu(x, y, 200, pwindow->thread->preferences->plugin_icons, 1)
370 this->pwindow = pwindow;
372 ViewPluginIcons::~ViewPluginIcons()
376 void ViewPluginIcons::create_objects()
378 add_item(new ViewPluginIconItem(this, DEFAULT_PICON));
380 const char *plugin_path = File::get_plugin_path();
381 char picon_path[BCTEXTLEN];
382 snprintf(picon_path,sizeof(picon_path)-1,"%s/picon", plugin_path);
383 if( fs.update(picon_path) ) return;
384 for( int i=0; i<fs.dir_list.total; ++i ) {
385 char *fs_path = fs.dir_list[i]->path;
386 if( !fs.is_dir(fs_path) ) continue;
387 char *cp = strrchr(fs_path,'/');
388 cp = !cp ? fs_path : cp+1;
389 if( !strcmp(cp,DEFAULT_PICON) ) continue;
390 add_item(new ViewPluginIconItem(this, cp));
394 int ViewPluginIcons::handle_event()
399 ViewPluginIconItem::ViewPluginIconItem(ViewPluginIcons *popup, const char *text)
405 int ViewPluginIconItem::handle_event()
407 popup->set_text(get_text());
408 strcpy(popup->pwindow->thread->preferences->plugin_icons, get_text());
409 popup->handle_event();
414 ViewThumbnails::ViewThumbnails(int x,
416 PreferencesWindow *pwindow)
419 pwindow->thread->preferences->use_thumbnails, _("Use thumbnails in resource window"))
421 this->pwindow = pwindow;
424 int ViewThumbnails::handle_event()
426 pwindow->thread->preferences->use_thumbnails = get_value();
431 ViewThumbnailSize::ViewThumbnailSize(PreferencesWindow *pwindow,
432 AppearancePrefs *aprefs, int x, int y)
433 : BC_TumbleTextBox(aprefs,
434 pwindow->thread->preferences->awindow_picon_h,
438 this->pwindow = pwindow;
439 this->aprefs = aprefs;
442 int ViewThumbnailSize::handle_event()
444 int v = atoi(get_text());
446 pwindow->thread->preferences->awindow_picon_h = v;
450 ViewViconSize::ViewViconSize(PreferencesWindow *pwindow,
451 AppearancePrefs *aprefs, int x, int y)
452 : BC_TumbleTextBox(aprefs,
453 pwindow->thread->preferences->vicon_size,
457 this->pwindow = pwindow;
458 this->aprefs = aprefs;
461 int ViewViconSize::handle_event()
463 int v = atoi(get_text());
465 pwindow->thread->preferences->vicon_size = v;
469 ViewViconColorMode::ViewViconColorMode(PreferencesWindow *pwindow, int x, int y)
470 : BC_PopupMenu(x, y, 100,
471 _(vicon_color_modes[pwindow->thread->preferences->vicon_color_mode]), 1)
473 this->pwindow = pwindow;
475 ViewViconColorMode::~ViewViconColorMode()
479 const char *ViewViconColorMode::vicon_color_modes[] = {
485 void ViewViconColorMode::create_objects()
487 for( int id=0,nid=sizeof(vicon_color_modes)/sizeof(vicon_color_modes[0]); id<nid; ++id )
488 add_item(new ViewViconColorModeItem(this, _(vicon_color_modes[id]), id));
492 int ViewViconColorMode::handle_event()
494 set_text(_(vicon_color_modes[pwindow->thread->preferences->vicon_color_mode]));
498 ViewViconColorModeItem::ViewViconColorModeItem(ViewViconColorMode *popup, const char *text, int id)
505 int ViewViconColorModeItem::handle_event()
507 popup->set_text(get_text());
508 popup->pwindow->thread->preferences->vicon_color_mode = id;
509 return popup->handle_event();
513 UseTipWindow::UseTipWindow(PreferencesWindow *pwindow, int x, int y)
516 pwindow->thread->preferences->use_tipwindow,
517 _("Show tip of the day"))
519 this->pwindow = pwindow;
521 int UseTipWindow::handle_event()
523 pwindow->thread->preferences->use_tipwindow = get_value();
528 UseWarnIndecies::UseWarnIndecies(PreferencesWindow *pwindow, int x, int y)
529 : BC_CheckBox(x, y, pwindow->thread->preferences->warn_indexes,
530 _("ffmpeg probe warns rebuild indexes"))
532 this->pwindow = pwindow;
535 int UseWarnIndecies::handle_event()
537 pwindow->thread->preferences->warn_indexes = get_value();
541 UseWarnVersion::UseWarnVersion(PreferencesWindow *pwindow, int x, int y)
542 : BC_CheckBox(x, y, pwindow->thread->preferences->warn_version,
543 _("EDL version warns if mismatched"))
545 this->pwindow = pwindow;
548 int UseWarnVersion::handle_event()
550 pwindow->thread->preferences->warn_version = get_value();
554 BD_WarnRoot::BD_WarnRoot(PreferencesWindow *pwindow, int x, int y)
555 : BC_CheckBox(x, y, pwindow->thread->preferences->bd_warn_root,
556 _("Create Bluray warns if not root"))
558 this->pwindow = pwindow;
561 int BD_WarnRoot::handle_event()
563 pwindow->thread->preferences->bd_warn_root = get_value();
567 PopupMenuBtnup::PopupMenuBtnup(PreferencesWindow *pwindow, int x, int y)
568 : BC_CheckBox(x, y, pwindow->thread->preferences->popupmenu_btnup,
569 _("Popups activate on button up"))
571 this->pwindow = pwindow;
574 int PopupMenuBtnup::handle_event()
576 pwindow->thread->preferences->popupmenu_btnup = get_value();
580 GrabFocusPolicy::GrabFocusPolicy(PreferencesWindow *pwindow, int x, int y)
581 : BC_CheckBox(x, y, (pwindow->thread->preferences->grab_input_focus) != 0,
582 _("Set Input Focus when window entered"))
584 this->pwindow = pwindow;
587 int GrabFocusPolicy::handle_event()
589 pwindow->thread->preferences->grab_input_focus = get_value();
593 ActivateFocusPolicy::ActivateFocusPolicy(PreferencesWindow *pwindow, int x, int y)
594 : BC_CheckBox(x, y, (pwindow->thread->preferences->textbox_focus_policy & CLICK_ACTIVATE) != 0,
595 _("Click to activate text focus"))
597 this->pwindow = pwindow;
600 int ActivateFocusPolicy::handle_event()
603 pwindow->thread->preferences->textbox_focus_policy |= CLICK_ACTIVATE;
605 pwindow->thread->preferences->textbox_focus_policy &= ~CLICK_ACTIVATE;
609 DeactivateFocusPolicy::DeactivateFocusPolicy(PreferencesWindow *pwindow, int x, int y)
610 : BC_CheckBox(x, y, (pwindow->thread->preferences->textbox_focus_policy & CLICK_DEACTIVATE) != 0,
611 _("Click to deactivate text focus"))
613 this->pwindow = pwindow;
616 int DeactivateFocusPolicy::handle_event()
619 pwindow->thread->preferences->textbox_focus_policy |= CLICK_DEACTIVATE;
621 pwindow->thread->preferences->textbox_focus_policy &= ~CLICK_DEACTIVATE;
625 ForwardRenderDisplacement::ForwardRenderDisplacement(PreferencesWindow *pwindow, int x, int y)
626 : BC_CheckBox(x, y, pwindow->thread->preferences->forward_render_displacement,
627 _("Always show next frame"))
629 this->pwindow = pwindow;
632 int ForwardRenderDisplacement::handle_event()
634 pwindow->thread->preferences->forward_render_displacement = get_value();
638 AutocolorAssets::AutocolorAssets(PreferencesWindow *pwindow, int x, int y)
639 : BC_CheckBox(x, y, pwindow->thread->preferences->autocolor_assets,
640 _("Autocolor assets"))
642 this->pwindow = pwindow;
645 int AutocolorAssets::handle_event()
647 pwindow->thread->preferences->autocolor_assets = get_value();
651 HighlightInverseColor::HighlightInverseColor(PreferencesWindow *pwindow, int x, int y, const char *hex)
652 : BC_TextBox(x, y, 80, 1, hex)
654 this->pwindow = pwindow;
657 int HighlightInverseColor::handle_event()
659 int inverse_color = strtoul(get_text(),0,16);
660 if( (inverse_color &= 0xffffff) == 0 ) {
661 inverse_color = 0xffffff;
662 char string[BCSTRLEN];
663 sprintf(string,"%06x", inverse_color);
666 pwindow->thread->preferences->highlight_inverse = inverse_color;
671 const char *YuvColorSpace::color_space[] = {
677 YuvColorSpace::YuvColorSpace(int x, int y, PreferencesWindow *pwindow)
678 : BC_PopupMenu(x, y, 100,
679 _(color_space[pwindow->thread->preferences->yuv_color_space]), 1)
681 this->pwindow = pwindow;
683 YuvColorSpace::~YuvColorSpace()
687 void YuvColorSpace::create_objects()
689 for( int id=0,nid=sizeof(color_space)/sizeof(color_space[0]); id<nid; ++id )
690 add_item(new YuvColorSpaceItem(this, _(color_space[id]), id));
694 int YuvColorSpace::handle_event()
696 set_text(_(color_space[pwindow->thread->preferences->yuv_color_space]));
700 YuvColorSpaceItem::YuvColorSpaceItem(YuvColorSpace *popup, const char *text, int id)
707 int YuvColorSpaceItem::handle_event()
709 popup->set_text(get_text());
710 popup->pwindow->thread->preferences->yuv_color_space = id;
711 return popup->handle_event();
715 const char *YuvColorRange::color_range[] = {
720 YuvColorRange::YuvColorRange(int x, int y, PreferencesWindow *pwindow)
721 : BC_PopupMenu(x, y, 100,
722 _(color_range[pwindow->thread->preferences->yuv_color_range]), 1)
724 this->pwindow = pwindow;
726 YuvColorRange::~YuvColorRange()
730 void YuvColorRange::create_objects()
732 for( int id=0,nid=sizeof(color_range)/sizeof(color_range[0]); id<nid; ++id )
733 add_item(new YuvColorRangeItem(this, _(color_range[id]), id));
737 int YuvColorRange::handle_event()
739 set_text(color_range[pwindow->thread->preferences->yuv_color_range]);
743 YuvColorRangeItem::YuvColorRangeItem(YuvColorRange *popup, const char *text, int id)
750 int YuvColorRangeItem::handle_event()
752 popup->set_text(get_text());
753 popup->pwindow->thread->preferences->yuv_color_range = id;
754 return popup->handle_event();
757 PerpetualSession::PerpetualSession(int x, int y, PreferencesWindow *pwindow)
759 pwindow->thread->preferences->perpetual_session, _("Perpetual session"))
761 this->pwindow = pwindow;
764 int PerpetualSession::handle_event()
766 pwindow->thread->preferences->perpetual_session = get_value();
770 CtrlToggle::CtrlToggle(int x, int y, PreferencesWindow *pwindow)
772 pwindow->thread->preferences->ctrl_toggle, _("Clears before toggle"))
774 this->pwindow = pwindow;
777 int CtrlToggle::handle_event()
779 pwindow->thread->preferences->ctrl_toggle = get_value();
783 RectifyAudioToggle::RectifyAudioToggle(int x, int y, PreferencesWindow *pwindow)
785 pwindow->thread->preferences->rectify_audio, _("Timeline Rectify Audio"))
787 this->pwindow = pwindow;
790 int RectifyAudioToggle::handle_event()
792 pwindow->thread->preferences->rectify_audio = get_value();