Autor Tema: Goattracker y efectos de sonido  (Leído 480 veces)

PacoBlog64

Goattracker y efectos de sonido
« en: Julio 03, 2018, 22:17:50 »
Hola,
He hecho un SID con GT (Goattracker) que contiene 2 pistas (bajo/batería y guitarra) y en el que he dejado una libre para efectos, ya que los ficheros generados con GT tienen una opción que permite usar una pista para FX. El caso es que sigo las instrucciones de la documentación pero no logro que suene el efecto, aunque sí suena la música correctamente. La música la exporto en formato BIN (con el player incorporado), y el efecto lo creo como instrumento dentro de GT: lo grabo como .ins, lo convierto a binario .snd con INS2SND2 y luego lo uso en mi código ensamblador siguiendo estas instrucciones:
Citar
To init music:

        LDA #tunenumber         ;Starting from 0
        JSR startaddress

To play music:

        JSR startaddress+3

To change volume:

        LDA #volume             ;0-F, F is default
        JSR startaddress+6

To play a sound effect

        LDA #<sound             ;Address of sound effect data
        LDX #>sound
        LDY #channel            ;0-2
        JSR startaddress+9

Pero como decía, la música suena y el efecto no. He mirado en otros sitios y teóricamente lo estoy haciendo todo correctamente, pero creo que algo se me escapa. ¿A alguien le ha pasado algo parecido? ¿Sabéis si hay que hacer algo especial para lograr que esto funcione?

¡Gracias!
« última modificación: Julio 04, 2018, 10:01:29 por PacoBlog64 »
Commodoriano desde mis tiernos 7 añitos. ¿Quién necesita más de 1MHz, 64KB de RAM, 16 colores y 3 canales de sonido?
 

PacoBlog64

Re:Goattracker y efectos de sonido
« Respuesta #1 en: Julio 04, 2018, 12:38:32 »
Misterio resuelto, me respondo a mi mismo: se conoce que los ficheros .snd que contienen los FX son de tipo texto (se importan con !src en ACME cambiando dc.b por !byte) y no de tipo binario (!bin), que es como los importaba erróneamente.
Commodoriano desde mis tiernos 7 añitos. ¿Quién necesita más de 1MHz, 64KB de RAM, 16 colores y 3 canales de sonido?
 
Los siguientes usuarios dieron las gracias a este tema: josepzin

josepzin

Re:Goattracker y efectos de sonido
« Respuesta #2 en: Julio 04, 2018, 13:28:05 »
Me alegro :)

Maniako

Re:Goattracker y efectos de sonido
« Respuesta #3 en: Julio 06, 2018, 10:48:36 »
Esto es interesante.
Intenté lo mismo pero lo saqué junto al SID y... no funcionó XD.

Podrías pasarme el fichero ya convertido Para ver como funciona?

LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.
 

PacoBlog64

Re:Goattracker y efectos de sonido
« Respuesta #4 en: Julio 06, 2018, 11:14:22 »
Ok, te lo mando por privado  ;)

Para el resto, el código del reproductor de música y efectos a partir del ejemplo que viene con el código fuente de Goattracker sería algo así (compilador ACME, que es el que uso):
Código: [Seleccionar]
!to "example2.prg",cbm

; Variables.
ZERO_SID_TEST_MUSIC = $9800

; SID.
MUSIC_INIT = ZERO_SID_TEST_MUSIC
MUSIC_PLAYBACK = ZERO_SID_TEST_MUSIC+3

*=$0801
;lo siguiente equivale a SYS 2064, que inicia el programa
!byte $0C,$08,$0A,$00,$9E,$20,$32,$30,$36,$34,$00,$00,$00,$00,$00

; Example of using playroutine 2 (gamemusic)
;
; playeraddress+0 = init music (A = tunenumber starting from 0)
; playeraddress+3 = play music
; playeraddress+6 = play sound effect (A = sound effect address lowbyte,
;                                      Y = sound effect address highbyte,
;                                      X = channel index 0, 7 or 14)
;
; Remember that this player uses 2 zeropage locations, so save those
; locations before calling the player, if you need all of the ZP.
; The player doesn't depend on their contents between calls at all!

getin           = $ffe4

fill_sfxtb lda #<arpeggio2
sta sfxtbllo
lda #>arpeggio2
sta sfxtblhi
lda #<arpeggio1
sta sfxtbllo+1
lda #>arpeggio1
sta sfxtblhi+1
lda #<gunshot
sta sfxtbllo+2
lda #>gunshot
sta sfxtblhi+2
lda #<explosion
sta sfxtbllo+3
lda #>explosion
sta sfxtblhi+3

start:          jsr initraster
                lda #22
                sta $d018
                lda #$00
                jsr MUSIC_INIT           ; inicializa música

                ldx #$00
                lda #$20
clearscreen:    sta $0400,x
                sta $0500,x
                sta $0600,x
                sta $0700,x
                inx
                bne clearscreen
textloop:       lda text,x
                jsr convertascii
                sta $0400,x
                lda #$01
                sta $d800,x
                inx
                cpx #4*40
                bcc textloop
idle:           lda currraster
                ldx #52
                jsr printhex
                lda maxraster
                ldx #55
                jsr printhex
                jsr getin
                cmp #"A"
                bcc idle
                cmp #"D"+1
                bcs idle
