Проверка работы в HEX-кодах. Попробуем запись в середину файла:
--------------------------------------------------------------
[перейдем в режим коротких HEX команд]
SCS
>
--------------------------------------------------------------
[В терминале отключим автоматическое добавление 0D
и включим отображение принятых данных в HEX-виде.
В строке терминала добавляем $ для HEX-чисел.
Z80 или микроконтроллер может просто посылать байты]
--------------------------------------------------------------
[Откроем для записи файл 1.tmp]
$09$201.tmp$0D
3E 0D
--------------------------------------------------------------
[Запишем в этот файл 16 байтов в HEX-коде]
$08$20$00$00$00$10$0D
[светодиод на флешке начал мигать]
[числа от 00 до 0F]
$00$01$02$03$04$05$06$07$08$09$0A$0B$0C$0D$0E$0F
3E 0D
[светодиод на флешке мигать перестал]
--------------------------------------------------------------
[Теперь установим указатель в файле на позицию +3 от начала файла]
$28$20$00$00$00$03$0D
3E 0D
--------------------------------------------------------------
[Заменим байты 03 и 04 на AA и BB.
Это понадобится для записи в начало WAV-файла длины звуковых данных]
$08$20$00$00$00$02$0D
$AA$BB
3E 0D
--------------------------------------------------------------
[Закроем файл 1.tmp]
$0A$201.tmp$0D
3E 0D
--------------------------------------------------------------
[Посмотрим содержимое файла 1.tmp]
$04$201.tmp$0D
00 01 02 AA BB 3E 0D
[Вывод - байты в нужном месте поменялись, но после них все обрезалось
Значит, после изменения нескольких байтов в середине файла,
нужно указатель установить на смещение последнего записанного
байта + 1]
--------------------------------------------------------------
[Опять откроем для записи файл 1.tmp]
$09$201.tmp$0D
3E 0D
--------------------------------------------------------------
[Допишем в конец файла 11 байтов в HEX-коде]
$08$20$00$00$00$0B$0D
[числа от 05 до 0F]
$05$06$07$08$09$0A$0B$0C$0D$0E$0F
3E 0D
--------------------------------------------------------------
[Теперь установим указатель в файле на позицию +3 от начала файла]
$28$20$00$00$00$03$0D
3E 0D
--------------------------------------------------------------
[Заменим байты AA и BB на 33 и 44.
Это понадобится для записи в начало WAV-файла длины звуковых данных]
$08$20$00$00$00$02$0D
$33$44
3E 0D
--------------------------------------------------------------
[Теперь установим указатель в файле на конец файла = 16]
$28$20$00$00$00$10$0D
46 49 0D
[ошибка]
--------------------------------------------------------------
[Теперь установим указатель в файле на конец файла = 15]
$28$20$00$00$00$10$0D
46 49 0D
[ошибка]
--------------------------------------------------------------
[Закроем файл 1.tmp]
$0A$201.tmp$0D
3E 0D
--------------------------------------------------------------
[Посмотрим содержимое файла 1.tmp]
$04$201.tmp$0D
00 01 02 33 44 3E 0D
[Вывод - байты в нужном месте поменялись, но после них все обрезалось. Получается, что после изменения в середине файла — хвост обрезается!]
Как же тогда изменить длину в параметрах WAV-файла после записи ? Можно добавить поддержку еще одного формата - писать просто данные в файлы 00.dat - 99.dat. А воспроизводить и WAV и DAT просто как последовательность байтов, без анализа типа файла и характеристик.





Ответить с цитированием