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

صدا/برچسب صدا audio/tag

خواندن و نوشتن برچسب‌های یک ترانه: عنوان، هنرمند، آلبوم و تصویر جلد.

واردسازی audio.tag

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

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

دانستنی‌ها

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

گونه‌ها

برچسب‌ها Tags

ساختار برچسب‌ها
آنچه پرونده از موسیقی درونش می‌گوید: چه کسی ساخت، نامش چیست و یک تصویر.
نامانگلیسیگونهتوضیح
عنوانtitleرشته = ""عنوان قطعه.
هنرمندartistرشته = ""چه کسی اجرا کرد.
آلبومalbumرشته = ""به کدام آلبوم وابسته است.
هنرمند آلبومalbumartistرشته = ""آلبوم به نام چه کسی است، که مجموعه‌ها به آن نیاز دارند.
آهنگسازcomposerرشته = ""چه کسی نوشت.
سبکgenreرشته = ""چه گونه موسیقی است.
یادداشتcommentرشته = ""یادداشتی آزاد.
ترانهlyricsرشته = ""واژه‌ها.
گونه هنرart_mimeرشته = ""گونه رسانه تصویر جلد، مثل image/jpeg.
سالyearصحیح = 0سال، یا صفر وقتی نیست.
شماره قطعهtrackصحیح = 0این چندمین قطعه است.
شمار قطعه‌هاtracksصحیح = 0آلبوم چند قطعه دارد.
شماره دیسکdiscصحیح = 0این چندمین دیسک است.
ضربانbpmصحیح = 0ضربه در دقیقه، آن‌گونه که برچسب می‌گوید.
هنرartcompress.ByteBufخود تصویر جلد، هنوز در هر قالبی که نگه داشته شده بود. آن را به تصویر.کدگشایی بدهید.
tag-Id3.salam
واردسازی صدا.برچسب صدا
واردسازی فشرده سازی
واردسازی رشته

تابع ریشه:
    ناپایا برچسبم := برچسب صدا.برچسب‌های جدید()
    سرچاپ برچسب صدا.برچسب دارد(برچسبم)
    برچسبم.عنوان = رشته.رونوشت("Shiraz Nights")
    برچسبم.هنرمند = رشته.رونوشت("Darya")
    برچسبم.آلبوم = رشته.رونوشت("Zagros")
    برچسبم.سبک = رشته.رونوشت("Folk")
    برچسبم.سال = 2026
    برچسبم.شماره قطعه = 3
    برچسبم.شمار قطعه‌ها = 12
    سرچاپ برچسب صدا.برچسب دارد(برچسبم)

    نگارش۱ := برچسب صدا.نوشتن آی‌دی۳ یک(برچسبم)
    سرچاپ فشرده سازی.طول بافر(نگارش۱)
    ناپایا پرونده۱ := فشرده سازی.بافر بایت جدید()
    ناپایا لایه := 0
    تا لایه کوچکتر 32:
        فشرده سازی.افزودن بایت(پرونده۱، 0)
        لایه += 1
    پایان
    فشرده سازی.افزودن بافر(پرونده۱، نگارش۱)
    سرچاپ برچسب صدا.آی‌دی۳ یک دارد(پرونده۱.data، پرونده۱.len)، برچسب صدا.پایان صدا(پرونده۱.data، پرونده۱.len)
    ناپایا گرفته۱ := برچسب صدا.برچسب‌های جدید()
    سرچاپ برچسب صدا.خواندن آی‌دی۳ یک(پرونده۱.data، پرونده۱.len، گرفته۱)
    سرچاپ گرفته۱.عنوان، گرفته۱.هنرمند، گرفته۱.آلبوم، گرفته۱.سال، گرفته۱.شماره قطعه

    نگارش۲ := برچسب صدا.نوشتن آی‌دی۳ دو(برچسبم)
    سرچاپ برچسب صدا.آی‌دی۳ دو دارد(نگارش۲.data، نگارش۲.len)، برچسب صدا.نگارش آی‌دی۳ دو(نگارش۲.data، نگارش۲.len)
    سرچاپ برچسب صدا.اندازه آی‌دی۳ دو(نگارش۲.data، نگارش۲.len) برابر فشرده سازی.طول بافر(نگارش۲)
    ناپایا گرفته۲ := برچسب صدا.برچسب‌های جدید()
    سرچاپ برچسب صدا.خواندن آی‌دی۳ دو(نگارش۲.data، نگارش۲.len، گرفته۲)
    سرچاپ گرفته۲.عنوان، گرفته۲.هنرمند، گرفته۲.آلبوم، گرفته۲.سبک
    سرچاپ گرفته۲.سال، گرفته۲.شماره قطعه، گرفته۲.شمار قطعه‌ها

    ناپایا فارسی := برچسب صدا.برچسب‌های جدید()
    فارسی.عنوان = رشته.رونوشت("شب‌های شیراز")
    فارسی۲ := برچسب صدا.نوشتن آی‌دی۳ دو(فارسی)
    ناپایا گرفته۳ := برچسب صدا.برچسب‌های جدید()
    برچسب صدا.خواندن آی‌دی۳ دو(فارسی۲.data، فارسی۲.len، گرفته۳)
    سرچاپ گرفته۳.عنوان

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

    سرچاپ برچسب صدا.نام سبک(17)، برچسب صدا.نام سبک(8)، برچسب صدا.نام سبک(200) برابر ""
    ناپایا درستی := نادرست
    ناپایا خودکار := برچسب صدا.خواندن برچسب‌ها(نگارش۲.data، نگارش۲.len، درستی)
    سرچاپ درستی، خودکار.عنوان

    برچسب صدا.آزادسازی برچسب‌ها(برچسبم)
    برچسب صدا.آزادسازی برچسب‌ها(گرفته۱)
    برچسب صدا.آزادسازی برچسب‌ها(گرفته۲)
    برچسب صدا.آزادسازی برچسب‌ها(فارسی)
    برچسب صدا.آزادسازی برچسب‌ها(گرفته۳)
    برچسب صدا.آزادسازی برچسب‌ها(خودکار)
    فشرده سازی.آزادسازی بافر(نگارش۱)
    فشرده سازی.آزادسازی بافر(نگارش۲)
    فشرده سازی.آزادسازی بافر(فارسی۲)
    فشرده سازی.آزادسازی بافر(پرونده۱)
    فشرده سازی.آزادسازی بافر(کامل)
    فشرده سازی.آزادسازی بافر(لخت)
