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

صدا/فلاک audio/flac

فشرده‌سازی بی‌اتلاف: خواندن و نوشتن فلاک.

واردسازی audio.flac

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

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

دانستنی‌ها

  • بی‌اتلاف یعنی بی‌اتلاف: یک قطعه در هشت، شانزده یا بیست و چهار بیت بیت به بیت باز می‌گردد. بازبینی فلاک آن را روی یک پرونده با کدگشایی دوباره ثابت می‌کند.
  • کدگذاری تنها به خوبی قطعه‌ای است که به آن داده شده. قطعه عمق بیتی از خود ندارد تا چیزی بیت ها را بگذارد، و کدگذار آنگاه شانزده را می‌پندارد.
  • برچسب‌ها اینجا نیستند. فلاک آنها را در بلوک فراداده نگه می‌دارد، که صدا.برچسب صدا می‌خواند و می‌نویسد.
  • بلوک‌ها وکتوری پس می‌دهد که باید آزادش کنید، و سرآیند جریان ام‌دی۵ای دارد که باید با آزادسازی آگاهی جریان رهایش کنید.
  • فشرده‌سازی به‌تمامی به مایه بستگی دارد. یک نوا به یک‌پنجم اندازه پی‌سی‌امش می‌رود، نوفه تقریبا جم نمی‌خورد، و موسیقی راستین جایی نزدیک نیم می‌نشیند.

گونه‌ها

آگاهی فریم FrameInfo

ساختار آگاهی فریم
آنچه سرآیند یک فریم می‌گوید، که می‌تواند با سرآیند جریان ناهمسان باشد.
نامانگلیسیگونهتوضیح
اندازه بلوکblock_sizeصحیح = 0این بلوک چند فریم دارد.
نرخrateصحیح = 0فریم در هر ثانیه.
کانال هاchannelsصحیح = 0این فریم چند کانال با خود دارد.
بیت هاbitsصحیح = 0بیت برای هر نمونه.
واگذاریassignmentصحیح = 0کانال‌ها چگونه نگه داشته شده‌اند: جدا، یا چپ و کناری، راست و کناری یا میانی و کناری.
ناپایدارvariableمنطقی = نادرستدرست وقتی فریم با نمونه شماره خورده باشد نه با فریم.
شمارهnumberصحیح۶۴ = 0این فریم از کدام شماره فریم یا نمونه آغاز می‌شود.
flac-Read.salam
واردسازی صدا
واردسازی صدا.فلاک
واردسازی صدا.صداساز
واردسازی فشرده سازی

تابع ریشه:
    منبع := صداساز.نوا(440.0، 0.1، 44100، صداساز.موج سینوسی)
    ناپایا کوانت := صدا.به بیت(منبع، 16)
    کوانت.بیت ها = 16
    رمزی := فلاک.کدگذاری فلاک(کوانت)
    سرچاپ فلاک.فلاک است(رمزی.data، رمزی.len)، فلاک.فلاک است(رمزی.data، 4)
    سرچاپ صدا.نام قالب(صدا.شناسایی قالب(رمزی.data، رمزی.len))

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

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

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

    ناپایا درستی := نادرست
    برگشته := فلاک.کدگشایی فلاک(رمزی.data، رمزی.len، درستی)
    سرچاپ درستی، برگشته.فریم ها، برگشته.کانال ها، برگشته.بیت ها
    سرچاپ صدا.نمونه(برگشته، 100، 0) برابر صدا.نمونه(کوانت، 100، 0)

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

    سرچاپ فلاک.بیشینه کانال، فلاک.بیشینه اندازه بلوک
    ناپایا آشغال := فشرده سازی.بافر بایت جدید()
    فشرده سازی.افزودن بایت(آشغال، 1)
    سرچاپ فلاک.سی‌آر‌سی۸(آشغال.data، 0، 0)، فلاک.سی‌آر‌سی۱۶ بافر(آشغال، 0، 1) برابر فلاک.سی‌آر‌سی۱۶(آشغال.data، 0، 1)
    ناپایا خراب := نادرست
    فلاک.کدگشایی فلاک(آشغال.data، آشغال.len، خراب)
    سرچاپ خراب

    فلاک.آزادسازی آگاهی جریان(آگاهی)
    بلوکها.آزادکن()
    فشرده سازی.آزادسازی بافر(رمزی)
    فشرده سازی.آزادسازی بافر(آشغال)
    صدا.آزادسازی(منبع)
    صدا.آزادسازی(کوانت)
    صدا.آزادسازی(برگشته)
پایان
خروجیtrue false flac 1 true true 34 true 44100 1 16 4410 16 42 4096 4096 true 1 16 44100 4096 true 4410 1 16 true true 44100 1 16 4410 true 8 65535 0 true false

آگاهی جریان StreamInfo

