سگمنت فایل صوتی بر حسب کلمات - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

سگمنت فایل صوتی بر حسب کلمات

0 امتیاز
سلام.

فرض کنید فایل صوتی داریم که در آن چندین کلمه گفته شده بین کلمات نیز یک سکوت 2 ثانیه ای وجود داره چطور میشه کلمات را سگمنت کنم و در فایلی مجزا ذخیره کنم؟
سوال شده شهریور 16, 1400  بوسیله ی tara_s (امتیاز 140)   3 15 20

1 پاسخ

+1 امتیاز
 
بهترین پاسخ
برای تقسیم‌بندی یک فایل صوتی به فایل‌های جداگانه برای تک تک کلمات گفتاری، می‌توانید از الگوریتم Voice Activity Detection (VAD) برای تشخیص شروع و پایان هر کلمه بر اساس وجود یا عدم وجود گفتار استفاده کنید. در اینجا خلاصه ای از مراحلی است که می توانید دنبال کنید:
 
1- فایل صوتی را در یک ابزار پردازش سیگنال دیجیتال مانند MATLAB یا Python بارگذاری کنید و سیگنال صوتی را استخراج کنید.
 
2- سیگنال صوتی را از قبل پردازش کنید تا هرگونه نویز را حذف کنید و صدا را عادی کنید.
 
3- از یک الگوریتم VAD برای تشخیص وجود یا عدم وجود گفتار در سیگنال صوتی استفاده کنید. یک روش رایج برای این کار VAD مبتنی بر انرژی است که انرژی سیگنال صوتی را محاسبه کرده و آن را با آستانه مقایسه می‌کند. وقتی انرژی بالاتر از آستانه باشد، گفتار وجود دارد و وقتی انرژی زیر آستانه باشد، گفتار غایب در نظر گرفته می شود.
 
4-از نتایج VAD برای تقسیم سیگنال صوتی به کلمات جداگانه استفاده کنید. به عنوان مثال، اگر گفتار از زمان t1 تا زمان t2 تشخیص داده شود، و 2 ثانیه سکوت بین t2 و t3 وجود داشته باشد، می توانید سیگنال t1 تا t2 را به عنوان یک کلمه جداگانه در نظر بگیرید.
 
5- با استفاده از فرمت فایلی مانند WAV یا MP3، هر کلمه را به عنوان یک فایل صوتی جداگانه ذخیره کنید.
 
توجه: دقت الگوریتم VAD می تواند تحت تأثیر عواملی مانند سطح نویز، میزان صدا و صدای گوینده باشد. ممکن است لازم باشد با الگوریتم‌ها یا تنظیمات VAD مختلف آزمایش کنید تا بهترین نتایج را برای فایل صوتی خاص خود به دست آورید.
 
در اینجا مثالی از نحوه پیاده سازی مراحل ذکر شده در بالا در پایتون آورده شده است:
import librosa
import numpy as np

# Load the audio file
filename = "example.wav"
signal, sr = librosa.load(filename, sr=None)

# Pre-process the audio signal
signal = librosa.effects.normalize(signal)

# Define a threshold for the energy-based VAD
threshold = np.mean(signal**2) * 0.5

# Calculate the energy of the audio signal
energy = librosa.feature.rms(y=signal)

# Detect the presence or absence of speech based on the energy
vad = energy[0] > threshold

# Find the start and end of each word
start = np.where(np.diff(vad) == 1)[0]
end = np.where(np.diff(vad) == -1)[0]

# Loop over each word and save it as a separate audio file
for i, (s, e) in enumerate(zip(start, end)):
    word = signal[s:e]
    librosa.output.write_wav("word_{}.wav".format(i), word, sr)

 

توجه: این کد از کتابخانه librosa برای بارگذاری فایل صوتی، پیش پردازش سیگنال صوتی و محاسبه انرژی استفاده می کند. همچنین از کتابخانه numpy برای انجام عملیات ریاضی روی سیگنال صوتی استفاده می کند. اگر قبلاً این کتابخانه ها را ندارید، ممکن است نیاز به نصب داشته باشید.

پاسخ داده شده بهمن 10, 1401 بوسیله ی toopak (امتیاز 2,458)   16 48 66
انتخاب شد شهریور 8, 1402 بوسیله ی farnoosh
...