MidiReader
اعلان
public sealed class Strawberry.Sound.Midi.MidiReader
یک ISoundReader که صوت PCM را از یک فایل MIDI سنتز میکند، سازگار با سیستم streaming موتور Strawberry.
نکات: الگوهای استفاده: 1. 2. 3. خواننده صوت را بهدرخواست با فراخوانی Read توسط سیستم streaming render میکند. Seek وضعیت synth را با پخش دوبارهی رویدادهای MIDI از ابتدا تا موقعیت هدف (بدون render صوت) بازسازی میکند، سپس render عادی را از آن نقطه از سر میگیرد.
پیادهسازی: Strawberry.Sound.ISoundReader
سازندهها
MidiReader
یک MidiReader با یک backend synth صراحتاً فراهمشده میسازد. فراخواننده مسئول طولعمر backend است (توسط این خواننده dispose نمیشود).
void MidiReader(Stream midiStream, ISynthBackend synthBackend)
پارامترها:
| نام | نوع | توضیحات |
|---|---|---|
midiStream |
System.IO.Stream |
stream حاوی دادهی فایل MIDI. |
synthBackend |
Strawberry.Sound.Midi.ISynthBackend |
backend سینتسایزر پیشپیکربندیشده. |
MidiReader
یک MidiReader میسازد که backend synth را بهطور خودکار انتخاب میکند. سعی میکند TinySoundFont native را بارگذاری کند؛ در صورت شکست به ManagedSynthBackend رجوع میکند. backend synth متعلق به این خواننده است و توسط آن dispose میشود.
void MidiReader(Stream midiStream, Stream soundFont = null, int sampleRate = 44100, int channels = 2)
پارامترها:
| نام | نوع | توضیحات |
|---|---|---|
midiStream |
System.IO.Stream |
stream حاوی دادهی فایل MIDI. |
soundFont |
System.IO.Stream = null |
|
sampleRate |
System.Int32 = 44100 |
نرخ نمونهبرداری خروجی (پیشفرض 44100). |
channels |
System.Int32 = 2 |
کانالهای خروجی: 1 یا 2 (پیشفرض 2). |
ویژگیها
Stream
stream اصلی فایل MIDI (مرجع فقطخوانایی).
Stream Stream { get }
BitsPerSample
همیشه 16 (خروجی PCM ۱۶-بیتی برای سازگاری با OpenAL).
int BitsPerSample { get }
SampleRate
نرخ نمونهبرداری خروجی (مطابق با backend synth).
int SampleRate { get }
Channels
تعداد کانالهای خروجی (1 = مونو، 2 = استریو).
int Channels { get }
DataSize
کل اندازهی دادهی PCM به بایت.
int DataSize { get }
متدها
Read
صوت PCM سنتزشده را در بافر میخواند. صوت بهدرخواست با پیشروی در فهرست رویداد MIDI و تغذیهی backend synth render میشود.
int Read(byte[] buffer, int offset, int count)
پارامترها:
| نام | نوع | توضیحات |
|---|---|---|
buffer |
System.Byte[] |
|
offset |
System.Int32 |
|
count |
System.Int32 |
خروجی: تعداد بایتهای نوشتهشده در بافر، یا 0 اگر در انتهای داده باشد.
Seek
به یک انحراف بایتی در دادهی PCM decodeشده seek میکند. وضعیت synth را با پخش دوبارهی همهی رویدادهای MIDI از ابتدا تا موقعیت هدف (بدون render صوت) بازسازی میکند، سپس نشانگر render را در هدف موقعیت میدهد.
void Seek(long offset)
پارامترها:
| نام | نوع | توضیحات |
|---|---|---|
offset |
System.Int64 |
ReadAll
کل فایل MIDI را بهعنوان دادهی PCM decodeشده میخواند. ابتدا خواننده را به ابتدا بازنشانی میکند، سپس همهی صدا را render میکند.
byte[] ReadAll()
Dispose
void Dispose()