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

صدا/ویو audio/wav

خواندن و نوشتن پرونده‌های ویو: پی‌سی‌ام، اعشاری، ای‌لا و میولا.

واردسازی audio.wav

ویو قالبی است که وقتی نباید چیزی از دست برود به آن رو می‌آورید. ظرفی ریف است که تکه fmt در آن می‌گوید نمونه‌ها چه‌اند و تکه data خودشان را نگه می‌دارد، و این بسته آن را بی هیچ کتابخانه بیرونی می‌خواند و می‌نویسد.

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

دانستنی‌ها

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

گونه‌ها

قالب Format

ساختار قالب
آنچه تکه fmt یک پرونده ویو می‌گوید: کدام کدک، چند کانال، نرخ و عمق.
نامانگلیسیگونهتوضیح
کدکcodecصحیح = 0نمونه‌ها کدام کدک را به کار می‌برند، یکی از شماره‌های کدک.
کانال هاchannelsصحیح = 0چند کانال.
نرخrateصحیح = 0فریم در هر ثانیه.
بیت هاbitsصحیح = 0بیت برای هر نمونه.
همترازی بلوکblock_alignصحیح = 0یک فریم چند بایت می‌گیرد.
نرخ بایتbyte_rateصحیح = 0بایت در هر ثانیه صدا.
wav-Read.salam
واردسازی صدا
واردسازی صدا.ویو
واردسازی فشرده سازی

تابع ریشه:
    ناپایا کلیپ := صدا.جدید(22050، 2، 100)
    صدا.تنظیم نمونه(کلیپ، 7، 1، 0.5)
    بافه := ویو.کدگذاری ویو با بیت(کلیپ، 24)
    سرچاپ ویو.ویو است(بافه.data، بافه.len)، ویو.ویو است(بافه.data، 4)
    ناپایا شکل := ویو.قالب {}
    سرچاپ ویو.خواندن قالب(بافه.data، بافه.len، شکل)
    سرچاپ شکل.کدک برابر ویو.کدک پی‌سی‌ام، شکل.کانال ها، شکل.نرخ، شکل.بیت ها، شکل.همترازی بلوک، شکل.نرخ بایت
    فهرست := ویو.تکه‌ها(بافه.data، بافه.len)
    سرچاپ فهرست.طول()
    ناپایا یکتکه := ویو.تکه {}
    سرچاپ ویو.یافتن تکه(بافه.data، بافه.len، ویو.برچسب("data")، یکتکه)، یکتکه.جابجایی، یکتکه.اندازه
    ناپایا گم := ویو.تکه {}
    سرچاپ ویو.یافتن تکه(بافه.data، بافه.len، ویو.برچسب("cue ")، گم)
    ناپایا درستی := نادرست
    آگاه := ویو.بررسی ویو(بافه.data، بافه.len، درستی)
    سرچاپ درستی، آگاه.نرخ، آگاه.کانال ها، آگاه.بیت ها، آگاه.فریم ها، آگاه.بی اتلاف
    ناپایا درستی۲ := نادرست
    برگشته := ویو.کدگشایی ویو(بافه.data، بافه.len، درستی۲)
    سرچاپ درستی۲، برگشته.فریم ها، برگشته.بیت ها، صدا.نمونه(برگشته، 7، 1)
    فشرده سازی.آزادسازی بافر(بافه)
    صدا.آزادسازی(کلیپ)
پایان
خروجیtrue false true true 2 22050 24 6 132300 2 true 44 600 false true 22050 2 24 100 true true 100 24 0.5

تکه Chunk

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

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

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

شماره‌های کدک Codec…

شماره‌های کدکی که تکه fmt یک ویو می‌تواند با خود داشته باشد.
نامانگلیسیمقدار
کدک پی‌سی‌امCodecPCM1
کدک اعشاریCodecFloat3
کدک ای‌لاCodecALaw6
کدک میولاCodecMuLaw7
کدک گسترش‌پذیرCodecExtensible65534
wav-Law.salam
واردسازی صدا
واردسازی صدا.ویو
واردسازی فشرده سازی
واردسازی ریاضی

تابع ریشه:
    سرچاپ صدا.پی‌سی‌ام به میولا(0)، صدا.میولا به پی‌سی‌ام(صدا.پی‌سی‌ام به میولا(0))
    سرچاپ صدا.پی‌سی‌ام به میولا(16000)، صدا.میولا به پی‌سی‌ام(144)
    سرچاپ صدا.پی‌سی‌ام به ای‌لا(16000)، صدا.ای‌لا به پی‌سی‌ام(186)
    سرچاپ صدا.پی‌سی‌ام به ای‌لا(0)، صدا.ای‌لا به پی‌سی‌ام(213)

    ناپایا نزدیک := 0
    ناپایا دورتر := 0
    ناپایا مقدار := -32768
    تا مقدار کوچکتر 32768:
        فرق := ریاضی.قدرمطلق صحیح(صدا.میولا به پی‌سی‌ام(صدا.پی‌سی‌ام به میولا(مقدار)) - مقدار)
        اگر ریاضی.قدرمطلق صحیح(مقدار) کوچکتربرابر 256:
            اگر فرق بزرگتر نزدیک:
                نزدیک = فرق
            پایان
        پایان
        اگر فرق بزرگتر دورتر:
            دورتر = فرق
        پایان
        مقدار += 7
    پایان
    سرچاپ نزدیک، دورتر

    ناپایا کلیپ := صدا.جدید(8000، 2، 50)
    صدا.تنظیم نمونه(کلیپ، 10، 0، 0.5)
    میو := ویو.کدگذاری میولا(کلیپ)
    ایل := ویو.کدگذاری ای‌لا(کلیپ)
    سرچاپ فشرده سازی.طول بافر(میو)، فشرده سازی.طول بافر(ایل)، فشرده سازی.طول بافر(ویو.کدگذاری ویو با بیت(کلیپ، 16))
    ناپایا درستی := نادرست
    برگشته := ویو.کدگشایی ویو(میو.data، میو.len، درستی)
    سرچاپ درستی، برگشته.فریم ها، برگشته.کانال ها، برگشته.بیت ها
    سرچاپ ریاضی.قدرمطلق(صدا.نمونه(برگشته، 10، 0) - 0.5) کوچکتر 0.01
    فشرده سازی.آزادسازی بافر(میو)
    فشرده سازی.آزادسازی بافر(ایل)
    صدا.آزادسازی(کلیپ)
