كتابة البرنامج المساعد VLC لتعلم اللغة الإنجليزية

صورة

في هذه المقالة سأتحدث عن كيفية كتابة مكون إضافي في C لمشغل وسائط VLC. كتبت البرنامج المساعد الخاص بي لتبسيط مشاهدة البرامج التلفزيونية والأفلام باللغة الإنجليزية. تم توضيح فكرة إنشاء هذا المكون الإضافي في أقسام Idea وإيجاد الحل . ترد التفاصيل الفنية لتنفيذ المكون الإضافي في قسم Hello World المساعد والتنفيذ . ما حدث في النهاية وكيفية استخدامه يمكن العثور عليه في القسم الأخير ، النتيجة .

الكود المصدري للمشروع متاح على جيثب .

فكرة


إن فكرة تعلم لغة أجنبية أثناء مشاهدة السلسلة المفضلة لدي ليست جديدة ، لكنني شخصياً واجهت دائمًا مشكلات في تنفيذها. من الصعب للغاية مشاهدة مسلسل أو فيلم عندما لا تفهم نصف ما يقولونه. بالطبع ، يمكنك تشغيل الترجمة ، ولكن إذا تمت مصادفة كلمة أو تعبير غير مألوف في أي خطاب ، فلن يصبح من الواضح أنه سيتم تكرار هذا النص. ولم أحب مشاهدة السلسلة مع ترجمة باللغة الروسية على الإطلاق - يتحول الدماغ إلى لغته الأم ويتوقف عن إدراك الكلام الأجنبي. قرأت في مكان ما تحتاج أولاً إلى مشاهدة مسلسل باللغة الروسية ، ثم في الأصل. لكن هذا النهج لم يناسبني أيضًا. أولاً ، حيث يستغرق الكثير من الوقت لمشاهدة الشيء نفسه عدة مرات ، وثانيا ، لمشاهدة المرة الثانية لم تعد مثيرة للاهتمام بعد الآن - فقد الدافع.

على الرغم من جميع الصعوبات التي تواجه مشاهدة البرامج التلفزيونية الأجنبية ، إلا أنني أستطيع قراءة الوثائق الفنية والمقالات والكتب باللغة الإنجليزية. أحب قراءة الكتب على قارئ Kindle الإلكتروني ، نظرًا لأن وظيفة القاموس رائعة هناك - يمكنك العثور على ترجمة لكلمة غير مألوفة بلمسة واحدة على الشاشة. من المريح قراءة مقالات ومواقع باللغة الإنجليزية عن طريق تثبيت ملحق خاص للترجمة في المستعرض - يمكنني استخدام ملحق Yandex.Translation . يسمح لك هذا النهج بقراءة وفهم النصوص باللغة الإنجليزية ، دون إلهاء كبير للبحث عن كلمات غير مألوفة.

اعتقدت ، لماذا لا نطبق نفس الأسلوب في مشاهدة البرامج التلفزيونية - نحن نشغل المسلسل باللغة الإنجليزية بمجرد العثور على عبارة غير مفهومة ، ونتحول إلى المقطوعة الصوتية الروسية ونرجع قليلاً. بعد ذلك ، نواصل مشاهدة المسلسل باللغة الإنجليزية.

ابحث عن حل


في الواقع ، كل الوظائف التي أحتاجها متوفرة بالفعل في العديد من مشغلات الوسائط الشائعة. الشيء الوحيد الذي أرغب في تبديل المسار الصوتي وإرجاع الفيديو قبل بضع ثوانٍ بنقرة زر واحدة. سيكون من الرائع أيضًا ، بعد ترجمة جزء غير مفهوم ، أن يكون مشغل الوسائط نفسه قد أعاد تشغيل المسار الصوتي إلى اللغة الإنجليزية. حسنًا ، سيكون من الجيد أن تكون قادرًا على تكرار الجزء المترجم مسبقًا من المسار الإنجليزي.

