Зачем писать в BinaryWriter дважды?
Я реализую эту программу тон-генератора, и она прекрасно работает:
Что я не могу понять, это почему следующие две строки кода:
BW.Write(Sample)
BW.Write(Sample)
Одна "запись" имеет смысл, но почему вторая "запись"?
1 ответ
Решение
Пример немного загадочный, но волновой файл настроен на 2 канала, поэтому две записи просто отправляют одни и те же аудиоданные на оба канала.
Заголовок волны - это жестко закодированный бит:
Dim Hdr() As Integer = {&H46464952, 36 + Bytes, &H45564157, _
&H20746D66, 16, &H20001, 44100, _
176400, &H100004, &H61746164, Bytes}
Какой расшифрованный означает:
H46464952 = 'RIFF' (little-endian) 36+ байт = длина заголовка + длина данных H45564157 = 'WAVE' (little-endian) H20746D66 = 'fmt ' (little-endian) 16 = длина fmt чанка (всегда 16) H20001 = 0x0001: PCM, 0x0002: 2 канала 44100 = sampleRate 176400 = sampleRate*numChannels*bytesPerSample = 44100*2*2 H100004 = 0x0004: numChannels*bytesPerSample, 0x0010: bitsPerSample (16) H61746164 = 'данные' Байт = размер порции данных