ما هو ملف PCM؟
PCM (Pulse-Code Modulation — تعديل الشفرة النبضية) هو الطريقة القياسية الأساسية لتمثيل إشارات الصوت التناظرية رقمياً. ابتُكرت الفكرة النظرية عام 1937 بواسطة Alec Reeves وطُبِّقت تجارياً في الثمانينيات مع انتشار الأقراص المضغوطة.
ملف PCM يحتوي على سلسلة من عينات رقمية — كل عينة تمثل سعة الموجة الصوتية في لحظة زمنية محددة — بدون أي ضغط أو ترويسة أو بيانات وصفية. هذه البساطة هي مزيتها وعيبها: البيانات جاهزة للمعالجة الفورية دون فك ضغط، لكنها تحتاج معرفة مسبقة بمعاملاتها (معدل العينة وعمق البت وعدد القنوات وترتيب البايتات) لتشغيلها صحيحاً. WAV و AIFF هما في الأساس PCM مُغلَّف في حاوية مع هذه المعاملات.
كيفية فتح ملفات PCM
- Audacity (ويندوز، ماك، لينكس) — استيراد بيانات خام عبر
File > Import > Raw Data - FFmpeg —
ffplay -f s16le -ar 44100 -ac 2 file.pcmللتشغيل المباشر - SoX (ويندوز، ماك، لينكس) —
sox -r 44100 -e signed -b 16 -c 2 input.pcm output.wav - Adobe Audition (ويندوز، ماك) — تحرير صوت احترافي مع استيراد خام
- Python SciPy/NumPy — قراءة مباشرة كمصفوفة أرقام للمعالجة
المواصفات التقنية
| الخاصية | القيمة |
|---|---|
| نوع MIME | audio/L16 (16-بت) أو audio/L8 (8-بت) |
| الضغط | بدون ضغط (عينات خام) |
| معدلات العينة الشائعة | 8 كيلوهرتز (هاتف)، 44.1 كيلوهرتز (CD)، 48 كيلوهرتز (فيديو)، 192 كيلوهرتز (احترافي) |
| عمق البت | 8 بت (unsigned)، 16 بت (signed)، 24 بت، 32 بت (float) |
| ترتيب البايتات | Little-endian (ويندوز) أو Big-endian (نادر) |
| القنوات | أحادي (1)، ستيريو (2)، أو أكثر |
| الحجم | معدل العينة × عمق البت × القنوات × الثواني ÷ 8 |
الاستخدامات الشائعة
- معالجة الإشارات الرقمية (DSP): البيانات الخام مدخل مباشر لخوارزميات الفلترة والتحليل الطيفي
- الأنظمة المدمجة: المتحكمات الدقيقة تُولّد وتستهلك PCM مباشرةً (ضربات القلب، المسجلات الرقمية)
- اتصالات الهاتف: بروتوكول G.711 المستخدم في شبكات الهاتف يُرسل PCM بـ 8 كيلوهرتز / 8 بت
- التسجيل الاحترافي: الواجهة الداخلية بين بطاقات الصوت وبرامج DAW
- بث الصوت في الشبكات: RTP (Real-time Transport Protocol) يحمل PCM في بث الصوت المباشر
- TTS و STT: محركات تحويل النص إلى كلام والعكس تُولّد وتعالج PCM
أوامر FFmpeg و SoX
# تشغيل PCM مباشرة (16-بت، ستيريو، 44.1 كيلوهرتز)
ffplay -f s16le -ar 44100 -ac 2 audio.pcm
# تحويل PCM إلى WAV
ffmpeg -f s16le -ar 44100 -ac 2 -i audio.pcm audio.wav
# تحويل WAV إلى PCM خام
ffmpeg -i audio.wav -f s16le -ar 44100 -ac 2 audio.pcm
# تسجيل صوت كـ PCM من الميكروفون
ffmpeg -f alsa -i default -f s16le -ar 16000 -ac 1 recording.pcm
# باستخدام SoX لتحويل وإضافة معاملات
sox -r 44100 -e signed-integer -b 16 -c 2 input.pcm output.wav
# قياس مستوى الصوت في ملف PCM
sox -r 44100 -e signed -b 16 -c 1 audio.pcm -n stat
مثال Python لمعالجة PCM
import numpy as np
import scipy.io.wavfile as wav
# قراءة ملف PCM كمصفوفة أرقام
sample_rate = 44100
channels = 2
dtype = np.int16 # 16-بت signed
with open('audio.pcm', 'rb') as f:
raw = f.read()
samples = np.frombuffer(raw, dtype=dtype)
if channels == 2:
samples = samples.reshape(-1, 2)
print(f"عدد العينات: {len(samples)}")
print(f"المدة: {len(samples) / sample_rate:.2f} ثانية")
# حفظ كـ WAV
wav.write('output.wav', sample_rate, samples)
نصيحة: PCM بدون ترويسة يعني أنك تحتاج حفظ معاملاته (sample rate، bit depth، channels) في مكان آخر. إذا كنت تُوزّع الملف، استخدم WAV بدلاً — يحتوي على نفس البيانات مع ترويسة RIFF تُعرِّف هذه المعاملات.