هذا هو ، أنا بحاجة إلى مشغل وسائط يمكنك من خلاله إضافة مكونات إضافية. من المستحسن أيضًا أن يكون النظام الأساسي متقاطعًا ، حيث إنني أستخدم جهاز كمبيوتر شخصي يعمل بنظام Windows وجهاز كمبيوتر محمول يعمل بنظام Linux. سقط خياري على الفور على VLC. على habr ، وجدت حتى مقالة يخبر فيها Idunno كيفية كتابة ملحق VLC على LUA. بالمناسبة ، كتب أيضًا هذا الملحق لتعلم اللغة الإنجليزية) لسوء الحظ ، هذا الملحق لا يعمل في أحدث إصدارات VLC (أقدم من 2.0.5). نظرًا للعملية غير المستقرة ، تمت إزالة القدرة على إضافة وظائف رد الاتصال التي من خلالها تمكنت من معالجة أحداث لوحة المفاتيح في ملحق LUA من واجهة برمجة تطبيقات LUA. في README ، يؤدي ارتباط بالقائمة البريدية لمطوري VLC يناقشون هذه المشكلة إلى امتداده على GitHubIdunno .

وبالتالي ، لتنفيذ فكرتي ، لا يعمل ملحق لـ LUA ، فأنت بحاجة إلى كتابة ملحق في C. وعلى الرغم من أنني كتبت شيئًا في C في آخر مرة منذ حوالي 7 سنوات ، في الجامعة ، قررت أن أجربها.

مرحبا العالم المساعد


تجدر الإشارة إلى أن مشغل وسائط VLC لديه وثائق جيدة. لقد تعلمت منه أن تطوير مشغل الوسائط يستخدم مقاربة معيارية. يتكون VLC من عدة وحدات مستقلة تنفذ وظائف معينة ، و kernel ( libVLCCore ) ، التي تدير هذه الوحدات. هناك نوعان من الوحدات: داخلي ( داخل الشجرة ) وخارجه ( خارج الشجرة ). يتم تخزين الكود المصدري للوحدات الداخلية في مستودع واحد برمز النواة. يتم تطوير الوحدات الخارجية وتجميعها بشكل مستقل عن مشغل وسائط VLC. في الواقع ، فإن هذه الأخيرة هي ما يسمى الإضافات.

تحتوي الوثائق أيضًا على مقال حول كيفية كتابة المكوّن الإضافي الخاص بك (الوحدة النمطية) في C. توفر هذه المقالة التعليمات البرمجية المصدر لمكون إضافي بسيط ، عندما تبدأ VLC ، تعرض رسالة ترحيب " Hello ، <name> " على وحدة التحكم (يتم أخذ القيمة <name>) من إعدادات البرنامج المساعد). مع التقدم قليلاً ، سأقول أنه في المثال أعلاه ، أضف السطر التالي بعد set_category(CAT_INTERFACE) :

 set_subcategory( SUBCAT_INTERFACE_CONTROL ) 

حسنًا ، كل ما تبقى هو تجميع المكونات الإضافية واختبار تشغيلها. هناك أيضًا تعليمات لبناء مكون إضافي خارجي. تجدر الإشارة هنا إلى قسم التدويل ، الذي يصف كيفية عمل الترجمة في VLC. باختصار ، تحتاج المكونات الإضافية الخارجية إلى تحديد وحدات الماكرو N_() ، _() :

 #define DOMAIN "vlc-myplugin" #define _(str) dgettext(DOMAIN, str) #define N_(str) (str) 

للتجميع ، يُقترح استخدام Makefile أو Autotools القديمة الجيدة. قررت أن أذهب بطريقة بسيطة واخترت Makefile. في Makefile تحتاج إلى تذكر تحديد المتغير MODULE_STRING - هذا هو معرف المكون الإضافي الخاص بنا. أنا أيضا التغيير والتبديل في العمل مع الدلائل قليلا - الآن يتم تعريفها من خلال pkg-config . والنتيجة هي الملفات التالية:

