کتابخانه‌ی استاندارد · کدگذاری و داده

صدا/ام‌پی‌تری audio/mp3

خواندن فریم‌ها، سرآیندها و برچسب‌های نرخ متغیر یک پرونده ام‌پی‌تری.

واردسازی audio.mp3

پرونده ام‌پی‌تری رشته‌ای از فریم‌هاست، هر یک با سرآیندی که می‌گوید چگونه رمز شده و چه اندازه دراز است. این بسته آن سرآیندها را می‌خواند، پس می‌توانید بگویید پرونده چیست، چه اندازه می‌پاید، چند فریم دارد و یک ثانیه معین کجایش می‌افتد، همه بی کدگشایی هیچ صدایی.

همین هر چه فهرست یک کتابخانه، نوار جستن یک پخش‌کننده یا یک ویرایشگر برچسب می‌خواهد را می‌پوشاند. هر نگارش و لایه ام‌پگ خوانده می‌شود، همراه با نرخ‌های نمونه نیم و یک‌چهارم ام‌پگ دو و دوونیم، و سرآیندهای زینگ و اینفو و وی‌بی‌آر‌آی که می‌گویند پرونده با نرخ بیت گوناگون به‌راستی چه اندازه دراز است.

دانستنی‌ها

  • کدگشایی صدا هنوز اینجا نیست. این بسته ساختار یک ام‌پی‌تری را می‌خواند نه صدایش را، و کدگشایی شدنی در صدا.کدک همین را می‌گوید. کدگشایی لایه سه به جدول‌های هافمن و ضریب مقیاس ایزو نیاز دارد، که کاری جداگانه و بسیار بزرگ‌تر است.
  • به یک فریم تنها وقتی اعتماد می‌شود که فریم دیگری آنجا که می‌گوید باید باشد بیاید، و همین نمی‌گذارد یافتن همگامی روی رشته‌ای از بایت‌های 0xFF درون یک برچسب قفل کند.
  • شمار فریم در سرآیند زینگ، فریمی که خود سرآیند در آن نشسته را در بر نمی‌گیرد، پس پرونده‌ای با ده فریم صدا شمرده یازده و پرسیده ده گزارش می‌شود.
  • برای پرونده با نرخ بیت پایا، درازی فریم ضرب در نمونه در فریم است. برای گوناگون، تنها سرآیند زینگ می‌داند، و برای همین بررسی ام‌پی‌تری آن را ترجیح می‌دهد.
  • برچسب‌ها کار صدا.برچسب صدا است، و این بسته برای یافتن جای آغاز صدا از آن بهره می‌گیرد.

گونه‌ها

ساختار سرآیند
آنچه سرآیند یک فریم صدای ام‌پگ می‌گوید.
نامانگلیسیگونهتوضیح
نگارشversionصحیح = 0کدام نگارش ام‌پگ، یکی از شماره‌های نگارش.
لایهlayerصحیح = 0کدام لایه، یکی از شماره‌های لایه.
نرخ بیتbitrateصحیح = 0نرخ بیت به کیلوبیت در ثانیه.
نرخrateصحیح = 0فریم در هر ثانیه.
کانال هاchannelsصحیح = 0چند کانال، درآمده از حالت.
حالتmodeصحیح = 0حالت کانال، یکی از شماره‌های حالت.
گسترش حالتmode_extصحیح = 0گسترش حالت، که می‌گوید دوکاناله پیوسته چه می‌کند.
لاییpaddingصحیح = 0یک وقتی این فریم یک بایت افزوده با خود دارد تا میانگین نرخ بیت نگه داشته شود.
سی‌آر‌سیcrcمنطقی = نادرستدرست وقتی پس از سرآیند یک سی‌آر‌سی بیاید.
اندازه فریمframe_sizeصحیح = 0همه فریم چند بایت می‌گیرد، با لایی.
نمونه‌هاsamplesصحیح = 0این فریم به چند فریم پی‌سی‌ام کدگشایی می‌شود.
mp3-Read.salam
واردسازی صدا
واردسازی صدا.ام‌پی‌تری
واردسازی صدا.برچسب صدا
واردسازی فشرده سازی

