سالک: سوند دیوایس و scipy چیه
Deepseek:
سوند دیوایس (Sound Device) و SciPy دو مفهوم متفاوت در پردازش سیگنال و علم داده در پایتون هستند:
سوند دیوایس (Sound Device)
کتابخانهای برای کار با صوت در پایتون
کاربردها:
· ضبط و پخش صوت
· ارتباط مستقیم با کارت صوتی سیستم
· مناسب برای برنامههای real-time
نصب:
pip install sounddevice
مثال ساده:
import sounddevice as sd
import numpy as np
# تولید یک بوق ساده
duration = 1.0 # ثانیه
frequency = 440 # هرتز (نت لا)
t = np.linspace(0, duration, int(44100 * duration), False)
audio = 0.5 * np.sin(2 * np.pi * frequency * t)
# پخش صوت
sd.play(audio, samplerate=44100)
sd.wait() # منتظر پایان پخش بمان
```
SciPy (Scientific Python)
کتابخانه جامع برای محاسبات علمی
بخشهای اصلی:
1. scipy.signal - پردازش سیگنال
2. scipy.io - ورودی/خروجی (شامل فایلهای صوتی)
3. scipy.fft - تبدیل فوریه
4. scipy.optimize - بهینهسازی
5. بخشهای دیگر: آمار، جبر خطی، و ...
نصب:
pip install scipy
مثال با صوت در SciPy:
from scipy.io import wavfile
from scipy import signal
import numpy as np
# خواندن فایل صوتی
samplerate, data = wavfile.read('audio.wav')
# فیلتر کردن صدا
b, a = signal.butter(4, 1000/(samplerate/2), 'low')
filtered = signal.filtfilt(b, a, data)
# نوشتن فایل جدید
wavfile.write('filtered_audio.wav', samplerate, filtered.astype(np.int16))
```
تفاوت و ارتباط آنها
ویژگی SoundDevice SciPy
هدف اصلی ضبط/پخش real-time تحلیل و پردازش علمی
سرعت مناسب real-time بیشتر برای پردازش آفلاین
حجم کد سبکتر سنگینتر و جامع
وابستگی وابسته به PortAudio وابسته به NumPy
مثال ترکیبی (استفاده از هر دو):
import sounddevice as sd
import numpy as np
from scipy import signal
# ضبط صوت
duration = 5
fs = 44100
recording = sd.rec(int(duration * fs), samplerate=fs, channels=1)
sd.wait()
# پردازش با SciPy
# اعمال فیلتر نویز
b, a = signal.butter(5, [100, 3000], btype='band', fs=fs)
filtered = signal.filtfilt(b, a, recording[:, 0])
# پخش نتیجه
sd.play(filtered, fs)
sd.wait()
```
خلاصه:
· SoundDevice → برای تعامل مستقیم با سختافزار صوتی
· SciPy → برای تحلیل و پردازش پیشرفته سیگنال
اگر هدف شما ضبط/پخش ساده است، sounddevice کافی است. اما اگر نیاز به پردازش پیچیدهتر دارید، scipy.signal ابزارهای حرفهایتری ارائه میدهد.