hello.c
 /** * @file hello.c * @brief Hello world interface VLC module example */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #define DOMAIN "vlc-myplugin" #define _(str) dgettext(DOMAIN, str) #define N_(str) (str) #include <stdlib.h> /* VLC core API headers */ #include <vlc_common.h> #include <vlc_plugin.h> #include <vlc_interface.h> /* Forward declarations */ static int Open(vlc_object_t *); static void Close(vlc_object_t *); /* Module descriptor */ vlc_module_begin() set_shortname(N_("Hello")) set_description(N_("Hello interface")) set_capability("interface", 0) set_callbacks(Open, Close) set_category(CAT_INTERFACE) set_subcategory( SUBCAT_INTERFACE_CONTROL ) add_string("hello-who", "world", "Target", "Whom to say hello to.", false) vlc_module_end () /* Internal state for an instance of the module */ struct intf_sys_t { char *who; }; /** * Starts our example interface. */ static int Open(vlc_object_t *obj) { intf_thread_t *intf = (intf_thread_t *)obj; /* Allocate internal state */ intf_sys_t *sys = malloc(sizeof (*sys)); if (unlikely(sys == NULL)) return VLC_ENOMEM; intf->p_sys = sys; /* Read settings */ char *who = var_InheritString(intf, "hello-who"); if (who == NULL) { msg_Err(intf, "Nobody to say hello to!"); goto error; } sys->who = who; msg_Info(intf, "Hello %s!", who); return VLC_SUCCESS; error: free(sys); return VLC_EGENERIC; } /** * Stops the interface. */ static void Close(vlc_object_t *obj) { intf_thread_t *intf = (intf_thread_t *)obj; intf_sys_t *sys = intf->p_sys; msg_Info(intf, "Good bye %s!", sys->who); /* Free internal state */ free(sys->who); free(sys); } 

ماكيفيلي
 LD = ld CC = cc PKG_CONFIG = pkg-config INSTALL = install CFLAGS = -g -O2 -Wall -Wextra LDFLAGS = LIBS = VLC_PLUGIN_CFLAGS := $(shell $(PKG_CONFIG) --cflags vlc-plugin) VLC_PLUGIN_LIBS := $(shell $(PKG_CONFIG) --libs vlc-plugin) VLC_PLUGIN_DIR := $(shell $(PKG_CONFIG) --variable=pluginsdir vlc-plugin) plugindir = $(VLC_PLUGIN_DIR)/misc override CC += -std=gnu99 override CPPFLAGS += -DPIC -I. -Isrc override CFLAGS += -fPIC override LDFLAGS += -Wl,-no-undefined,-z,defs override CPPFLAGS += -DMODULE_STRING=\"hello\" override CFLAGS += $(VLC_PLUGIN_CFLAGS) override LIBS += $(VLC_PLUGIN_LIBS) all: libhello_plugin.so install: all mkdir -p -- $(DESTDIR)$(plugindir) $(INSTALL) --mode 0755 libhello_plugin.so $(DESTDIR)$(plugindir) install-strip: $(MAKE) install INSTALL="$(INSTALL) -s" uninstall: rm -f $(plugindir)/libhello_plugin.so clean: rm -f -- libhello_plugin.so src/*.o mostlyclean: clean SOURCES = hello.c $(SOURCES:%.c=src/%.o): $(SOURCES:%.c=src/%.c) libhello_plugin.so: $(SOURCES:%.c=src/%.o) $(CC) $(LDFLAGS) -shared -o $@ $^ $(LIBS) .PHONY: all install install-strip uninstall clean mostlyclean 

أسهل طريقة لإنشاء مكون إضافي لنظام التشغيل Linux. للقيام بذلك ، تحتاج إلى تثبيت ، في الواقع ، مشغل وسائط VLC نفسه ، فضلاً عن الملفات والأدوات اللازمة لإنشاء المكون الإضافي. على Debian / Ubuntu ، يمكن القيام بذلك باستخدام الأمر التالي:

 sudo apt-get install vlc libvlc-dev libvlccore-dev gcc make pkg-config 

في الواقع ، كل شيء جاهز ، نقوم بجمع وتثبيت المكون الإضافي الخاص بنا باستخدام الأمر:

 sudo make install 

لاختبار البرنامج المساعد ، قم بتشغيل VLC أيضًا من وحدة التحكم:

 vlc 

لسوء الحظ ، لم نر أي " مرحبا العالم ". الشيء هو أن البرنامج المساعد يجب أولا تمكين. للقيام بذلك ، افتح الإعدادات ( أدوات > تفضيلات ) ، قم بالتبديل إلى العرض المتقدم (حدد الكل في مجموعة إعدادات العرض ) وتجد في الشجرة على اللوحة اليمنى واجهة > واجهات التحكم - حدد المربع بجوار المكون الإضافي Hello interface .