ساختار آگاهی جریان
آنچه یک جریان فلاک از خودش می‌گوید، خوانده از نخستین بلوک فرادادهٔ آن.
نامانگلیسیگونهتوضیح
کمینه بلوکmin_blockصحیح = 0کوچک‌ترین بلوکی که کدگذار به کار برد.
بیشینه بلوکmax_blockصحیح = 0بزرگ‌ترین بلوکی که به کار برد.
کمینه فریمmin_frameصحیح = 0کوچک‌ترین فریم به بایت، یا صفر وقتی نامشخص است.
بیشینه فریمmax_frameصحیح = 0بزرگ‌ترین فریم به بایت.
نرخrateصحیح = 0فریم در هر ثانیه.
کانال هاchannelsصحیح = 0چند کانال.
بیت هاbitsصحیح = 0بیت برای هر نمونه، از چهار تا سی و دو.
شمار کلtotalصحیح۶۴ = 0همه جریان چند فریم دارد، یا صفر وقتی کدگذار نمی‌دانست.
ام‌دی۵md5compress.ByteBufام‌دی۵ سیگنال کدگشایی‌شده، شانزده بایت. با آزادسازی آگاهی جریان رهایش کنید.
جای صداaudio_offsetصحیح = 0نخستین فریم صدا از کجا آغاز می‌شود، پس از هر بلوک فراداده.

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

بلوک فرا MetaBlock

ساختار بلوک فرا
یک بلوک فراداده: از چه گونه است و بدنه‌اش کجاست.
نامانگلیسیگونهتوضیح
گونهkindصحیح = 0کدام شماره بلوک است.
جابجاییoffsetصحیح = 0بدنه از کجا آغاز می‌شود.
اندازهsizeصحیح = 0بدنه چند بایت دارد.
آخرینlastمنطقی = نادرستدر بلوک پایانی پیش از صدا درست است.

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

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

بلوک پیش‌فرض DefaultBlock

پایا بلوک پیش‌فرض: صحیح۳۲ = 4096
اندازه بلوکی که کدگذار به کار می‌برد مگر سطحی دیگری بخواهد.
flac-Write.salam
واردسازی صدا
واردسازی صدا.فلاک
واردسازی صدا.صداساز
واردسازی فشرده سازی
واردسازی مسیر پرونده
واردسازی حافظه
واردسازی سیستم عامل

تابع ریشه:
    منبع := صداساز.نوا(440.0، 0.2، 44100، صداساز.موج سینوسی)
    ناپایا نوایی := صدا.به بیت(منبع، 16)
    نوایی.بیت ها = 16
    خامی := نوایی.فریم ها * نوایی.کانال ها * 2
    سرچاپ نوایی.فریم ها، خامی

    رمزی := فلاک.کدگذاری فلاک(نوایی)
    سرچاپ فشرده سازی.طول بافر(رمزی) کوچکتر خامی / 2
    سرچاپ فلاک.بازبینی فلاک(رمزی.data، رمزی.len)
    سرچاپ فلاک.بلوک پیش‌فرض

    ناپایا درستی := نادرست
    برگشته := فلاک.کدگشایی فلاک(رمزی.data، رمزی.len، درستی)
    ناپایا بیشینه := 0.0
    ناپایا شمارنده := 0
    تا شمارنده کوچکتر نوایی.فریم ها:
        فرق := صدا.نمونه(برگشته، شمارنده، 0) - صدا.نمونه(نوایی، شمارنده، 0)
        اگر فرق بزرگتر بیشینه:
            بیشینه = فرق
        پایان
        اگر 0.0 - فرق بزرگتر بیشینه:
            بیشینه = 0.0 - فرق
        پایان
        شمارنده += 1
    پایان
    سرچاپ بیشینه

    هر سطح در [0، 5، 8]:
        یکی := فلاک.کدگذاری فلاک با سطح(نوایی، سطح)
        سرچاپ سطح، فشرده سازی.طول بافر(یکی) بزرگتر 42، فلاک.بازبینی فلاک(یکی.data، یکی.len)
        فشرده سازی.آزادسازی بافر(یکی)
    پایان
    سرچاپ فشرده سازی.طول بافر(فلاک.کدگذاری فلاک(صدا.قطعه {}))

    نشانی := مسیر پرونده.پیوند(سیستم عامل.پوشه موقت()، "salam_flac_example.flac")
    دیرکن حافظه.آزادسازی(نشانی برگردان تهی*)
    سرچاپ فلاک.ذخیره فلاک(نوایی، نشانی)
    ناپایا درستی۲ := نادرست
    دیسکی := فلاک.بازکردن فلاک(نشانی، درستی۲)
    سرچاپ درستی۲، دیسکی.فریم ها برابر نوایی.فریم ها، دیسکی.بیت ها
    سرچاپ فلاک.ذخیره فلاک با سطح(نوایی، نشانی، 8)
    ناپایا درستی۳ := نادرست
    اطلاع := فلاک.بررسی پرونده فلاک(نشانی، درستی۳)
    سرچاپ درستی۳، اطلاع.فریم ها
    ناپایا رفته := نادرست
    نبود := مسیر پرونده.پیوند(سیستم عامل.پوشه موقت()، "salam_flac_none.flac")
    دیرکن حافظه.آزادسازی(نبود برگردان تهی*)
    فلاک.بازکردن فلاک(نبود، رفته)
    سرچاپ رفته

    فشرده سازی.آزادسازی بافر(رمزی)
    صدا.آزادسازی(منبع)
    صدا.آزادسازی(نوایی)
    صدا.آزادسازی(برگشته)
    صدا.آزادسازی(دیسکی)
