Зачем писать в BinaryWriter дважды?

Я реализую эту программу тон-генератора, и она прекрасно работает:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/c2b953b6-3c85-4eda-a478-080bae781319/beep-beep?forum=vbgeneral

Что я не могу понять, это почему следующие две строки кода:

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 = 'данные'
    Байт = размер порции данных
Другие вопросы по тегам