نقوم بحفظ الإعدادات وإعادة تشغيل VLC.



بناء البرنامج المساعد لنظام التشغيل Windows


مع Windows ، الأمور معقدة بعض الشيء. لإنشاء المكون الإضافي ، تحتاج إلى تنزيل ملف sdk ، الذي يحتوي على مكتبات وملفات رأسية وتكوينات VLC. في السابق ، كان sdk جزءًا من مجموعة VLC العادية ويمكن العثور عليه في مجلد تثبيت البرنامج. الآن يأتي كتجميع مشغل وسائط منفصل. على سبيل المثال ، بالنسبة إلى الإصدار 3.0.8 من VLC ، يمكن تنزيل هذا التجميع على الرابط ftp://ftp.videolan.org/pub/videolan/vlc/3.0.8/win64/vlc-3.0.8-win64.7z (من المهم تنزيل 7z --Secondary).

انسخ محتويات الأرشيف إلى مجلد ، على سبيل المثال ، إلى C: \ Projects . بالإضافة إلى sdk ، يحتوي الأرشيف أيضًا على مشغل الوسائط نفسه ، والذي يمكن استخدامه لاختبار المكونات الإضافية وتصحيحها.

بحيث يمكن استخدام Makefile لإنشاء وتثبيت المكون الإضافي ، تحتاج إلى إصلاح الملف C: \ Projects \ vlc-3.0.8 \ sdk \ lib \ pkgconfig \ vlc-plugin.pc ، مع الإشارة إلى المسار الصحيح لمجلد sdk في متغيرات البادئة و pluginsdir والمكونات الإضافية على التوالي:

 prefix=/c/Projects/vlc-3.0.8/sdk pluginsdir=/c/Projects/vlc-3.0.8/plugins 

للبناء تحت Windows ، نحتاج أيضًا إلى تثبيت مترجم وأدوات مساعدة أخرى. يمكن الحصول على جميع البرامج الضرورية عن طريق تثبيت بيئة MSYS2 . يحتوي موقع المشروع على تعليمات مفصلة للتركيب. باختصار ، مباشرة بعد التثبيت ، تحتاج إلى فتح وحدة التحكم ( C: \ msys64 \ msys2.exe ) وتحديث حزم MSYS2 باستخدام الأمر:

 pacman -Syu 

بعد ذلك ، أغلق نافذة المحطة الطرفية MSYS2 ، ثم افتحه مرة أخرى وقم بتشغيل الأمر

 pacman -Su 

بعد تحديث جميع الحزم ، تحتاج إلى تثبيت toolchain:

 pacman -S base-devel mingw-w64-x86_64-toolchain 

الآن وقد تم تثبيت جميع الحزم اللازمة ، يمكنك البدء في بناء البرنامج المساعد. قمت بتعديل Makefile قليلاً حتى يتمكن من إنشاء المكون الإضافي في نظامي التشغيل Linux و Windows. بالإضافة إلى ذلك ، اضطررت إلى إزالة بعض معلمات بناء MinGW غير المدعومة ، ونتيجة لذلك بدأ Makefile في الظهور بالشكل التالي:

Makefile لنظام التشغيل Windows
 LD = ld CC = cc PKG_CONFIG = pkg-config INSTALL = install CFLAGS = -g -O2 -Wall -Wextra LDFLAGS = LIBS = VLC_PLUGIN_CFLAGS := $(shell $(PKG_CONFIG) --cflags vlc-plugin) VLC_PLUGIN_LIBS := $(shell $(PKG_CONFIG) --libs vlc-plugin) VLC_PLUGIN_DIR := $(shell $(PKG_CONFIG) --variable=pluginsdir vlc-plugin) plugindir = $(VLC_PLUGIN_DIR)/misc override CC += -std=gnu99 override CPPFLAGS += -DPIC -I. -Isrc override CFLAGS += -fPIC override LDFLAGS += -Wl,-no-undefined override CPPFLAGS += -DMODULE_STRING=\"hello\" override CFLAGS += $(VLC_PLUGIN_CFLAGS) override LIBS += $(VLC_PLUGIN_LIBS) SUFFIX := so ifeq ($(OS),Windows_NT) SUFFIX := dll endif all: libhello_plugin.$(SUFFIX) install: all mkdir -p -- $(DESTDIR)$(plugindir) $(INSTALL) --mode 0755 libhello_plugin.$(SUFFIX) $(DESTDIR)$(plugindir) install-strip: $(MAKE) install INSTALL="$(INSTALL) -s" uninstall: rm -f $(plugindir)/libhello_plugin.$(SUFFIX) clean: rm -f -- libhello_plugin.$(SUFFIX) src/*.o mostlyclean: clean SOURCES = hello.c $(SOURCES:%.c=src/%.o): $(SOURCES:%.c=src/%.c) libhello_plugin.$(SUFFIX): $(SOURCES:%.c=src/%.o) $(CC) $(LDFLAGS) -shared -o $@ $^ $(LIBS) .PHONY: all install install-strip uninstall clean mostlyclean 