پایان
خروجی255 0 144 15996 186 16128 213 8 11 644 144 144 244 true 50 2 8 false

تابع‌ها

کدگذاری ویو با بیت EncodeWAVBits

تابع کدگذاری ویو با بیت(c: audio.Clip، bits: صحیح): compress.ByteBuf
قطعه را با عمقی که برمی‌گزینید کدگذاری می‌کند، یکی از هشت، شانزده، بیست و چهار یا سی و دو.
wav-Write.salam
واردسازی صدا
واردسازی صدا.ویو
واردسازی فشرده سازی
واردسازی مسیر پرونده
واردسازی حافظه
واردسازی سیستم عامل

تابع ریشه:
    ناپایا کلیپ := صدا.جدید(8000، 1، 100)
    صدا.تنظیم نمونه(کلیپ، 0، 0، 0.5)
    صدا.تنظیم نمونه(کلیپ، 1، 0، -0.25)
    سرچاپ فشرده سازی.طول بافر(ویو.کدگذاری ویو با بیت(کلیپ، 8))، فشرده سازی.طول بافر(ویو.کدگذاری ویو با بیت(کلیپ، 16))
    سرچاپ فشرده سازی.طول بافر(ویو.کدگذاری ویو با بیت(کلیپ، 24))، فشرده سازی.طول بافر(ویو.کدگذاری ویو با بیت(کلیپ، 32))
    سرچاپ فشرده سازی.طول بافر(ویو.کدگذاری ویو اعشاری(کلیپ))
    سرچاپ فشرده سازی.طول بافر(ویو.کدگذاری ویو(کلیپ))
    کلیپ.بیت ها = 24
    سرچاپ فشرده سازی.طول بافر(ویو.کدگذاری ویو(کلیپ))
    سرچاپ فشرده سازی.طول بافر(ویو.کدگذاری ویو با بیت(کلیپ، 12))، فشرده سازی.طول بافر(ویو.کدگذاری ویو(صدا.قطعه {}))

    نشانی := مسیر پرونده.پیوند(سیستم عامل.پوشه موقت()، "salam_wav_write.wav")
    دیرکن حافظه.آزادسازی(نشانی برگردان تهی*)
    سرچاپ ویو.ذخیره ویو با بیت(کلیپ، نشانی، 24)
    ناپایا درستی := نادرست
    دیسکی := ویو.بازکردن ویو(نشانی، درستی)
    سرچاپ درستی، دیسکی.فریم ها، دیسکی.بیت ها، صدا.نمونه(دیسکی، 0، 0)، صدا.نمونه(دیسکی، 1، 0)
    ناپایا درستی۲ := نادرست
    آگاه := ویو.بررسی پرونده ویو(نشانی، درستی۲)
    سرچاپ درستی۲، آگاه.فریم ها، آگاه.بیت ها

    نشانیف := مسیر پرونده.پیوند(سیستم عامل.پوشه موقت()، "salam_wav_write_f32.wav")
    دیرکن حافظه.آزادسازی(نشانیف برگردان تهی*)
    سرچاپ ویو.ذخیره ویو اعشاری(کلیپ، نشانیف)
    ناپایا درستی۳ := نادرست
    دیسکف := ویو.بازکردن ویو(نشانیف، درستی۳)
    سرچاپ درستی۳، دیسکف.بیت ها، صدا.نمونه(دیسکف، 1، 0)

    ناپایا رفته := نادرست
    نبود := مسیر پرونده.پیوند(سیستم عامل.پوشه موقت()، "salam_wav_nope.wav")
    دیرکن حافظه.آزادسازی(نبود برگردان تهی*)
    ویو.بازکردن ویو(نبود، رفته)
    سرچاپ رفته
    صدا.آزادسازی(کلیپ)
پایان
خروجی144 244 344 444 444 244 344 0 0 true true 100 24 0.5 -0.25 true 100 24 true true 32 -0.25 false

کدگذاری ویو EncodeWAV

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

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

کدگذاری ویو اعشاری EncodeWAVFloat

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

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

کدگذاری میولا EncodeMuLaw

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

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

کدگذاری ای‌لا EncodeALaw

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

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

ذخیره ویو با بیت SaveWAVBits

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

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

ذخیره ویو SaveWAV

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

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

ذخیره ویو اعشاری SaveWAVFloat

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

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

برچسب Tag

تابع برچسب(s: رشته): صحیح
نام چهار حرفی یک تکه مثل data را در عددی می‌بندد که تکه با خود دارد.

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

ویو است IsWAV

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

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

تکه‌ها Chunks

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

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

یافتن تکه FindChunk

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

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

خواندن قالب ReadFormat

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

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

بررسی ویو ProbeWAV

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

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

کدگشایی ویو DecodeWAV

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

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

بازکردن ویو OpenWAV

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

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

بررسی پرونده ویو ProbeFileWAV

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

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