صدا/امپیتری audio/mp3
خواندن فریمها، سرآیندها و برچسبهای نرخ متغیر یک پرونده امپیتری.
واردسازی audio.mp3
پرونده امپیتری رشتهای از فریمهاست، هر یک با سرآیندی که میگوید چگونه رمز شده و چه اندازه دراز است. این بسته آن سرآیندها را میخواند، پس میتوانید بگویید پرونده چیست، چه اندازه میپاید، چند فریم دارد و یک ثانیه معین کجایش میافتد، همه بی کدگشایی هیچ صدایی.
همین هر چه فهرست یک کتابخانه، نوار جستن یک پخشکننده یا یک ویرایشگر برچسب میخواهد را میپوشاند. هر نگارش و لایه امپگ خوانده میشود، همراه با نرخهای نمونه نیم و یکچهارم امپگ دو و دوونیم، و سرآیندهای زینگ و اینفو و ویبیآرآی که میگویند پرونده با نرخ بیت گوناگون بهراستی چه اندازه دراز است.
دانستنیها
- کدگشایی صدا هنوز اینجا نیست. این بسته ساختار یک امپیتری را میخواند نه صدایش را، و
کدگشایی شدنیدر صدا.کدک همین را میگوید. کدگشایی لایه سه به جدولهای هافمن و ضریب مقیاس ایزو نیاز دارد، که کاری جداگانه و بسیار بزرگتر است. - به یک فریم تنها وقتی اعتماد میشود که فریم دیگری آنجا که میگوید باید باشد بیاید، و همین نمیگذارد
یافتن همگامیروی رشتهای از بایتهای 0xFF درون یک برچسب قفل کند. - شمار فریم در سرآیند زینگ، فریمی که خود سرآیند در آن نشسته را در بر نمیگیرد، پس پروندهای با ده فریم صدا شمرده یازده و پرسیده ده گزارش میشود.
- برای پرونده با نرخ بیت پایا، درازی فریم ضرب در نمونه در فریم است. برای گوناگون، تنها سرآیند زینگ میداند، و برای همین
بررسی امپیتریآن را ترجیح میدهد. - برچسبها کار صدا.برچسب صدا است، و این بسته برای یافتن جای آغاز صدا از آن بهره میگیرد.
گونهها
سرآیند Header
ساختار سرآیند| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| نگارش | version | صحیح = 0 | کدام نگارش امپگ، یکی از شمارههای نگارش. |
| لایه | layer | صحیح = 0 | کدام لایه، یکی از شمارههای لایه. |
| نرخ بیت | bitrate | صحیح = 0 | نرخ بیت به کیلوبیت در ثانیه. |
| نرخ | rate | صحیح = 0 | فریم در هر ثانیه. |
| کانال ها | channels | صحیح = 0 | چند کانال، درآمده از حالت. |
| حالت | mode | صحیح = 0 | حالت کانال، یکی از شمارههای حالت. |
| گسترش حالت | mode_ext | صحیح = 0 | گسترش حالت، که میگوید دوکاناله پیوسته چه میکند. |
| لایی | padding | صحیح = 0 | یک وقتی این فریم یک بایت افزوده با خود دارد تا میانگین نرخ بیت نگه داشته شود. |
| سیآرسی | crc | منطقی = نادرست | درست وقتی پس از سرآیند یک سیآرسی بیاید. |
| اندازه فریم | frame_size | صحیح = 0 | همه فریم چند بایت میگیرد، با لایی. |
| نمونهها | samples | صحیح = 0 | این فریم به چند فریم پیسیام کدگشایی میشود. |
واردسازی صدا
واردسازی صدا.امپیتری
واردسازی صدا.برچسب صدا
واردسازی فشرده سازی
تابع افزودن فریم(بافه &: فشرده سازی.بافر بایت، سر۱: صحیح، سر۲: صحیح، سر۳: صحیح، اندازه۳: صحیح):
فشرده سازی.افزودن بایت(بافه، 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، آگاهی۲)، آگاهی۲.یافت شد
فشرده سازی.آزادسازی بافر(یکم)
فشرده سازی.آزادسازی بافر(دوم)
فشرده سازی.آزادسازی بافر(آشغال)
پایانآگاهی نرخ متغیر VbrInfo
ساختار آگاهی نرخ متغیر| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| فریم ها | frames | صحیح = 0 | چند فریم صدا پس از آن میآید. فریم خود سرآیند شمرده نمیشود. |
| بایتها | bytes | صحیح = 0 | چند بایت صدا هست. |
| نرخ متغیر | vbr | منطقی = نادرست | درست برای سرآیند زینگ، که یعنی نرخ بیت گوناگون است. |
| کیفیت | quality | صحیح = 0 | شماره کیفیتی که کدگذار ثبت کرد. |
| درنگ | delay | صحیح = 0 | کدگذار چند نمونه در آغاز افزود، که پخش بیدرز باید بیندازدشان. |
| لایی پایانی | padding | صحیح = 0 | چند نمونه در پایان افزود. |
| یافت شد | found | منطقی = نادرست | درست وقتی چنین سرآیندی بهکل آنجا بوده باشد. |
نمونهی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam
پایاها و متغیرها
شمارههای نگارش امپگ Version…
| نام | انگلیسی | مقدار |
|---|---|---|
| نگارش دوونیم | Version25 | 0 |
| نگارش دو | Version2 | 2 |
| نگارش یک | Version1 | 3 |
نمونهی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam
شمارههای لایه Layer…
| نام | انگلیسی | مقدار |
|---|---|---|
| لایه یک | Layer1 | 3 |
| لایه دو | Layer2 | 2 |
| لایه سه | Layer3 | 1 |
نمونهی این مورد همراه با موارد بالاتر آمده است: mp3-Read.salam
شمارههای حالت کانال Mode…
| نام | انگلیسی | مقدار |
|---|---|---|
| حالت دوکاناله | ModeStereo | 0 |
| حالت پیوسته | ModeJoint | 1 |
| حالت دوگانه | ModeDual | 2 |
| حالت یککاناله | ModeMono | 3 |
نمونهی این مورد همراه با موارد بالاتر آمده است: 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