نظرًا لأن MSYS2 لا يعرف شيئًا عن sdk الخاص بـ VLC ، فأنت بحاجة إلى إضافة المسار إلى مجلد pkgconfig من هذا sdk إلى متغير البيئة PKG_CONFIG_PATH . افتح وحدة التحكم MinGW ( C: \ msys64 \ mingw64.exec ) وقم بتنفيذ الأوامر:

 export PKG_CONFIG_PATH=/c/projects/vlc-3.0.8/sdk/lib/pkgconfig:$PKG_CONFIG_PATH make install 

لاختبار البرنامج المساعد ، قم بتشغيل VLC أيضًا من وحدة التحكم:

 /c/projects/vlc-3.0.8/vlc 

كما في حالة نظام Linux ، انتقل إلى الإعدادات وقم بتشغيل المكون الإضافي الخاص بنا. نقوم بحفظ الإعدادات وإعادة تشغيل VLC.

تنفيذ البرنامج المساعد


لتنفيذ المكون الإضافي الخاص بي ، كنت بحاجة إلى فهم كيفية التحكم في مشغل الوسائط (تغيير مسار الصوت ، الترجيع) وكيفية التعامل مع أحداث ضغط المفاتيح في لوحة المفاتيح. لفهم كل هذا ، التفتت إلى الوثائق . أيضًا على الإنترنت ، عثرت على مقالتين شيقتين تسلط الضوء على بنية مشغل الوسائط: بنية إطار عمل VLC ووثائق API الخاصة بـ VLC media player .

يتكون VLC من عدد كبير من الوحدات المستقلة (400+). يجب أن تقدم كل وحدة معلومات عن نوع الوظيفة التي تنفذها ، وكذلك وظائف التهيئة / الانتهاء. هذه المعلومات موصوفة في كتلة vlc_module_begin () - vlc_module_end () باستخدام وحدات الماكرو set_capability () و set_callbacks () . وظائف تهيئة / إنهاء الوحدة النمطية (تسمى عادة فتح وإغلاق ) لها التوقيع التالي:

 static int Open(vlc_object_t *) static void Close(vlc_object_t *) 

vlc_object_t هو النوع الأساسي لتمثيل البيانات في VLC ، حيث يتم توريث جميع الآخرين منها (راجع المقال Object_Management ). يجب تحويل مؤشر إلى vlc_object_t إلى نوع بيانات محدد وفقًا للوظيفة التي تنفذها الوحدة. للتحكم في مشغل الوسائط ، قمت بتعيين قيمة الواجهة في الماكرو set_capability () . وفقًا لذلك ، في وظائف الفتح والإغلاق ، أحتاج إلى إرسال vlc_object_t إلى intf_thread_t .

ويستند التفاعل بين الوحدات النمطية إلى نمط تصميم المراقب . يوفر VLC آلية "متغيرات الكائنات" (انظر المتغيرات ) ، والتي يمكنك من خلالها إضافة المتغيرات إلى مثيلات النوع vlc_object_t (ومشتقاتها). يمكن للوحدات النمطية تبادل البيانات من خلال هذه المتغيرات. يمكنك أيضًا إرفاق دالة رد اتصال للمتغير ، والذي سيتم استدعاؤه عندما تتغير قيمة هذا المتغير.

على سبيل المثال ، ضع في اعتبارك الوحدة النمطية لـ Hotkeys ( الوحدات النمطية / control / hotkeys.c ) ، المسؤولة عن معالجة أحداث hotkey. في الدالة Open ، يتم تعليق وظيفة رد الفعل ActionEvent على متغير إجراء المفاتيح :

 var_AddCallback( p_intf->obj.libvlc, "key-action", ActionEvent, p_intf ); 