تابع افزودن فریم(بافه &: فشرده سازی.بافر بایت، سر۱: صحیح، سر۲: صحیح، سر۳: صحیح، اندازه۳: صحیح):
    فشرده سازی.افزودن بایت(بافه، 255)
    فشرده سازی.افزودن بایت(بافه، سر۱)
    فشرده سازی.افزودن بایت(بافه، سر۲)
    فشرده سازی.افزودن بایت(بافه، سر۳)
    ناپایا شمارنده := 4
    تا شمارنده کوچکتر اندازه۳:
        فشرده سازی.افزودن بایت(بافه، 0)
        شمارنده += 1
    پایان
پایان

تابع ریشه:
    ناپایا یکم := فشرده سازی.بافر بایت جدید()
    ناپایا شماره := 0
    تا شماره کوچکتر 3:
        افزودن فریم(یکم، 251، 144، 192، 417)
        شماره += 1
    پایان
    سرچاپ فشرده سازی.طول بافر(یکم)
    سرچاپ ام‌پی‌تری.ام‌پی‌تری است(یکم.data، یکم.len)، صدا.نام قالب(صدا.شناسایی قالب(یکم.data، یکم.len))
    سرچاپ برچسب صدا.آی‌دی۳ دو دارد(یکم.data، یکم.len)، ام‌پی‌تری.آغاز صدا(یکم.data، یکم.len)

    ناپایا سری := ام‌پی‌تری.سرآیند {}
    سرچاپ ام‌پی‌تری.خواندن سرآیند(یکم.data، یکم.len، 0، سری)
    سرچاپ سری.نگارش برابر ام‌پی‌تری.نگارش یک، سری.لایه برابر ام‌پی‌تری.لایه سه
    سرچاپ سری.نرخ، سری.نرخ بیت، سری.کانال ها، سری.حالت برابر ام‌پی‌تری.حالت یک‌کاناله
    سرچاپ سری.نمونه‌ها، سری.اندازه فریم، سری.لایی، سری.سی‌آر‌سی
    سرچاپ ام‌پی‌تری.شمار فریم‌ها(یکم.data، یکم.len)

    ناپایا درستی := نادرست
    اطلاع := ام‌پی‌تری.بررسی ام‌پی‌تری(یکم.data، یکم.len، درستی)
    سرچاپ درستی، اطلاع.نرخ، اطلاع.کانال ها، اطلاع.بیت ها، اطلاع.بی اتلاف
    سرچاپ اطلاع.فریم ها

    سرچاپ ام‌پی‌تری.فریم در(یکم.data، یکم.len، 0)، ام‌پی‌تری.فریم در(یکم.data، یکم.len، 1)
    سرچاپ ام‌پی‌تری.فریم در(یکم.data، یکم.len، 99)
    سرچاپ ام‌پی‌تری.جستن به ثانیه(یکم.data، یکم.len، 0.03) بزرگتربرابر 0
    ناپایا سرها := ام‌پی‌تری.سرآیندها(یکم.data، یکم.len)
    سرچاپ سرها.طول()، سرها.بگیر(0).نرخ، سرها.بگیر(2).نرخ بیت
    سرها.آزادکن()

    ناپایا دوم := فشرده سازی.بافر بایت جدید()
    ناپایا پی := 0
    تا پی کوچکتر 2:
        افزودن فریم(دوم، 243، 128، 0، 208)
        پی += 1
    پایان
    ناپایا سری۲ := ام‌پی‌تری.سرآیند {}
    سرچاپ ام‌پی‌تری.خواندن سرآیند(دوم.data، دوم.len، 0، سری۲)
    سرچاپ سری۲.نگارش برابر ام‌پی‌تری.نگارش دو، سری۲.نرخ، سری۲.کانال ها، سری۲.نمونه‌ها، سری۲.اندازه فریم
    سرچاپ ام‌پی‌تری.شمار فریم‌ها(دوم.data، دوم.len)

    سرچاپ ام‌پی‌تری.نمونه در فریم(ام‌پی‌تری.نگارش یک، ام‌پی‌تری.لایه سه)، ام‌پی‌تری.نمونه در فریم(ام‌پی‌تری.نگارش دو، ام‌پی‌تری.لایه سه)
    سرچاپ ام‌پی‌تری.نمونه در فریم(ام‌پی‌تری.نگارش دوونیم، ام‌پی‌تری.لایه سه)، ام‌پی‌تری.نمونه در فریم(ام‌پی‌تری.نگارش یک، ام‌پی‌تری.لایه یک)
    سرچاپ ام‌پی‌تری.نمونه در فریم(ام‌پی‌تری.نگارش یک، ام‌پی‌تری.لایه دو)
    سرچاپ ام‌پی‌تری.حالت دوکاناله، ام‌پی‌تری.حالت پیوسته، ام‌پی‌تری.حالت دوگانه، ام‌پی‌تری.حالت یک‌کاناله

    ناپایا آشغال := فشرده سازی.بافر بایت جدید()
    ناپایا جی := 0
    تا جی کوچکتر 32:
        فشرده سازی.افزودن بایت(آشغال، جی)
        جی += 1
    پایان
    سرچاپ ام‌پی‌تری.یافتن همگامی(آشغال.data، آشغال.len، 0)، ام‌پی‌تری.ام‌پی‌تری است(آشغال.data، آشغال.len)
    سرچاپ ام‌پی‌تری.شمار فریم‌ها(آشغال.data، آشغال.len)
    ناپایا خراب := ام‌پی‌تری.سرآیند {}
    سرچاپ ام‌پی‌تری.خواندن سرآیند(آشغال.data، آشغال.len، 0، خراب)
    ناپایا درستی۲ := نادرست
    ام‌پی‌تری.بررسی ام‌پی‌تری(آشغال.data، آشغال.len، درستی۲)
    سرچاپ درستی۲
    ناپایا آگاهی۲ := ام‌پی‌تری.آگاهی نرخ متغیر {}
    سرچاپ ام‌پی‌تری.خواندن آگاهی نرخ متغیر(یکم.data، یکم.len، آگاهی۲)، آگاهی۲.یافت شد

    فشرده سازی.آزادسازی بافر(یکم)
    فشرده سازی.آزادسازی بافر(دوم)
    فشرده سازی.آزادسازی بافر(آشغال)
