صدا/فلاک audio/flac
فشردهسازی بیاتلاف: خواندن و نوشتن فلاک.
واردسازی audio.flac
فلاک بیاتلاف است: آنچه بیرون میآید درست همان است که درون رفت، و پرونده بیشتر وقتها کمی بیش از نیم اندازه همان صدا به شکل پیسیام شانزده بیتی است. این بسته آن را بی هیچ کتابخانه بیرونی میخواند و مینویسد.
کدگشا همه قالب را پشتیبانی میکند: زیرفریمهای پایا، واژهبهواژه، پیشبین ثابت و الپیسی، باقیماندههای رمزشده با رایس و گریخته، و هر چهار راهی که فلاک میتواند یک جفت دوکاناله را میان دو کانال بخش کند. کدگذار زیرفریمهای پایا، واژهبهواژه و پیشبین ثابت را مینویسد و برای هر بلوک کوچکترین را برمیگزیند، که بیشتر فشردهسازی از همان جا میآید.
دانستنیها
- بیاتلاف یعنی بیاتلاف: یک قطعه در هشت، شانزده یا بیست و چهار بیت بیت به بیت باز میگردد.
بازبینی فلاکآن را روی یک پرونده با کدگشایی دوباره ثابت میکند. - کدگذاری تنها به خوبی قطعهای است که به آن داده شده. قطعه عمق بیتی از خود ندارد تا چیزی
بیت هارا بگذارد، و کدگذار آنگاه شانزده را میپندارد. - برچسبها اینجا نیستند. فلاک آنها را در بلوک فراداده نگه میدارد، که صدا.برچسب صدا میخواند و مینویسد.
بلوکهاوکتوری پس میدهد که باید آزادش کنید، و سرآیند جریان امدی۵ای دارد که باید باآزادسازی آگاهی جریانرهایش کنید.- فشردهسازی بهتمامی به مایه بستگی دارد. یک نوا به یکپنجم اندازه پیسیامش میرود، نوفه تقریبا جم نمیخورد، و موسیقی راستین جایی نزدیک نیم مینشیند.
گونهها
آگاهی فریم FrameInfo
ساختار آگاهی فریم| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| اندازه بلوک | block_size | صحیح = 0 | این بلوک چند فریم دارد. |
| نرخ | rate | صحیح = 0 | فریم در هر ثانیه. |
| کانال ها | channels | صحیح = 0 | این فریم چند کانال با خود دارد. |
| بیت ها | bits | صحیح = 0 | بیت برای هر نمونه. |
| واگذاری | assignment | صحیح = 0 | کانالها چگونه نگه داشته شدهاند: جدا، یا چپ و کناری، راست و کناری یا میانی و کناری. |
| ناپایدار | variable | منطقی = نادرست | درست وقتی فریم با نمونه شماره خورده باشد نه با فریم. |
| شماره | number | صحیح۶۴ = 0 | این فریم از کدام شماره فریم یا نمونه آغاز میشود. |
واردسازی صدا
واردسازی صدا.فلاک
واردسازی صدا.صداساز
واردسازی فشرده سازی
تابع ریشه:
منبع := صداساز.نوا(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، خراب)
سرچاپ خراب
فلاک.آزادسازی آگاهی جریان(آگاهی)
بلوکها.آزادکن()
فشرده سازی.آزادسازی بافر(رمزی)
فشرده سازی.آزادسازی بافر(آشغال)
صدا.آزادسازی(منبع)
صدا.آزادسازی(کوانت)
صدا.آزادسازی(برگشته)
پایانآگاهی جریان StreamInfo
ساختار آگاهی جریان| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| کمینه بلوک | min_block | صحیح = 0 | کوچکترین بلوکی که کدگذار به کار برد. |
| بیشینه بلوک | max_block | صحیح = 0 | بزرگترین بلوکی که به کار برد. |
| کمینه فریم | min_frame | صحیح = 0 | کوچکترین فریم به بایت، یا صفر وقتی نامشخص است. |
| بیشینه فریم | max_frame | صحیح = 0 | بزرگترین فریم به بایت. |
| نرخ | rate | صحیح = 0 | فریم در هر ثانیه. |
| کانال ها | channels | صحیح = 0 | چند کانال. |
| بیت ها | bits | صحیح = 0 | بیت برای هر نمونه، از چهار تا سی و دو. |
| شمار کل | total | صحیح۶۴ = 0 | همه جریان چند فریم دارد، یا صفر وقتی کدگذار نمیدانست. |
| امدی۵ | md5 | compress.ByteBuf | امدی۵ سیگنال کدگشاییشده، شانزده بایت. با آزادسازی آگاهی جریان رهایش کنید. |
| جای صدا | audio_offset | صحیح = 0 | نخستین فریم صدا از کجا آغاز میشود، پس از هر بلوک فراداده. |
نمونهی این مورد همراه با موارد بالاتر آمده است: flac-Read.salam
بلوک فرا MetaBlock
ساختار بلوک فرا| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| گونه | kind | صحیح = 0 | کدام شماره بلوک است. |
| جابجایی | offset | صحیح = 0 | بدنه از کجا آغاز میشود. |
| اندازه | size | صحیح = 0 | بدنه چند بایت دارد. |
| آخرین | last | منطقی = نادرست | در بلوک پایانی پیش از صدا درست است. |
نمونهی این مورد همراه با موارد بالاتر آمده است: flac-Read.salam
پایاها و متغیرها
بلوک پیشفرض DefaultBlock
پایا بلوک پیشفرض: صحیح۳۲ = 4096واردسازی صدا
واردسازی صدا.فلاک
واردسازی صدا.صداساز
واردسازی فشرده سازی
واردسازی مسیر پرونده
واردسازی حافظه
واردسازی سیستم عامل
تابع ریشه:
منبع := صداساز.نوا(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")
دیرکن حافظه.آزادسازی(نبود برگردان تهی*)
فلاک.بازکردن فلاک(نبود، رفته)
سرچاپ رفته
فشرده سازی.آزادسازی بافر(رمزی)
صدا.آزادسازی(منبع)
صدا.آزادسازی(نوایی)
صدا.آزادسازی(برگشته)
صدا.آزادسازی(دیسکی)
پایانشمارههای بلوک Block…
| نام | انگلیسی | مقدار |
|---|---|---|
| بلوک آگاهی جریان | BlockStreamInfo | 0 |
| بلوک لایی | BlockPadding | 1 |
| بلوک برنامه | BlockApplication | 2 |
| بلوک جدول جستن | BlockSeekTable | 3 |
| بلوک یادداشت وربیس | BlockVorbisComment | 4 |
| بلوک برگه نشانه | BlockCueSheet | 5 |
| بلوک تصویر | BlockPicture | 6 |
نمونهی این مورد همراه با موارد بالاتر آمده است: 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: صحیح): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: flac-Read.salam
سیآرسی۱۶ CRC16
تابع سیآرسی۱۶(p: تهی*، off: صحیح، n: صحیح): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: flac-Read.salam
سیآرسی۱۶ بافر CRC16Buf
تابع سیآرسی۱۶ بافر(b: compress.ByteBuf، off: صحیح، n: صحیح): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: flac-Read.salam
فلاک است IsFLAC
تابع فلاک است(p: تهی*، n: صحیح): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: 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