يتم تمرير مؤشر إلى vlc_object_t ، اسم متغير ، وظيفة رد اتصال ، ومؤشر يجب إبطاله إلى دالة var_AddCallback لتمرير بيانات عشوائية ، والتي يتم توجيهها بعد ذلك إلى وظيفة رد الاتصال المحددة. يظهر توقيع وظيفة رد الاتصال أدناه.

 static int ActionEvent(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *) 

يتم تمرير مؤشر إلى vlc_object_t ، اسم المتغير ، والقيم القديمة والجديدة لهذا المتغير (في هذه الحالة ، معرف مجموعة مفاتيح الاختصار المضغوطة المختصرة في الإجراء) ، وكذلك المؤشر إلى أي بيانات إضافية محددة عند إضافة وظيفة رد الاتصال ، يتم تمريرها إلى وظيفة رد الاتصال .

يتم تنفيذ المعالجة المباشرة لأحداث hotkey في وظيفة PutAction ، والتي تسمى داخل وظيفة رد الاتصال ActionEvent . تقبل وظيفة PutAction معرفًا لحدث الضغط على مجموعة من المفاتيح الساخنة ( i_action ) ، وبمساعدة مشغل التبديل ، تقوم بتنفيذ الإجراءات المقابلة.

على سبيل المثال ، حدث الترجيع يتوافق مع ACTIONID_JUMP_BACKWARD_SHORT . لتنفيذ الإجراء المقابل ، يؤخذ الفاصل الزمني الترجيع من إعدادات VLC (من حجم القفز القصير المتغير):

 mtime_t it = var_InheritInteger( p_input, varname ); 

لإرجاع الملف الذي يتم تشغيله ، ما عليك سوى تعيين متغير إزاحة الوقت على القيمة المقابلة للوقت (بالميكروثانية) التي تريد تحويل التشغيل بها:

 var_SetInteger( p_input, "time-offset", it * sign * CLOCK_FREQ ); 

للتقديم السريع ، تحتاج إلى تحديد قيمة موجبة ، للتراجع السريع - سالبة. يتم استخدام ثابت CLOCK_FREQ لتحويل الثواني إلى ميكروثانية.

وبالمثل ، يتغير مسار الصوت (حدث ACTIONID_AUDIO_TRACK ). يمكن فقط لمتغير الصوت المسؤول عن المسار الصوتي قبول مجموعة محدودة من القيم (وفقًا للمسارات الصوتية المتوفرة في الملف الجاري تشغيله). يمكنك الحصول على قائمة بالقيم المحتملة لمتغير باستخدام دالة var_Change () :

 vlc_value_t list, list2; var_Change( p_input, "audio-es", VLC_VAR_GETCHOICES, &list, &list2 ); 

بالإضافة إلى قائمة القيم ، تتيح لك هذه الوظيفة أيضًا الحصول على قائمة أوصاف هذه القيم (في هذه الحالة ، اسم المسارات الصوتية). الآن يمكننا تغيير المسار الصوتي باستخدام دالة var_Set () :

 var_Set( p_input, "audio-es", list.p_list->p_values[i] ); 

كيفية إدارة مشغل الوسائط الذي تم اكتشافه ، يبقى أن نتعلم كيفية التعامل مع أحداث لوحة المفاتيح. لسوء الحظ ، لم أستطع إضافة مفتاح الاختصار الجديد. جميع مفاتيح الاختصار هي hardcoded في رمز kernel VLC ( src / misc / Actions.c ). لذلك ، أضفت معالجًا لأحداث ضغط المفاتيح في لوحة المفاتيح ذات المستوى الأدنى ، وأعلق وظيفة رد الاتصال الخاصة بي لتغيير المتغير ذي الضغط على المفتاح :

 var_AddCallback( p_intf->obj.libvlc, "key-pressed", KeyboardEvent, p_intf ); 

