وعليكم السلام
يمكنك إنشاء برنامج في Visual Basic .NET يقوم بتسجيل الصوت من الميكروفون وحفظه في قاعدة بيانات Access وربط الصوت برقم معين لتشغيله لاحقًا. سأوضح لك خطوات بناء هذا البرنامج باستخدام NAudio للتسجيل الصوتي وحفظ الملفات الصوتية في قاعدة بيانات Access، ثم استرجاعها وتشغيلها بناءً على الرقم المدخل.
المتطلبات:
NAudio: مكتبة مفتوحة المصدر للتعامل مع الصوتيات في .NET.
يمكنك تثبيتها باستخدام NuGet عبر Visual Studio
قاعدة بيانات Access تحتوي على جدول لتخزين الملفات الصوتية.
خطوات التنفيذ:
1. إعداد قاعدة بيانات Access:
أنشئ قاعدة بيانات Access تحتوي على جدول يسمى AudioFiles، يحتوي على الأعمدة التالية:
ID (رقم، المفتاح الأساسي)
AudioData (نوع البيانات: OLE Object لتخزين الملف الصوتي)
Description (اختياري، لتخزين وصف للصوت)
2. واجهة المستخدم:
قم بإنشاء نموذج يحتوي على:
زر لبدء التسجيل: BtnRecord
زر لإيقاف التسجيل: BtnStop
زر لحفظ التسجيل: BtnSave
زر لتشغيل الصوت: BtnPlay
صندوق نص لإدخال الرقم: TxtAudioID
3. الكود البرمجي:
المكتبات اللازمة:
PHP كود :
Imports NAudio.Wave
Imports System.Data.OleDb
Imports System.IO
متغيرات عامة للتسجيل:
PHP كود :
Private waveIn As WaveInEvent
Private waveFile As WaveFileWriter
Private tempFilePath As String = Path.Combine(Path.GetTempPath(), "tempAudio.wav")
Private connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\YourDatabase.accdb;"
تسجيل الصوت:
PHP كود :
Private Sub BtnRecord_Click(sender As Object, e As EventArgs) Handles BtnRecord.Click
waveIn = New WaveInEvent()
AddHandler waveIn.DataAvailable, AddressOf OnDataAvailable
waveFile = New WaveFileWriter(tempFilePath, waveIn.WaveFormat)
waveIn.StartRecording()
End Sub
Private Sub BtnStop_Click(sender As Object, e As EventArgs) Handles BtnStop.Click
waveIn.StopRecording()
waveIn.Dispose()
waveFile.Dispose()
End Sub
Private Sub OnDataAvailable(sender As Object, e As WaveInEventArgs)
waveFile.Write(e.Buffer, 0, e.BytesRecorded)
End Sub
حفظ الصوت في قاعدة البيانات:
PHP كود :
Private Sub BtnSave_Click(sender As Object, e As EventArgs) Handles BtnSave.Click
Dim audioData As Byte() = File.ReadAllBytes(tempFilePath)
Dim audioID As Integer = Integer.Parse(TxtAudioID.Text)
Using connection As New OleDbConnection(connectionString)
connection.Open()
Dim command As New OleDbCommand("INSERT INTO AudioFiles (ID, AudioData) VALUES (@ID, @AudioData)", connection)
command.Parameters.AddWithValue("@ID", audioID)
command.Parameters.AddWithValue("@AudioData", audioData)
command.ExecuteNonQuery()
End Using
MessageBox.Show("Audio saved successfully!")
End Sub
تشغيل الصوت المرتبط برقم معين:
PHP كود :
Private Sub BtnPlay_Click(sender As Object, e As EventArgs) Handles BtnPlay.Click
Dim audioID As Integer = Integer.Parse(TxtAudioID.Text)
Using connection As New OleDbConnection(connectionString)
connection.Open()
Dim command As New OleDbCommand("SELECT AudioData FROM AudioFiles WHERE ID = @ID", connection)
command.Parameters.AddWithValue("@ID", audioID)
Dim audioData As Byte() = DirectCast(command.ExecuteScalar(), Byte())
If audioData IsNot Nothing Then
Dim tempAudioPath As String = Path.Combine(Path.GetTempPath(), "tempAudioToPlay.wav")
File.WriteAllBytes(tempAudioPath, audioData)
Dim waveOut As New WaveOutEvent()
Dim audioFileReader As New AudioFileReader(tempAudioPath)
waveOut.Init(audioFileReader)
waveOut.Play()
Else
MessageBox.Show("No audio found for this ID.")
End If
End Using
End Sub
شرح الكود:
عند الضغط على "Record" يتم بدء تسجيل الصوت باستخدام NAudio ويُحفظ مؤقتًا في ملف tempAudio.wav.
عند الضغط على "Stop" يتوقف التسجيل، وتتم معالجة الملف المؤقت.
عند الضغط على "Save"، يتم قراءة محتوى الملف الصوتي وتحويله إلى Byte[]، ثم حفظه في قاعدة البيانات تحت رقم معين.
عند الضغط على "Play"، يتم جلب الملف الصوتي المرتبط بالرقم المدخل من قاعدة البيانات وتشغيله.
نصائح إضافية:
تأكد من إعداد قاعدة البيانات بشكل صحيح، واستخدام مسار قاعدة البيانات في connectionString.
استخدم واجهة المستخدم للتحكم في الإدخال بشكل مريح.