القائمة الرئيسية

الصفحات

كيفية برمجة تطبيق تسجيل صوت باستخدام Python Tkinter

How-to-code-voice-recording-app-in-Python-Tkinter، voice recording app، How to code voice recording app ing Python Tkinter، تطبيق لتسجيل الصوت، برمجة تطبيق لتسجيل الصوت، برمجة تطبيق، تسجيل الصوت، برمجة تطبيق تسجيل صوت بسيط باستخدام Python و Tkinter و Sounddevice، برمجة تطبيق تسجيل صوت Python، تطوير تطبيق تسجيل صوت Tkinter، إنشاء برنامج تسجيل صوت بسيط Python، واجهة مستخدم تسجيل صوت Tkinter، تسجيل الصوت بالمايكروفون Python، حفظ ملف صوتي Python، إيقاف التسجيل Python، عرض مدة التسجيل Python، اختيار تنسيق التسجيل Python، نشر تطبيق Tkinter Python، تحويل برنامج Python إلى ملف تنفيذي، توزيع تطبيق تسجيل صوت Python، كيفية برمجة تطبيق تسجيل صوت باستخدام Python Tkinter، تطبيق لتسجيل الصوت، إنشاء برنامج تسجيل صوت بسيط Python، Sounddevice، Python، Tkinter،




كيفية برمجة تطبيق تسجيل صوت باستخدام Python Tkinter 



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

* ملاحظة هامة : لتسجيل الصوت وتشغيله، سنستخدم مكتبة sounddevice التي
 تعتمد على مكتبات صوتية نظام التشغيل (مثل PortAudio).
 تأكد من تثبيت sounddevice وربما مكتبة صوتية مناسبة لنظامك إذا لزم الأمر:
pip install sounddevice soundfile
--

خطوات برمجة تطبيق تسجيل صوت بسيط باستخدام Python Tkinter 


خطوات برمجة تطبيق تسجيل صوت باستخدام Python Tkinter و Sounddevice

الخطوة 1: إعداد بيئة التطوير وتثبيت المكتبات

تأكد من تثبيت Python على جهازك. ثم قم بتثبيت مكتبة Tkinter
 (عادة ما تأتي مع Python) ومكتبتي sounddevice و soundfile:
pip install sounddevice soundfile
--

أنشئ ملف Python جديدًا باسم audio_recorder.py.

الخطوة 2: استيراد المكتبات وتهيئة التطبيق

في ملف audio_recorder.py، ابدأ باستيراد المكتبات الضرورية وتهيئة نافذة Tkinter:




Python

import tkinter as tk
from tkinter import filedialog, messagebox
import sounddevice as sd
import soundfile as sf
import time
import threading

class AudioRecorder:
    def __init__(self, master):
        self.master = master
        master.title("مسجل الصوت البسيط")

        self.recording = False
        self.start_time = 0
        self.filename = ""
        self.audio_data = []
        self.samplerate = 44100  # معدل أخذ العينات القياسي
        self.channels = 1        # تسجيل أحادي
        self.filetype = 'WAV'    # تنسيق الملف الافتراضي

        self.create_widgets()


--

الخطوة 3: إنشاء واجهة المستخدم (Widgets)

قم بإنشاء العناصر المرئية للتحكم في التسجيل :




Python

    def create_widgets(self):
        self.record_button = tk.Button(self.master, text="تسجيل", command=self.start_recording)
        self.record_button.pack(pady=10)

        self.stop_button = tk.Button(self.master, text="إيقاف", command=self.stop_recording, state=tk.DISABLED)
        self.stop_button.pack(pady=5)

        self.duration_label = tk.Label(self.master, text="المدة: 00:00")
        self.duration_label.pack(pady=5)

        self.filetype_label = tk.Label(self.master, text="التنسيق:")
        self.filetype_label.pack()
        self.filetype_var = tk.StringVar(self.master)
        self.filetype_var.set(self.filetype) # القيمة الافتراضية
        self.filetype_menu = tk.OptionMenu(self.master, self.filetype_var, 'WAV', 'FLAC', 'OGG')
        self.filetype_menu.pack()

        self.save_button = tk.Button(self.master, text="حفظ", command=self.save_file, state=tk.DISABLED)
        self.save_button.pack(pady=10)

        self.is_recording_label = tk.Label(self.master, text="", fg="red")
        self.is_recording_label.pack()

    def update_duration(self):
        if self.recording:
            elapsed_time = int(time.time() - self.start_time)
            minutes = elapsed_time // 60
            seconds = elapsed_time % 60
            self.duration_label.config(text=f"المدة: {minutes:02d}:{seconds:02d}")
            self.master.after(1000, self.update_duration)


--

الخطوة 4: وظيفة بدء التسجيل




تبدأ عملية تسجيل الصوت من الميكروفون :




Python

    def start_recording(self):
        self.recording = True
        self.start_time = time.time()
        self.audio_data = []
        self.filetype = self.filetype_var.get()

        self.record_button.config(state=tk.DISABLED)
        self.stop_button.config(state=tk.NORMAL)
        self.save_button.config(state=tk.DISABLED)
        self.is_recording_label.config(text="جاري التسجيل...")

        self.recording_thread = threading.Thread(target=self._record_audio)
        self.recording_thread.start()
        self.update_duration()

    def _record_audio(self):
        try:
            with sd.InputStream(samplerate=self.samplerate, channels=self.channels, callback=self._audio_callback):
                while self.recording:
                    time.sleep(0.1)
        except sd.PortAudioError as e:
            messagebox.showerror("خطأ في الصوت", f"حدث خطأ في جهاز الصوت: {e}")
            self.stop_recording()


--