پایان
خروجیfalse true 128 true 32 true Shiraz Nights Darya Zagros 2026 3 true 4 true true Shiraz Nights Darya Zagros Folk 2026 3 12 شب‌های شیراز true 40 65 Rock Jazz true true Shiraz Nights

بلوک Block

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

تابع ریشه:
    ناپایا برچسبم := برچسب صدا.برچسب‌های جدید()
    برچسبم.عنوان = رشته.رونوشت("Zagros")
    برچسبم.هنرمند = رشته.رونوشت("Darya")
    برچسبم.سال = 2026
    برچسبم.شماره قطعه = 2

    یادداشتی := برچسب صدا.نوشتن یادداشت وربیس(برچسبم)
    سرچاپ فشرده سازی.طول بافر(یادداشتی) بزرگتر 8
    ناپایا گرفته := برچسب صدا.برچسب‌های جدید()
    سرچاپ برچسب صدا.خواندن یادداشت وربیس(یادداشتی.data، 0، یادداشتی.len، گرفته)
    سرچاپ گرفته.عنوان، گرفته.هنرمند، گرفته.سال، گرفته.شماره قطعه

    ناپایا فلاکی := فشرده سازی.بافر بایت جدید()
    فشرده سازی.افزودن بایت(فلاکی، 102)
    فشرده سازی.افزودن بایت(فلاکی، 76)
    فشرده سازی.افزودن بایت(فلاکی، 97)
    فشرده سازی.افزودن بایت(فلاکی، 67)
    فشرده سازی.افزودن بایت(فلاکی، 128 | برچسب صدا.بلوک یادداشت وربیس)
    اندازه۲ := فشرده سازی.طول بافر(یادداشتی)
    فشرده سازی.افزودن بایت(فلاکی، (اندازه۲ >> 16) & 255)
    فشرده سازی.افزودن بایت(فلاکی، (اندازه۲ >> 8) & 255)
    فشرده سازی.افزودن بایت(فلاکی، اندازه۲ & 255)
    فشرده سازی.افزودن بافر(فلاکی، یادداشتی)

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

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

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

    سرچاپ برچسب صدا.رمز یونی۸، برچسب صدا.رمز لاتین، برچسب صدا.رمز یونی۱۶، برچسب صدا.رمز یونی۱۶ بزرگ

    بلوکها.آزادکن()
    برچسب صدا.آزادسازی برچسب‌ها(برچسبم)
    برچسب صدا.آزادسازی برچسب‌ها(گرفته)
    برچسب صدا.آزادسازی برچسب‌ها(گرفته۲)
    برچسب صدا.آزادسازی برچسب‌ها(خودکار)
    فشرده سازی.آزادسازی بافر(یادداشتی)
    فشرده سازی.آزادسازی بافر(فلاکی)
