Karoshi MSX Community
05 de Julio de 2021, 04:17:58 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: 1-bit sample replayer  (Leído 4606 veces)
0 Usuarios y 1 Visitante están viendo este tema.
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« : 02 de Octubre de 2006, 07:12:27 pm »

Mensaje original de Robsy

Hello everyone! I hope that you will enjoy this one: real sample replayer for MSX, using the keyboard "click" system. It can replay both 11 or 22 KHz WAV files converted from 8-bit to 1-bit.

In order to convert the sample and to view a full example working, download this http://www.robsy.net/sample.zip

Regards!

Código:
;--------------------------------------------------------------------
PLAY_SAMPLE:
;--------------------------------------------------------------------
; Plays a 22,050 or 11,025 Hz 1-bit sample using keyboard click
;--------------------------------------------------------------------
; Parameters: HL=sample data pointer
; BC=sample length in bytes
;--------------------------------------------------------------------
; Modifies: AF,BC,DE,HL,DI
;--------------------------------------------------------------------
; Disable interrupts
di
; Main loop
@@LOOP:
; Set bit counter
ld d,8 ; 8
; Check if finished
dec bc ; 7
ld a,b ; 5
or c ; 5
ret z ; 6 (FALSE)
; Read byte
ld a,[hl] ; 8
inc hl ; 7
@@COPY:
; Extract bit
rlca ; 5
ld e,a ; 5
; Convert to PPI format
ld a,0FFh ; 8
rra ; 5
; Output to PPI
out [0AAh],a ;12
ld a,e ; 5
; Delay - NOPs to sync time
db 0,0,0,0,0,0,0,0,0,0,0,0 ;12*5=60
; Extra delay: uncomment following lines to play 11,025 Hz samples
; db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
; db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
; Check if byte completed
dec d ; 5
jr z,@@LOOP ;13 (TRUE) / 8 (FALSE)
; Balancing delay - additional NOPs
db 0,0,0,0,0,0,0,0 ; 8*5=40
; Continue
jr @@COPY ; 9
;--------------------------------------------------------------------
; Short loop: 162 T-states
; Long loop: 164 T-states
; Perfect 22,050 Hz: 162.5 T-states (for 3.54 MHz Z80)
;--------------------------------------------------------------------
En línea

Doom dee doom dee doom
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #1 : 02 de Octubre de 2006, 07:14:34 pm »

Mensaje original por wyz2

Edu, I'm just trying 4-bit samples too, using a well known methode:

PSG(6)=0
PSG(0)=0
PSG(1)=0
PSG(7)=11111000b

and using PSG( 8 ) as a 4-bit oscilator (By ussing 2 channels, volume and quality are increased a lot)

The way to get a good quality sample from a 8-bit mono 11khz is:


Goldwave:

- Normalize the wave to max. 0.1
- Save the wave as PCM 8 bit-mono unsigned 11khz.

Winhex:

- Delete the &h2C long wav header.
- substract &H78 to all the values (modificar datos)
- search &HF? and change to 0
- search &H1? and change to &H0F
- save the file.( This file could be packed - 70% rate - with bitbuster for example)


...the sample replayer:

Código:
    Code:
    ;[HL]: SAMPLE
    ;[DE]: LENGHT

    PLAY_SAMPLE:
    DI

    PSBC0:
    LD C,8
    LD A,[HL]
    CALL SOUND
    LD C,9
    CALL SOUND
    LD B,6
    DLYBC0:
    DJNZ DLYBC0

    INC HL
    DEC DE
    LD A,D
    OR E
    JP NZ,PSBC0
    RET

    ;SOUND C,A

    SOUND:
    PUSH AF
    LD A,C
    OUT [$A0],A
    POP AF
    OUT [$A1],A
    RET





and It sounds ! Smiley
http://webs.ono.com/WYZ/4bsample.bin

the original wav was made with text2speech and Goldwave/flange robot2

Note that this methode sounds a little noisy. Try to get a better one, ok?
« Última modificación: 17 de Diciembre de 2006, 06:29:12 pm por jltursan » En línea

Doom dee doom dee doom
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #2 : 02 de Octubre de 2006, 07:14:59 pm »

Mensaje original por Robsy

I have been using the following for the 4-bit PCM:

Channel A frequency=0 (PSG(0)=0; PSG(1)=0)
All channels and noise disabled but square tone in channel A (PSG(7)=&b10111110)

And then I start copying nibbles (4-bit) to channel A amplitude (volume) register, PSG( 8 )=data!

It produces high quality sound if it is well synched. I don't understand why Ricardo Bittencourt talks about the noise frequency register because if it is enabled the sound is much more noisy.
   IP:
« Última modificación: 17 de Diciembre de 2006, 06:29:25 pm por jltursan » En línea

Doom dee doom dee doom
ARTRAG
Visitante
« Respuesta #3 : 02 de Octubre de 2006, 10:01:50 pm »

The PSG volumes are strongly non linear,

go here
http://map.tni.nl/articles/psg_sample.php
to see how this affect the sound you get

and here
http://www.msx.org/PCM-Encoder-0.01.newspost3520.html
to see how the fact that you cannout chage the PSG volumes of 2 or 3 channels
at the same time affect the sound (you get plenty of "clicks") and how
to avoid this with viterbi optimization
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #4 : 03 de Octubre de 2006, 10:13:36 pm »

The PSG volumes are strongly non linear,

go here
http://map.tni.nl/articles/psg_sample.php
to see how this affect the sound you get

and here
http://www.msx.org/PCM-Encoder-0.01.newspost3520.html
to see how the fact that you cannout chage the PSG volumes of 2 or 3 channels
at the same time affect the sound (you get plenty of "clicks") and how
to avoid this with viterbi optimization

Thank you for your comments, Artag.

Of course that volume levels are not linear: the PSG has logaritmic amplitude levels. I was just testing the whole thing: for game development, 4-bit samples are a waste of space that I cannot afford.

About PSG volume changes, in my 4-bit replayer there is only one channel in use. Pure PCM!

And of course, I learnt a lot at MAP!
En línea
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!