المتغير ضغط المفتاح بتخزين رمز الحرف (في Unicode) المطابق لآخر مفتاح ضغط. على سبيل المثال ، عندما تضغط المفتاح بالرقم "1" ، سيتم تعيين المتغير بضغط المفتاح القيمة 49 (0x00000031 في نظام الرقم 16). يمكنك عرض رموز الأحرف الأخرى في unicode-table.com . بالإضافة إلى ذلك ، تأخذ قيمة المتغير المضغوطة في الاعتبار في الضغط على مفاتيح التعديل ، ويتم تخصيص البايت الهام الرابع لها. لذلك ، على سبيل المثال ، عندما تضغط على تركيبة المفاتيح " Ctrl + 1 " ، سيتم تعيين المتغير الذي يتم الضغط عليه بالمفتاح القيمة 0x 04 000031 (00000 1 00 00000000 00000000 00110001 2 ). للتوضيح ، يوضح الجدول أدناه معاني مجموعات المفاتيح المختلفة:
اختصار لوحة المفاتيحقيمة
Ctrl + 100000 1 00 00000000 00000000 00110001 2
البديل + 10000000 1 00000000 00000000 00110001 2
Ctrl + Alt + 100000 1 - 1 00000000 00000000 00110001 2
التحول + 1000000 1 0 00000000 00000000 00100001 2
انتبه إلى القيمة عند الضغط على مجموعة " Shift + 1 ". منذ في هذه الحالة " ! "، ثم تتوافق قيمة البايتة الأولى مع رمز هذا الحرف في Unicode (0x00000021).

يؤدي


اتصلت بالبرنامج المساعد TIP الخاص بي ، وهو اختصار لعبارة "ترجمها ، من فضلك" ، كما يمكن ترجمة النص إلى "تلميح". يتم نشر التعليمات البرمجية المصدر للمكون الإضافي على GitHub ، حيث يمكنك أيضًا تنزيل مجموعات المكونات الإضافية الجاهزة لنظامي التشغيل Windows و Linux.

لتثبيت المكوّن الإضافي ، يلزمك نسخ ملف libtip_plugin.dll (libtip_plugin.so لنظام التشغيل Linux) إلى مجلد <path-to-vlc> / plugins . في نظام Windows ، يتم تثبيت VLC عادةً في المجلد C: \ Program Files \ VideoLAN \ VLC . على نظام Linux ، يمكنك العثور على مجلد التثبيت باستخدام الأمر:

 whereis vlc 

في Ubuntu ، على سبيل المثال ، يتم تثبيت VLC في / usr / lib / x86_64-linux-gnu / vlc .

بعد ذلك ، ستحتاج إلى إعادة تشغيل VLC ، ثم في القائمة الرئيسية افتح أدوات > تفضيلات ، قم بالتبديل إلى العرض المتقدم (حدد الكل في مجموعة إظهار الإعدادات ) ، في اللوحة اليمنى ، انتقل إلى قسم الواجهة > عنصر التحكم وحدد المربع بجوار TIP (ترجمته ، من فضلك) . ثم مرة أخرى سوف تحتاج إلى إعادة تشغيل VLC.



في إعدادات المكوِّن الإضافي ، يمكنك تحديد أرقام المسارات الصوتية الرئيسية والمساعِدة (للترجمة) ، وكذلك الوقت (بالثواني) الذي سيعيد فيه المكوّن الإضافي التكرار مع المسار الصوتي الإضافي.



للتحكم في المكون الإضافي ، أضفت اختصارات لوحة المفاتيح التالية:

  • " / " للترجمة
  • " Shift + / " لتكرار جزء الفيديو المترجم مسبقًا باستخدام المسار الصوتي الرئيسي

أثناء تنفيذ أوامر الترجمة وإعادة المحاولة ، يعرض البرنامج المساعد رسائل "TIP: translate" و "TIP: تكرار" في الزاوية اليسرى العليا ، على التوالي.



من تجربتي في استخدام المكوّن الإضافي ، يمكنني القول ، بشكل عام ، أنني سعيد بالنتيجة. الشيء الرئيسي هو اختيار المحتوى المناسب ، إذا كان ما لا يقل عن نصف الخطاب الأجنبي المستخدم هناك مفهوم ، فإن البرنامج المساعد سيساعد في ترجمة الباقي. خلاف ذلك ، فإن البرنامج المساعد ربما يكون عديم الفائدة.

Source: https://habr.com/ru/post/ar475992/


All Articles