Exemplo n.º 1
0
inline void ay::ayStep(short &s0, short &s1, short &s2)
{
    s0 = s1 = s2 = 0;
    while(ay_tacts_counter < ay_tacts)
    {
        ay_tacts_counter += TACTS_MULT;
        if(++chnl_period0 >= tone_period_init0)
        {
            chnl_period0 -= tone_period_init0;
            chnl_trigger0 ^= 1;
        }
        if(++chnl_period1 >= tone_period_init1)
        {
            chnl_period1 -= tone_period_init1;
            chnl_trigger1 ^= 1;
        }
        if(++chnl_period2 >= tone_period_init2)
        {
            chnl_period2 -= tone_period_init2;
            chnl_trigger2 ^= 1;
        }

        if(++noise_period >= noise_period_init)
        {
            noise_period = 0;
            if((noise_reg + 1) & 2)
                noise_trigger ^= 1;
            if(noise_reg & 1)
                noise_reg ^= 0x24000;
            noise_reg >>= 1;
        }
        updateEnvelope();

    }
Exemplo n.º 2
0
void OperatorWidget::setContent(const OpaOperatorParams * params, bool send)
{
    QString text;
    opa.setEnable(false);

    setFlags(params->flags);
    ui->volumeSlide->setValue(params->volume);
    on_volumeSlide_valueChanged(params->volume);

    int coarse = (params->flags & OPA_OP_ABSOLUTE) ?
        ((int8_t) params->coarse) + 128 : params->coarse;

    ui->coarseDial->setValue(coarse);
    on_coarseDial_valueChanged(coarse);

    ui->fineDial->setValue(params->fine);
    on_fineDial_valueChanged(params->fine);

    ui->LFOSpeedDial->setValue(params->LFOSpeed);
    ui->LFOAmountDial->setValue(params->LFOAmount);
    ui->feedbackDial->setValue(params->feedback);

    ui->attackDial->setValue(params->envAttack);
    ui->decayDial->setValue(params->envDecay);
    ui->sustainDial->setValue(params->envSusLevel);
    ui->initDial ->setValue(params->envIniLevel);
    ui->releaseDial->setValue(params->envRelease);

    updateEnvelope();

    opa.setEnable(true);

    if (send) {
        opa.programParamWrite(programIndex, getParamIndex(OPA_OP_VOLUME), params->volume);
        opa.programParamWrite(programIndex, getParamIndex(OPA_OP_COARSE), params->coarse);
        opa.programParamWrite(programIndex, getParamIndex(OPA_OP_FINE), params->fine);
        opa.programParamWrite(programIndex, getParamIndex(OPA_OP_LFOSPEED), params->LFOSpeed);
        opa.programParamWrite(programIndex, getParamIndex(OPA_OP_LFOAMOUNT), params->LFOAmount);
        opa.programParamWrite(programIndex, getParamIndex(OPA_OP_FEEDBACK), params->feedback);
        opa.programParamWrite(programIndex, getParamIndex(OPA_OP_ENVATTACK), params->envAttack);
        opa.programParamWrite(programIndex, getParamIndex(OPA_OP_ENVDECAY), params->envDecay);
        opa.programParamWrite(programIndex, getParamIndex(OPA_OP_ENVSUSTAIN_LEVEL), params->envSusLevel);
        opa.programParamWrite(programIndex, getParamIndex(OPA_OP_ENVINIT_LEVEL), params->envIniLevel);
        opa.programParamWrite(programIndex, getParamIndex(OPA_OP_ENVRELEASE), params->envRelease);
        writeFlags();
   }
}
Exemplo n.º 3
0
void SoundGenerator::run()
{
    static int nextCC = 0;
    m_clockCount++;

    // every 16 clock cycles => 62,5 kHz
    if ((m_clockCount & 0x0f) == 0)
    {
        updateEnvelope();
        updateNoise();

        updateChannel(m_channelA, m_mixerA);
        updateChannel(m_channelB, m_mixerB);
        updateChannel(m_channelC, m_mixerC);

        *m_bufferPtr++ = (m_channelC.mixValue & 0xff) - 128;
        m_bufferPos += 1;
        if (m_bufferPos >= m_audioBuffer.length())
        {
           m_bufferPtr = reinterpret_cast<qint8 *>(m_audioBuffer.data());
           m_bufferPos = 0;
        }

        *m_bufferPtr++ = (m_channelA.mixValue & 0xff) - 128;
        m_bufferPos += 1;
        if (m_bufferPos >= m_audioBuffer.length())
        {
           m_bufferPtr = reinterpret_cast<qint8 *>(m_audioBuffer.data());
           m_bufferPos = 0;
        }

        m_channelA.mixValue = 0;
        m_channelB.mixValue = 0;
        m_channelC.mixValue = 0;
    }
}
Exemplo n.º 4
0
void OperatorWidget::on_releaseDial_valueChanged(int value)
{
    opa.programParamWrite(programIndex, getParamIndex(OPA_OP_ENVRELEASE), value);
    updateEnvelope();
}
Exemplo n.º 5
0
void OperatorWidget::on_initDial_valueChanged(int value)
{
    opa.programParamWrite(programIndex, getParamIndex(OPA_OP_ENVINIT_LEVEL), value);
    updateEnvelope();
}
Exemplo n.º 6
0
void OperatorWidget::on_sustainDial_valueChanged(int value)
{
    opa.programParamWrite(programIndex, getParamIndex(OPA_OP_ENVSUSTAIN_LEVEL), value);
    updateEnvelope();
}
Exemplo n.º 7
0
void OperatorWidget::on_decayDial_valueChanged(int value)
{
    opa.programParamWrite(programIndex, getParamIndex(OPA_OP_ENVDECAY), value);
    updateEnvelope();
}
Exemplo n.º 8
0
void OperatorWidget::on_attackDial_valueChanged(int value)
{
    opa.programParamWrite(programIndex, getParamIndex(OPA_OP_ENVATTACK), value);
    updateEnvelope();
}