Прям китайская грамота для меня. Буду изучать вопрос, спасибо.
Вид для печати
Ну, это команды изменения параметров зацикливания, для закачки они не нужны.
Должен схавать через стандартную загрузку сэмпла в память, если её достаточно.
Но в идеале лучше перевести GS в режим ковокса и бросать звук в порт. Главное настроить задержки между выводами.
Потому как загрузка двух мегабайт в GS займет кучу времени, если делать её обычным способом.
Если прикинуть для частоты 11025 герц. Это значит надо столько раз в секунду кинуть байт в порт? Разделить на 50 = 220,5 байт в прерывание. И как эти байты равномерно распределить на прерывание? С учётом того, что драйвер fat для меня чёрный ящик. Запросил у него считать сектор и жди ).
Если по 10 кадр/сек, в каждом кадре 32 сектора. Значит, можно 320 раз в секунду бросать байт в порт. Интересно.
С драйвером ещё нюанс я сразу не заметил: при открытии файла заполняется некая таблица с адреса #B800. А когда файл большой, ближе к двум мегам, таблица заползает выше адреса #C000. То есть, оба самых любимых слота памяти занимает, считай. Придётся извращаться, перекидывать куски видео тудым-сюдым. Значит, потеряется скорость ощутимо.
Странный драйвер, без предупреждения засирает память. Ну тогда по-любому переделывать драйвер =)
Чтоб чтение шло напрямую блоками, наподобие LBA. И пофиг, если дма-шное, можно и в GS аудио запихать, раз такая песня.
Главное, чтоб при чтении данных не портилось ничего лишнего (не создавалось каких-то там таблиц).
Поправил драйвер SMUC на открытые порты, и сразу скорость возросла в два раза. Теперь выжимает 6 кадр/с, примерно 96768 байт/с. Будем ускорять дальше. Но зато теперь пролетают редкие полоски по бордюру. Загадошный компьютер ).
Таблицу драйвера перенёс в другое место, теперь можно открыть файл на 10-16 мегов. Но о гигабайтах речи не идёт.
Начал читать инструкцию про GS, но там какие-то сэмплы. А мне бы нормальный человеческий wav проиграть силами самой карточки.
На писюке открываешь или создаешь вав-файл, конвертишь в моно 8 бит 8 Кбит (выше незачем, имхо) и сохраняешь как PCM, чтоб без заголовка.
Получившийся файл скормить GS'у под видом сэмпла. Останется выставить нужную ноту, это можно сделать в команде проигрывания.
Битрейт выше допустим, но с ним растет и размер файла. В два мегабайта влезет не так уж и много даже при 8 Кбитах.
Драйвер SMUC пропатчил, теперь он чуть быстрее, чем SC.
С GS научился воспроизводить шум вместо нужного звука. Взял звук, сохранил в wav 8 бит 8000 герц, убрал заголовок и окончание.
И шипение одно. Код брал из инструкции.
Код:ld hl,sndtest
ld de,0-(sndtestend-sndtest)
call LoadFX
ld a,1
call PlayFX
ret
;А вот как можно закачать сэмпл:
GSCOM EQU 187
GSDAT EQU 179
LoadFX ;загрузка сэмпла
LD IX,Parameters
;LD HL,Sample_address
;LD DE,0-Sample_length
LD C,GSCOM
LD A,#38
CALL SENDCOM
LD A,#D1
CALL SENDCOM
LD A,(HL)
LOOP: IN B,(C)
JP P,READY
IN B,(C)
JP M,LOOP
READY: OUT (GSDAT),A
INC HL
ADD A,(HL)
INC E
JP NZ,LOOP
INC D
JP NZ,LOOP
WAIT: IN B,(C) ;Ждем принятия
JP M,WAIT ;последнего байта
LD A,#D2
CALL SENDCOM
; Теперь переопределяем параметры
; сэмпла по умолчанию своими
; значениями
ret
LD A,(IX+#00)
OUT (GSDAT),A ; Нота
LD A,#40
CALL SENDCOM
LD A,(IX+#01)
OUT (GSDAT),A ; Громкость
LD A,#41
SENDCOM: ;это SC
OUT (GSCOM), A
WAITCOM: ;это WC
IN A,(GSCOM)
RRCA
JR C,WAITCOM
RET
SENDDATA ;это SD
OUT (GSDAT),A
ret
PlayFX ;Проигрывание эффекта.
; SD FX_Handle - номер сэмпла
; SC #39
; WC
;ld a,1 ;номер семпла
call SENDDATA
ld a,#39
call SENDCOM
ret
Parameters
db 01,#40 ;нота, громкость
;
org #c000 ;тестовый звук
sndtest
incbin "sndtest.wav"
sndtestend
почему тут Add a,(hl)?Код:READY: OUT (GSDAT),A
INC HL
ADD A,(HL)
вряд ли у вас wav c дельта кодированием
замените на ld a,(hl)
и еще, установка ноты и громкости не отрабатывает.
Код:LD A,#D2
CALL SENDCOM
; Теперь переопределяем параметры
; сэмпла по умолчанию своими
; значениями
ret
LD A,(IX+#00)
OUT (GSDAT),A ; Нота