پایان
خروجی1251 true mp3 false 0 true true true 44100 128 1 true 1152 417 0 false 3 true 44100 1 16 false 3456 0 417 -1 true 3 44100 128 true true 22050 2 576 208 2 1152 576 576 384 1152 0 1 2 3 -1 false 0 false false false false

آگاهی نرخ متغیر VbrInfo

ساختار آگاهی نرخ متغیر
آنچه سرآیند زینگ، اینفو یا وی‌بی‌آر‌آی درباره همه پرونده می‌گوید.
نامانگلیسیگونهتوضیح
فریم هاframesصحیح = 0چند فریم صدا پس از آن می‌آید. فریم خود سرآیند شمرده نمی‌شود.
بایت‌هاbytesصحیح = 0چند بایت صدا هست.
نرخ متغیرvbrمنطقی = نادرستدرست برای سرآیند زینگ، که یعنی نرخ بیت گوناگون است.
کیفیتqualityصحیح = 0شماره کیفیتی که کدگذار ثبت کرد.
درنگdelayصحیح = 0کدگذار چند نمونه در آغاز افزود، که پخش بی‌درز باید بیندازدشان.
لایی پایانیpaddingصحیح = 0چند نمونه در پایان افزود.
یافت شدfoundمنطقی = نادرستدرست وقتی چنین سرآیندی به‌کل آنجا بوده باشد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

پایاها و متغیرها

شماره‌های نگارش ام‌پگ Version…