الخطوة 5: وظيفة معالجة بيانات الصوت أثناء التسجيل

يتم استدعاء هذه الدالة بشكل دوري لتلقي دفعات من بيانات الصوت :
Python

    def _audio_callback(self, indata, frames, time, status):
        if status:
            print(f"Error in audio stream: {status}")
        if self.recording:
            self.audio_data.append(indata.copy())
--

الخطوة 6: وظيفة إيقاف التسجيل

توقف عملية تسجيل الصوت :
Python

    def stop_recording(self):
        self.recording = False
        self.record_button.config(state=tk.NORMAL)
        self.stop_button.config(state=tk.DISABLED)
        self.save_button.config(state=tk.NORMAL)
        self.is_recording_label.config(text="")
--

الخطوة 7: وظيفة حفظ الملف الصوتي

تسمح للمستخدم بحفظ التسجيل في ملف :




Python

    def save_file(self):
        self.filename = filedialog.asksaveasfilename(
            defaultextension=f".{self.filetype.lower()}",
            filetypes=[(f"{self.filetype} files", f"*.{self.filetype.lower()}"), ("All files", "*.*")]
        )
        if self.filename:
            try:
                audio_np_array = np.concatenate(self.audio_data, axis=0)
                sf.write(self.filename, audio_np_array, self.samplerate, format=self.filetype)
                messagebox.showinfo("تم الحفظ", f"تم حفظ التسجيل بنجاح في: {self.filename}")
                self.save_button.config(state=tk.DISABLED)
            except Exception as e:
                messagebox.showerror("خطأ في الحفظ", f"حدث خطأ أثناء حفظ الملف: {e}")


--

* ملاحظة : ستحتاج إلى استيراد مكتبة numpy للتعامل مع مصفوفات الصوت:
import numpy as np
--

الخطوة 8: إنشاء النافذة الرئيسية وتشغيل التطبيق

أضف الكود لإنشاء نافذة Tkinter وتشغيل تطبيق مسجل الصوت :
Python

if __name__ == "__main__":
    root = tk.Tk()
    recorder = AudioRecorder(root)
    root.mainloop()
--

الخطوة 9: نشر التطبيق

لنشر تطبيق Tkinter يعتمد على مكتبات خارجية مثل 
sounddevice و soundfile و numpy، يمكنك اتباع عدة طرق :
* توزيع الكود المصدري مع تعليمات التثبيت : يمكن للمستخدمين الذين 
لديهم Python و Tkinter و sounddevice و soundfile و numpy مثبتين
 تشغيل ملف audio_recorder.py مباشرة. قم بتضمين تعليمات مفصلة لتثبيت هذه المكتبات.
* إنشاء ملف تنفيذي باستخدام PyInstaller : يمكن لـ PyInstaller تجميع
 برنامج Python وجميع تبعياته في ملف تنفيذي واحد قابل للتوزيع لأنظمة
 تشغيل مختلفة (Windows، macOS، Linux). قد تحتاج إلى بعض
 التكوين الإضافي لتضمين المكتبات الخارجية بشكل صحيح.

* التثبيت :
pip install pyinstaller
--
إنشاء الملف التنفيذي: انتقل إلى المجلد الذي يحتوي على ملف
 audio_recorder.py وقم بتشغيل :

pyinstaller --onefile audio_recorder.py --hidden-import sounddevice --hidden-import soundfile --hidden-import numpy
--

سيتم إنشاء الملف التنفيذي في مجلد dist. قد تحتاج إلى تجربة خيارات 
إضافية لضمان تضمين جميع المكتبات والملفات التابعة بشكل صحيح.

* استخدام cx_Freeze : 
بديل آخر لـ PyInstaller لإنشاء ملفات تنفيذية. 
قد يتطلب أيضًا بعض التكوين لتضمين المكتبات الخارجية.

* التثبيت :
pip install cx_Freeze
--
إنشاء ملف الإعداد (setup.py): قم بإنشاء ملف setup.py 
يتضمن المكتبات المطلوبة في قائمة packages :
Python

import cx_Freeze
import sys

base = None
if sys.platform == "win32":
    base = "Win32GUI"

cx_Freeze.setup(
    name="SimpleAudioRecorder",
    version="0.1",
    description="تطبيق تسجيل صوت بسيط باستخدام Python Tkinter و Sounddevice",
    executables=[cx_Freeze.Executable("audio_recorder.py", base=base)],
    packages=["tkinter", "sounddevice", "soundfile", "numpy"]
)
--

* بناء الملف التنفيذي :
python setup.py build
--
سيتم إنشاء الملفات القابلة للتوزيع في مجلد build.

* الخلاصة :

لقد تعلمت الآن كيفية برمجة تطبيق بسيط لتسجيل الصوت باستخدام Python Tkinter
 ومكتبتي sounddevice و soundfile. قمنا بإنشاء واجهة مستخدم أساسية، 
ودمجنا وظائف بدء وإيقاف التسجيل، وعرض مدة التسجيل، و حفظ الملف الصوتي، 
وإمكانية اختيار تنسيق التسجيل. كما تناولنا كيفية نشر التطبيق.
 يمكنك الآن تطوير هذا التطبيق بإضافة المزيد من الميزات مثل عرض مستوى الصوت،
 وتشغيل التسجيلات المحفوظة، وتعديل معدل أخذ العينات والقنوات، وتحسين
 واجهة المستخدم. تذكر أن نشر التطبيقات التي تعتمد على مكتبات صوتية قد 
يتطلب بعض الجهد الإضافي لضمان تضمين جميع المكتبات والملفات التابعة بشكل صحيح.
 استمر في التجربة والتطوير!

 

جدول المحتويات