mirror of
https://github.com/Oibaf66/fbzx-wii.git
synced 2024-12-01 04:24:16 +01:00
Added intonation in Currah microspeech
This commit is contained in:
parent
b2bf5c53d4
commit
ab9e1fce3d
@ -1928,15 +1928,21 @@ void Z80free_Wr (register word Addr, register byte Value) {
|
||||
// Currah microspeech ouput
|
||||
if((ordenador.currah_active)&&(ordenador.currah_paged))
|
||||
{
|
||||
if (Addr==0x3000) {
|
||||
//printf("write to 3000h\n");
|
||||
ordenador.intonation_allophone = 0;
|
||||
}
|
||||
|
||||
//if (Addr==0x3000) {printf("write to 3000h\n");ordenador.intonation_allophone = 0;}
|
||||
//if (Addr==0x3001) {printf("write to 3001h\n");ordenador.intonation_allophone = 1;}
|
||||
if (Addr==0x3001) {
|
||||
//printf("write to 3001h\n");
|
||||
ordenador.intonation_allophone = 1;
|
||||
}
|
||||
|
||||
if ((Addr==0x1000)&&(!ordenador.currah_status)) //do not accept a new allophone if the previous is not finished
|
||||
{
|
||||
//if (Value) printf("Currah output=%0xh\n",Value);
|
||||
ordenador.current_allophone = (Value&0x3F);
|
||||
//ordenador.intonation_allophone = (Value&0x40); //to be implemented
|
||||
ordenador.intonation_allophone = (Value&0x40); //to be implemented
|
||||
ordenador.currah_status = 1; //Currah busy
|
||||
ordenador.allophone_sound_cuantity = 0;
|
||||
return;
|
||||
|
@ -229,8 +229,6 @@ struct computer {
|
||||
unsigned char currah_status; // 0: free; 1: busy
|
||||
unsigned char current_allophone; // allophone to be played
|
||||
unsigned char intonation_allophone;
|
||||
//int currah_env_counter;
|
||||
//int max_envelop;
|
||||
int allophone_sound_cuantity; //pointer to allophone sample to be played
|
||||
|
||||
// OSD global variables
|
||||
|
@ -41,13 +41,10 @@ void currah_microspeech_init() {
|
||||
ordenador.current_allophone = 0;
|
||||
ordenador.allophone_sound_cuantity = 0;
|
||||
ordenador.intonation_allophone = 0;
|
||||
//ordenador.currah_env_counter = 0;
|
||||
//ordenador.max_envelop = MAX_ENVELOP;
|
||||
|
||||
for (i=0; i<ALLOPHONES; i++)
|
||||
{
|
||||
sprintf(allophone_name, "fbzx/allophones/%s.wav",allophone_list[i]);
|
||||
//sprintf(allophone_name, "fbzx/allophones/%.3d.wav",i);
|
||||
|
||||
fichero=myfopen(allophone_name,"rb");
|
||||
if(fichero==NULL) {
|
||||
@ -89,8 +86,6 @@ void currah_microspeech_reset() {
|
||||
ordenador.current_allophone = 0;
|
||||
ordenador.allophone_sound_cuantity = 0;
|
||||
ordenador.intonation_allophone = 0;
|
||||
//ordenador.currah_env_counter = 0;
|
||||
//ordenador.max_envelop = MAX_ENVELOP;
|
||||
}
|
||||
|
||||
|
||||
|
@ -20,13 +20,10 @@
|
||||
#ifndef H_CURRAH_MICROSPEECH
|
||||
#define H_CURRAH_MICROSPEECH
|
||||
|
||||
#ifndef MAX_ENVELOP
|
||||
#define MAX_ENVELOP 80 //Is this value rigth?
|
||||
#ifndef INTONATION_INCREASE
|
||||
#define INTONATION_INCREASE 32 //Is this value rigth?
|
||||
#endif
|
||||
|
||||
#ifndef ENVELOP_STEP
|
||||
#define ENVELOP_STEP 1 //Is this value rigth?
|
||||
#endif
|
||||
|
||||
#define ALLOPHONES 64
|
||||
|
||||
|
10
src/spk_ay.c
10
src/spk_ay.c
@ -368,14 +368,14 @@ inline void play_sound (unsigned int tstados) {
|
||||
{
|
||||
if ((ordenador.currah_active)&&(!ordenador.turbo_state))
|
||||
{
|
||||
*ordenador.current_buffer = (rvalue_sum/N_SAMPLES+((unsigned int)allophone_buffer[ordenador.current_allophone][ordenador.allophone_sound_cuantity])*64)<<16
|
||||
|(lvalue_sum/N_SAMPLES+((unsigned int)allophone_buffer[ordenador.current_allophone][ordenador.allophone_sound_cuantity])*64);
|
||||
*ordenador.current_buffer = (rvalue_sum/N_SAMPLES+((unsigned int)allophone_buffer[ordenador.current_allophone][ordenador.allophone_sound_cuantity/INTONATION_INCREASE])*64)<<16
|
||||
|(lvalue_sum/N_SAMPLES+((unsigned int)allophone_buffer[ordenador.current_allophone][ordenador.allophone_sound_cuantity/INTONATION_INCREASE])*64);
|
||||
|
||||
ordenador.allophone_sound_cuantity++;
|
||||
if(!ordenador.intonation_allophone) ordenador.allophone_sound_cuantity+=INTONATION_INCREASE; else ordenador.allophone_sound_cuantity+=INTONATION_INCREASE+1; //The freq increase should be gradual
|
||||
|
||||
if (ordenador.allophone_sound_cuantity >= allophone_lenght[ordenador.current_allophone]) //allophone completed
|
||||
if (ordenador.allophone_sound_cuantity/INTONATION_INCREASE >= allophone_lenght[ordenador.current_allophone]) //allophone completed
|
||||
{
|
||||
ordenador.allophone_sound_cuantity = allophone_lenght[ordenador.current_allophone]*7/8; //repeat the last part
|
||||
ordenador.allophone_sound_cuantity = allophone_lenght[ordenador.current_allophone]*7/8*INTONATION_INCREASE; //repeat the last part
|
||||
ordenador.currah_status = 0; //Ready for a new allophone
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user