سرآیند فریم کدام نگارش ام‌پگ را اعلام می‌کند.
نامانگلیسیمقدار
نگارش دوونیمVersion250
نگارش دوVersion22
نگارش یکVersion13

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

شماره‌های لایه Layer…

سرآیند فریم کدام لایه را اعلام می‌کند. پرونده ام‌پی‌تری لایه سه است.
نامانگلیسیمقدار
لایه یکLayer13
لایه دوLayer22
لایه سهLayer31

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

شماره‌های حالت کانال Mode…

فریم دو کانالش را چگونه به کار می‌برد.
نامانگلیسیمقدار
حالت دوکانالهModeStereo0
حالت پیوستهModeJoint1
حالت دوگانهModeDual2
حالت یک‌کانالهModeMono3

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

تابع‌ها

نمونه در فریم SamplesPerFrame

تابع نمونه در فریم(version: صحیح، layer: صحیح): صحیح
یک فریم ام‌پگ چند فریم پی‌سی‌ام دارد، که به نگارش و لایه بستگی دارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

خواندن سرآیند ParseHeader

تابع خواندن سرآیند(p: تهی*، n: صحیح، at: صحیح، out &: سرآیند): منطقی
یک سرآیند فریم را می‌خواند و اندازه‌اش را درمی‌آورد، یا می‌گوید این فریم نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

یافتن همگامی FindSync

تابع یافتن همگامی(p: تهی*، n: صحیح، from: صحیح): صحیح
فریم بعدی از یک جا، تایید شده با سنجیدن اینکه فریم دومی آنجا که نخستین می‌گوید می‌آید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

آغاز صدا AudioStart

تابع آغاز صدا(p: تهی*، n: صحیح): صحیح
نخستین فریم کجاست، پس از هر برچسب آی‌دی۳ دو.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

ام‌پی‌تری است IsMP3

تابع ام‌پی‌تری است(p: تهی*، n: صحیح): منطقی
درست وقتی این مانند ام‌پی‌تری بنماید: یک برچسب آی‌دی۳ دو، یا فریمی که درست از آب در بیاید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

شمار فریم‌ها CountFrames

تابع شمار فریم‌ها(p: تهی*، n: صحیح): صحیح
پرونده چند فریم دارد، با راه رفتن روی همه‌شان.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

خواندن آگاهی نرخ متغیر ReadVbrInfo

تابع خواندن آگاهی نرخ متغیر(p: تهی*، n: صحیح، out &: آگاهی نرخ متغیر): منطقی
سرآیند زینگ، اینفو یا وی‌بی‌آر‌آی را می‌خواند، که تنها راه کم‌هزینه دانستن درازی یک پرونده با نرخ بیت گوناگون است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

بررسی ام‌پی‌تری ProbeMP3

تابع بررسی ام‌پی‌تری(p: تهی*، n: صحیح، ok &: منطقی): audio.Info
هر چه یک فهرست می‌خواهد: نرخ، کانال‌ها، درازی و نرخ بیت، تنها از سرآیندها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

فریم در FrameAt

تابع فریم در(p: تهی*، n: صحیح، index: صحیح): صحیح
یک فریم با اندیس کجاست، یا منهای یک وقتی چنین فریمی نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

جستن به ثانیه SeekToSecond

تابع جستن به ثانیه(p: تهی*، n: صحیح، seconds: اعشار۶۴): صحیح
فریمی که یک زمان را می‌پوشاند کجاست، که این‌گونه از میانه پخش را آغاز می‌کنید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

سرآیندها Headers

تابع سرآیندها(p: تهی*، n: صحیح): وکتور<سرآیند>
هر سرآیند فریم، به ترتیب. وقتی کارتان تمام شد وکتور را آزاد کنید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam

بررسی پرونده ام‌پی‌تری ProbeFileMP3

تابع بررسی پرونده ام‌پی‌تری(path: رشته، ok &: منطقی): audio.Info
همان از یک مسیر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam