صدا/میدی audio/midi
خواندن، نوشتن و نواختن پروندههای میدی استاندارد.
واردسازی audio.midi
پرونده میدی نت نگه میدارد نه صدا: کدام نت، کی، چه اندازه سخت و با چه سازی. همین آن را کوچک میکند، و ویرایشپذیرش میکند به شکلی که یک ضبط نیست.
این بسته پروندههای میدی استاندارد را میخواند و مینویسد، و ساختن یکی را از راه صدا.صداساز به صدا برمیگرداند، پس پروندهای از نتها به قطعهای میشود که میتوانید به شکل ویو یا فلاک ذخیره کنید.
دانستنیها
- همه چیز به تیک است، و
تقسیممیگوید یک چهارم چند تیک است.تیک به ثانیهضرباهنگ را هم میخواهد، و برای همین همه آهنگ را میگیرد. - یک نت دو رویداد است، روشن و خاموش.
افزودن نتهر دو را مینویسد، ونتهاآنها را باز جفت میکند و درازیها را به ثانیه به شما میدهد. - نت روشن با شدت صفر یعنی نت خاموش، و خواننده آن را به یکی برمیگرداند تا هرگز ناچار به سنجیدن نباشید.
- آهنگ را با
آزادسازی آهنگرها کنید: برای هر ترک یک وکتور و خود وکتور ترکها از آن است. ساختنبرای هر نت یک پوشش ساده به کار میبرد. برای هر چیز بیشتر،نتهارا بگیرید و خودتان بسازید.
گونهها
رویداد Event
ساختار رویداد| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| تیک | tick | صحیح = 0 | کی رخ میدهد، به تیک از آغاز. |
| وضعیت | status | صحیح = 0 | از چه گونه رویدادی است. |
| کانال | channel | صحیح = 0 | بر کدام یک از شانزده کانال است. |
| داده۱ | data1 | صحیح = 0 | بایت نخست، یک شماره نت یا یک واپایشگر. |
| داده۲ | data2 | صحیح = 0 | بایت دوم، یک شدت یا یک مقدار. |
| فرا | meta | صحیح = 0 | کدام رویداد فراست، وقتی وضعیت فرا را بگوید. |
| مقدار | value | صحیح۶۴ = 0 | عددی که رویداد فرا با خود دارد، مثل یک ضرباهنگ. |
واردسازی صدا.میدی
واردسازی فشرده سازی
تابع ریشه:
ناپایا آهنگم := میدی.آهنگ جدید(480)
سرچاپ آهنگم.تقسیم، آهنگم.قالب، آهنگم.ضرباهنگ برگردان صحیح
سرچاپ میدی.تقسیم پیشفرض
ناپایا ترکم := میدی.ترک جدید()
میدی.افزودن ضرباهنگ(ترکم، 0، 120.0)
میدی.افزودن برنامه(ترکم، 0، 0، 0)
میدی.افزودن واپایش(ترکم، 0، 7، 100، 0)
ناپایا شماره := 0
تا شماره کوچکتر 4:
میدی.افزودن نت(ترکم، شماره * 480، 240، 60 + شماره * 2، 100، 0)
شماره += 1
پایان
سرچاپ ترکم.رویدادها.طول()
میدی.افزودن ترک(آهنگم، ترکم)
سرچاپ آهنگم.ترکها.طول()، میدی.تیک کل(آهنگم)
یکی := ترکم.رویدادها.بگیر(1)
سرچاپ یکی.تیک، یکی.وضعیت برابر میدی.نت روشن، یکی.داده۱، یکی.داده۲، یکی.کانال
سرچاپ میدی.نت روشن، میدی.نت خاموش، میدی.تغییر واپایش، میدی.تغییر برنامه، میدی.رویداد فرا
رمزی := میدی.کدگذاری میدی(آهنگم)
سرچاپ فشرده سازی.طول بافر(رمزی) بزرگتر 22، میدی.میدی است(رمزی.data، رمزی.len)
ناپایا خالی := میدی.آهنگ جدید(480)
سرچاپ فشرده سازی.طول بافر(میدی.کدگذاری میدی(خالی))
میدی.آزادسازی آهنگ(خالی)
فشرده سازی.آزادسازی بافر(رمزی)
میدی.آزادسازی آهنگ(آهنگم)
پایانترک Track
ساختار ترک| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| رویدادها | events | وکتور<رویداد> | رویدادها. |
نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
آهنگ Song
ساختار آهنگ| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| قالب | format | صحیح = 0 | کدام قالب اساماف است، صفر برای یک ترک و یک برای چند تا. |
| تقسیم | division | صحیح = 0 | تیک در هر چهارم، که هر تیک با آن سنجیده میشود. |
| ضرباهنگ | tempo | صحیح۶۴ = 500000 | میکروثانیه در هر چهارم. پانصد هزار یعنی صد و بیست ضربه در دقیقه. |
| ترکها | tracks | وکتور<ترک> | خود ترکها. |
نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
پایاها و متغیرها
نت خاموش NoteOff
پایا نت خاموش: صحیح۳۲ = 128نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
نت روشن NoteOn
پایا نت روشن: صحیح۳۲ = 144نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
تغییر واپایش ControlChange
پایا تغییر واپایش: صحیح۳۲ = 176نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
تغییر برنامه ProgramChange
پایا تغییر برنامه: صحیح۳۲ = 192نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
شمارههای رویداد فرا Meta…
| نام | انگلیسی | مقدار |
|---|---|---|
| رویداد فرا | MetaEvent | 255 |
| فرا ضرباهنگ | MetaTempo | 81 |
| فرا نام ترک | MetaTrackName | 3 |
| پایان ترک | MetaEndOfTrack | 47 |
| فرا کسر میزان | MetaTimeSignature | 88 |
نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
تقسیم پیشفرض DefaultDivision
پایا تقسیم پیشفرض: صحیح۳۲ = 480نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
تابعها
میدی است IsMIDI
تابع میدی است(p: تهی*، n: صحیح): منطقیواردسازی صدا
واردسازی صدا.میدی
واردسازی فشرده سازی
واردسازی مسیر پرونده
واردسازی ریاضی
واردسازی حافظه
واردسازی سیستم عامل
تابع ریشه:
ناپایا آهنگم := میدی.آهنگ جدید(480)
ناپایا ترکم := میدی.ترک جدید()
میدی.افزودن ضرباهنگ(ترکم، 0، 120.0)
ناپایا شماره := 0
تا شماره کوچکتر 4:
میدی.افزودن نت(ترکم، شماره * 480، 240، 60 + شماره * 2، 100، 0)
شماره += 1
پایان
میدی.افزودن ترک(آهنگم، ترکم)
رمزی := میدی.کدگذاری میدی(آهنگم)
سرچاپ میدی.میدی است(رمزی.data، رمزی.len)، میدی.میدی است(رمزی.data، 8)
سرچاپ صدا.نام قالب(صدا.شناسایی قالب(رمزی.data، رمزی.len))
ناپایا درستی := نادرست
ناپایا برگشته := میدی.کدگشایی میدی(رمزی.data، رمزی.len، درستی)
سرچاپ درستی، برگشته.تقسیم، برگشته.ترکها.طول()
سرچاپ ریاضی.قدرمطلق(میدی.ضربان(برگشته) - 120.0) کوچکتر 0.01
سرچاپ میدی.تیک کل(برگشته)
سرچاپ میدی.تیک به ثانیه(برگشته، 480)، میدی.ثانیه به تیک(برگشته، 0.5)
ناپایا نتهایم := میدی.نتها(برگشته)
سرچاپ نتهایم.طول()، نتهایم.بگیر(0).شماره نت، نتهایم.بگیر(3).شماره نت
سرچاپ نتهایم.بگیر(1).آغاز، نتهایم.بگیر(0).درازی
نتهایم.آزادکن()
ساخته := میدی.ساختن(برگشته، 22050، 1)
سرچاپ ساخته.فریم ها بزرگتر 0، صدا.اوج(ساخته) بزرگتر 0.05
سرچاپ میدی.نام برنامه(0)، میدی.نام برنامه(200) برابر ""
نشانی := مسیر پرونده.پیوند(سیستم عامل.پوشه موقت()، "salam_midi_example.mid")
دیرکن حافظه.آزادسازی(نشانی برگردان تهی*)
سرچاپ میدی.ذخیره میدی(آهنگم، نشانی)
ناپایا درستی۲ := نادرست
ناپایا دیسکی := میدی.بازکردن میدی(نشانی، درستی۲)
سرچاپ درستی۲، دیسکی.ترکها.طول()
ناپایا رفته := نادرست
نبود := مسیر پرونده.پیوند(سیستم عامل.پوشه موقت()، "salam_midi_none.mid")
دیرکن حافظه.آزادسازی(نبود برگردان تهی*)
میدی.بازکردن میدی(نبود، رفته)
سرچاپ رفته
ناپایا خراب := نادرست
میدی.کدگشایی میدی(رمزی.data، 8، خراب)
سرچاپ خراب
فشرده سازی.آزادسازی بافر(رمزی)
ناپایا آر := ساخته
صدا.آزادسازی(آر)
میدی.آزادسازی آهنگ(آهنگم)
میدی.آزادسازی آهنگ(برگشته)
میدی.آزادسازی آهنگ(دیسکی)
پایانآهنگ جدید NewSong
تابع آهنگ جدید(division: صحیح): آهنگنمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
ترک جدید NewTrack
تابع ترک جدید(): ترکنمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
افزودن ترک AddTrack
تابع افزودن ترک(f &: آهنگ، t: ترک)نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
افزودن نت AddNote
تابع افزودن نت(t &: ترک، tick: صحیح، length: صحیح، note: صحیح، velocity: صحیح، channel: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
افزودن ضرباهنگ AddTempo
تابع افزودن ضرباهنگ(t &: ترک، tick: صحیح، bpm: اعشار۶۴)نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
افزودن برنامه AddProgram
تابع افزودن برنامه(t &: ترک، tick: صحیح، program: صحیح، channel: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
افزودن واپایش AddControl
تابع افزودن واپایش(t &: ترک، tick: صحیح، controller: صحیح، value: صحیح، channel: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
آزادسازی آهنگ FreeSong
تابع آزادسازی آهنگ(f &: آهنگ)نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
تیک به ثانیه TicksToSeconds
تابع تیک به ثانیه(f: آهنگ، ticks: صحیح): اعشار۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Read.salam
ثانیه به تیک SecondsToTicks
تابع ثانیه به تیک(f: آهنگ، seconds: اعشار۶۴): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: midi-Read.salam
ضربان Bpm
تابع ضربان(f: آهنگ): اعشار۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Read.salam
تیک کل TotalTicks
تابع تیک کل(f: آهنگ): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: midi-Read.salam
کدگشایی میدی DecodeMIDI
تابع کدگشایی میدی(p: تهی*، n: صحیح، ok &: منطقی): آهنگنمونهی این مورد همراه با موارد بالاتر آمده است: midi-Read.salam
کدگذاری میدی EncodeMIDI
تابع کدگذاری میدی(f: آهنگ): compress.ByteBufنمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
بازکردن میدی OpenMIDI
تابع بازکردن میدی(path: رشته، ok &: منطقی): آهنگنمونهی این مورد همراه با موارد بالاتر آمده است: midi-Read.salam
ذخیره میدی SaveMIDI
تابع ذخیره میدی(f: آهنگ، path: رشته): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: midi-Write.salam
نتها Notes
تابع نتها(f: آهنگ): وکتور<synth.Note>نمونهی این مورد همراه با موارد بالاتر آمده است: midi-Read.salam
ساختن Render
تابع ساختن(f: آهنگ، rate: صحیح، channels: صحیح): audio.Clipنمونهی این مورد همراه با موارد بالاتر آمده است: midi-Read.salam
نام برنامه ProgramName
تابع نام برنامه(program: صحیح): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: midi-Read.salam