playsound:      sec
                sbc #"A"                        ;Sound effect number 0-3
                tax
                lda sfxtbllo,x                  ;Address in A,Y
                ldy sfxtblhi,x
                ldx #$0e                        ;Channel index in X
                ;jsr $1006                       ;(0, 7 or 14)
                jsr MUSIC_PLAYBACK+3
               
                jmp idle

printhex:       pha
                lsr
                lsr
                lsr
                lsr
                tay
                lda hexnybble,y
                jsr convertascii
                sta $0400,x
                pla
                and #$0f
                tay
                lda hexnybble,y
                jsr convertascii
                sta $0401,x
                rts

convertascii:   cmp #$60
                bcc ca_ok
                sbc #$60
ca_ok:          rts

initraster:     sei
                lda #<raster
                sta $0314
                lda #>raster
                sta $0315
                lda #50                         ;Set low bits of raster
                sta $d012                       ;position
                lda $d011
                and #$7f                        ;Set high bit of raster
                sta $d011                       ;position (0)
                lda #$7f                        ;Set timer interrupt off
                sta $dc0d
                lda #$01                        ;Set raster interrupt on
                sta $d01a
                lda $dc0d                       ;Acknowledge timer interrupt
                cli
irwait:         lda maxraster
                beq irwait
                lda #$00
                sta maxraster
                rts

raster:         nop
                nop
                nop
                nop
                nop
                lda $d012
                sta raster_cmp+1
                inc $d020
                jsr MUSIC_PLAYBACK      ; reproducción de música
               
                lda $d012                       ;rastertime it took to
                dec $d020                       ;execute
                sec
raster_cmp:     sbc #$00
                sta currraster
                cmp maxraster
                bcc raster_skip
                sta maxraster
raster_skip:    dec $d019
                jmp $ea31

text:           !text "Example 2: Game-musicroutine            "
                !text "Rastertime:   /                         "
                !text "                                        "
                !text "Press A-D for sound effects.            "

hexnybble:      !text "0123456789ABCDEF"

maxraster:      !byte 0
currraster:     !byte 0

sfxtbllo:       !byte 0, 0, 0, 0

sfxtblhi:       !byte 0, 0, 0, 0

arpeggio2:     
!src "sfx_arp2.snd"

arpeggio1:     
!src "sfx_arp1.snd"

gunshot:       
!src "sfx_gun.snd"

explosion:     
!src "sfx_expl.snd"
;explosion = highest pri.


*=ZERO_SID_TEST_MUSIC
!bin "dummy_song.bin"           ;Playroutine & music data

Commodoriano desde mis tiernos 7 añitos. ¿Quién necesita más de 1MHz, 64KB de RAM, 16 colores y 3 canales de sonido?
 

Zub

Re:Goattracker y efectos de sonido
« Respuesta #5 en: Noviembre 08, 2018, 19:02:19 »
Hola compañeros!

Estoy con problemas de goattracker... Supuestamente hago todo bien pero los sfx no suenan ni de coña como lo hacen en el editor... De hecho algunos ni suenan..

Ejemplo un sonidito de bomba cayendo que se exporta así:

      dc.b $B3,$68,$00,$C3,$41,$C3,$C2,$C2,$C1,$C1,$C0,$C0,$BF,$BF,$BE,$BE
              dc.b $BD,$BD,$BC,$BC,$BB,$BB,$BA,$BA,$B9,$B9,$B8,$B8,$B7,$B7,$B6,$40
            dc.b $B5,$B5,$B4,$B3,$B2,$00

No suena una mierda. Adjunto el .INS original..

Cualquier ayuda será bienvenida!!
 

Dany

Re:Goattracker y efectos de sonido
« Respuesta #6 en: Noviembre 09, 2018, 02:26:53 »
A ver, que aquí hay bastantes entendidos de SID... @uctumi @darro99 o el mismo @PacoBlog64 , que ha trasteao ya :)
« última modificación: Noviembre 09, 2018, 02:55:59 por Dany »
 

Zub

Re:Goattracker y efectos de sonido
« Respuesta #7 en: Noviembre 09, 2018, 11:18:39 »
El que he puesto parece que es porque usa pulse width y la herramienta ins2snd no tiene en cuenta esa información.

Vuestros sfx usan pulsetable? Como haceis?

 

PacoBlog64

Re:Goattracker y efectos de sonido
« Respuesta #8 en: Noviembre 09, 2018, 17:38:05 »
Hola @Zub , que yo sepa, los instrumentos que crees con Goattracker no deben tener "accesorios" como tablas de pulsos, filtros o velocidad. Se tiene que poner todo "a pelo". Al menos así es como logré que me funcionaran los míos. Si quieres que las notas tengan algún efecto (subidas o bajadas de tono) tienes que ponerlo en la wave table y nota a nota, nada de poner al final de la wave table del instrumento que haga un loop y vuelva al principio, por ejemplo.

He probado tu efecto y si cambio el 41 del tipo de onda por 11 u 81, por ejemplo, suena un efecto como de caída. Creo que el problema está ahí, en el tipo de onda.
« última modificación: Noviembre 11, 2018, 18:11:32 por PacoBlog64 »
Commodoriano desde mis tiernos 7 añitos. ¿Quién necesita más de 1MHz, 64KB de RAM, 16 colores y 3 canales de sonido?