پایان
خروجی8820 17640 true true 4096 0 0 true true 5 true true 8 true true 0 true true true 16 true true 8820 false

شماره‌های بلوک Block…

گونه‌های بلوک فراداده که پرونده فلاک می‌تواند پیش از صدایش داشته باشد.
نامانگلیسیمقدار
بلوک آگاهی جریانBlockStreamInfo0
بلوک لاییBlockPadding1
بلوک برنامهBlockApplication2
بلوک جدول جستنBlockSeekTable3
بلوک یادداشت وربیسBlockVorbisComment4
بلوک برگه نشانهBlockCueSheet5
بلوک تصویرBlockPicture6

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

بیشینه اندازه بلوک MaxBlockSize

پایا بیشینه اندازه بلوک: صحیح۳۲ = 65535
بزرگ‌ترین بلوکی که فلاک می‌پذیرد.

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

بیشینه کانال MaxChannels

پایا بیشینه کانال: صحیح۳۲ = 8
بیشترین کانالی که فلاک می‌پذیرد.

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

تابع‌ها

کدگذاری فلاک با سطح EncodeFLACLevel

تابع کدگذاری فلاک با سطح(c: audio.Clip، level: صحیح): compress.ByteBuf
قطعه را به شکل فلاک در سطحی از صفر تا هشت کدگذاری می‌کند. سطح اندازه بلوک را برمی‌گزیند؛ هر سطح بی‌اتلاف است.

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

کدگذاری فلاک EncodeFLAC

تابع کدگذاری فلاک(c: audio.Clip): compress.ByteBuf
قطعه را به شکل فلاک در سطح میانی کدگذاری می‌کند.

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

بازبینی فلاک VerifyFLAC

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

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

خواندن سرآیند فریم ReadFrameHeader

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

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

کدگشایی فلاک DecodeFLAC

تابع کدگشایی فلاک(p: تهی*، n: صحیح، ok &: منطقی): audio.Clip
یک جریان فلاک کامل را از حافظه به قطعه کدگشایی می‌کند. زیرفریم‌های پایا، واژه‌به‌واژه، ثابت و ال‌پی‌سی همه پشتیبانی می‌شوند، همچنین باقیمانده‌های رایس و گریخته و هر چهار واگذاری کانال.

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

سی‌آر‌سی۸ CRC8

تابع سی‌آر‌سی۸(p: تهی*، off: صحیح، n: صحیح): صحیح
سی‌آر‌سی۸ای که فلاک در پایان هر سرآیند فریم می‌گذارد، با چندجمله‌ای 0x07.

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

سی‌آر‌سی۱۶ CRC16

تابع سی‌آر‌سی۱۶(p: تهی*، off: صحیح، n: صحیح): صحیح
سی‌آر‌سی۱۶ای که فلاک در پایان هر فریم می‌گذارد، با چندجمله‌ای 0x8005.

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

سی‌آر‌سی۱۶ بافر CRC16Buf

تابع سی‌آر‌سی۱۶ بافر(b: compress.ByteBuf، off: صحیح، n: صحیح): صحیح
همان سی‌آر‌سی۱۶ روی یک بافر بایت.

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

فلاک است IsFLAC

تابع فلاک است(p: تهی*، n: صحیح): منطقی
درست وقتی این بایت‌ها با عدد جادویی fLaC آغاز شوند.

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

بلوک‌ها Blocks

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

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

خواندن آگاهی جریان ReadStreamInfo

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

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

آزادسازی آگاهی جریان FreeStreamInfo

تابع آزادسازی آگاهی جریان(si &: آگاهی جریان)
ام‌دی۵ای که سرآیند جریان نگه می‌دارد را رها می‌کند.

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

بررسی فلاک ProbeFLAC

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

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

بازکردن فلاک OpenFLAC

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

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

بررسی پرونده فلاک ProbeFileFLAC

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

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

ذخیره فلاک SaveFLAC

تابع ذخیره فلاک(c: audio.Clip، path: رشته): منطقی
قطعه را در پرونده فلاک می‌نویسد.

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

ذخیره فلاک با سطح SaveFLACLevel

تابع ذخیره فلاک با سطح(c: audio.Clip، path: رشته، level: صحیح): منطقی
قطعه را با سطحی که برمی‌گزینید در پرونده فلاک می‌نویسد.

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