2016-01-08 9 views
0

Я реализации этой программы тон-генератора и он прекрасно работает:Зачем писать в 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) 

One «писать» имеет смысл, но почему вторая «пишет»?

+0

Вы могли бы ответить на этот вопрос сам: комментарий одного из них и запустить его и посмотреть, что результат – Plutonix

+0

Я попробовал это и получил странные результаты. Если я прокомментирую первый, я получаю сообщение об ошибке в команде SP.Play(). Если я прокомментирую второй, я получаю тон, но на одну октаву выше. Невозможно объяснить эти результаты ... – swabygw

+0

Возможно, что вторая запись просто очищает первую запись –

ответ

1

Пример немного критический, но волновой файл настроен на 2 канала, поэтому две записи просто отправляют одни и те же аудиоданные на оба канала.

Заголовок волны это жёстко бит:

Dim Hdr() As Integer = {&H46464952, 36 + Bytes, &H45564157, _ 
         &H20746D66, 16, &H20001, 44100, _ 
         176400, &H100004, &H61746164, Bytes} 

Какие декодируется средства:

 
    H46464952 = 'RIFF' (little endian) 
    36+Bytes = Length of header + length of data 
    H45564157 = 'WAVE' (little endian) 
    H20746D66 = 'fmt ' (little endian) 
    16  = length of fmt chunk (always 16) 
    H20001 = 0x0001: PCM, 
       0x0002: 2 channels 
    44100  = sampleRate 
    176400 = sampleRate*numChannels*bytesPerSample = 44100*2*2 
    H100004 = 0x0004: numChannels*bytesPerSample, 
       0x0010: bitsPerSample (16) 
    H61746164 = 'data' 
    Bytes  = size of data chunk 
+0

Отличное объяснение. Где я могу найти документацию по этим значениям? О, и что означал «endian»? Предполагалось, что это «медиана» или что-то еще ... – swabygw

+0

http://soundfile.sapp.org/doc/WaveFormat/. Endian ссылается на порядок байтов - big endian 0x1234 - маленький конец 0x3412. Если вы посмотрите на коды ascii для строк, вы увидите, что это говорит об обратном. – jaket

+0

Awesome - спасибо. Я нашел документацию в Интернете. – swabygw