پایان
خروجیtrue true Zagros Darya 2026 2 true 1 true true true true Zagros Darya true Zagros 3 0 1 2

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

رمزگذاری‌های متن Enc…

فریم متنی آی‌دی۳ دو کدام رمزگذاری را اعلام می‌کند. خواندن هر چهار را پشتیبانی می‌کند؛ نوشتن همیشه یونی‌کد هشت بیتی به کار می‌برد.
نامانگلیسیمقدار
رمز لاتینEncLatin10
رمز یونی۱۶EncUtf161
رمز یونی۱۶ بزرگEncUtf16BE2
رمز یونی۸EncUtf83

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

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

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

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

تابع‌ها

نام سبک GenreName

تابع نام سبک(id: صحیح): رشته
نام یک شماره سبک آی‌دی۳ یک، یا رشته‌ای خالی برای شماره‌ای که این بسته نامی برایش ندارد.

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

برچسب‌های جدید NewTags

تابع برچسب‌های جدید(): برچسب‌ها
دسته‌ای خالی از برچسب‌ها.

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

آزادسازی برچسب‌ها FreeTags

تابع آزادسازی برچسب‌ها(t &: برچسب‌ها)
هر رشته و تصویری که دسته برچسب نگه می‌دارد را رها می‌کند.

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

برچسب دارد HasTags

تابع برچسب دارد(t: برچسب‌ها): منطقی
درست وقتی چیزی ارزش نشان دادن یافت شده باشد.

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

آی‌دی۳ یک دارد HasID3v1

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

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

خواندن آی‌دی۳ یک ReadID3v1

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

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

نوشتن آی‌دی۳ یک WriteID3v1

تابع نوشتن آی‌دی۳ یک(t: برچسب‌ها): compress.ByteBuf
صد و بیست و هشت بایت یک برچسب آی‌دی۳ یک را می‌سازد.

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

خواندن برچسب‌ها ReadTags

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

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

خواندن برچسب‌های پرونده ReadTagsFile

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

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

برداشتن برچسب‌ها StripTags

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

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

آغاز صدا AudioStart

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

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

پایان صدا AudioEnd

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

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

آی‌دی۳ دو دارد HasID3v2

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

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

نگارش آی‌دی۳ دو ID3v2Version

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

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

اندازه آی‌دی۳ دو ID3v2Size

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

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

خواندن آی‌دی۳ دو ReadID3v2

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

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

نوشتن آی‌دی۳ دو WriteID3v2

تابع نوشتن آی‌دی۳ دو(t: برچسب‌ها): compress.ByteBuf
برچسب آی‌دی۳ نگارش ۲.۴ با متن یونی‌کد هشت بیتی می‌سازد.

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

فلاک برچسبدار است IsFlacTagged

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

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

بلوک‌های فلاک FlacBlocks

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

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

خواندن یادداشت وربیس ReadVorbisComment

تابع خواندن یادداشت وربیس(p: تهی*، off: صحیح، len: صحیح، out &: برچسب‌ها): منطقی
بلوک یادداشت وربیس را می‌خواند، که فلاک و اوگ هر دو برای برچسب همان را به کار می‌برند.

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

خواندن برچسب فلاک ReadFlacTags

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

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

نوشتن یادداشت وربیس WriteVorbisComment

تابع نوشتن یادداشت وربیس(t: برچسب‌ها): compress.ByteBuf
بلوک یادداشت وربیس می‌سازد.

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