Пример #1
0
INLINE int tone4(pleiads_sound_state *state, int samplerate)
{
	int level = update_c_pc4(state, samplerate);
	int vpc5 = update_c_pc5(state, samplerate);
	int vpa5 = update_c_pa5(state, samplerate);
	int sum;

	/* Two resistors divide the output voltage of the op-amp between
	 * polybit = 0: 0V and level: x * opamp_resistor / (opamp_resistor + polybit_resistor)
	 * polybit = 1: level and 5V: x * polybit_resistor / (opamp_resistor + polybit_resistor)
	 */
	if (state->m_polybit)
		level = level + (VMAX - level) * state->m_opamp_resistor / (state->m_opamp_resistor + state->m_polybit_resistor);
	else
		level = level * state->m_polybit_resistor / (state->m_opamp_resistor + state->m_polybit_resistor);

	state->m_tone4.counter -= state->m_tone4.max_freq * level / 32768;
	if( state->m_tone4.counter <= 0 )
	{
		int n = (-state->m_tone4.counter / samplerate) + 1;
		state->m_tone4.counter += n * samplerate;
		state->m_tone4.output = (state->m_tone4.output + n) & 1;
	}

	/* mix the two signals */
	sum = vpc5 * state->m_pa5_resistor / (state->m_pa5_resistor + state->m_pc5_resistor) +
			vpa5 * state->m_pc5_resistor / (state->m_pa5_resistor + state->m_pc5_resistor);

	return (state->m_tone4.output) ? sum : -sum;
}
Пример #2
0
inline int pleiads_sound_device::tone4(int samplerate)
{
	int level = update_c_pc4(samplerate);
	int vpc5 = update_c_pc5(samplerate);
	int vpa5 = update_c_pa5(samplerate);
	int sum = 0;

	/* Two resistors divide the output voltage of the op-amp between
	 * polybit = 0: 0V and level: x * opamp_resistor / (opamp_resistor + polybit_resistor)
	 * polybit = 1: level and 5V: x * polybit_resistor / (opamp_resistor + polybit_resistor)
	 */
	if (m_polybit)
		level = level + (VMAX - level) * m_opamp_resistor / (m_opamp_resistor + m_polybit_resistor);
	else
		level = level * m_polybit_resistor / (m_opamp_resistor + m_polybit_resistor);

	m_tone4.counter -= m_tone4.max_freq * level / 32768;
	if( m_tone4.counter <= 0 )
	{
		int n = (-m_tone4.counter / samplerate) + 1;
		m_tone4.counter += n * samplerate;
		m_tone4.output = (m_tone4.output + n) & 1;
	}

	/* mix the two signals */
	sum = vpc5 * m_pa5_resistor / (m_pa5_resistor + m_pc5_resistor) +
			vpa5 * m_pc5_resistor / (m_pa5_resistor + m_pc5_resistor);

	return (m_tone4.output) ? sum : -sum;
}
Пример #3
0
INLINE int tone4(int samplerate)
{
	static int counter, output;
	int level = update_c_pc4(samplerate);
	int vpc5 = update_c_pc5(samplerate);
	int vpa5 = update_c_pa5(samplerate);
	int sum;

	/* Two resistors divide the output voltage of the op-amp between
     * polybit = 0: 0V and level: x * opamp_resistor / (opamp_resistor + polybit_resistor)
     * polybit = 1: level and 5V: x * polybit_resistor / (opamp_resistor + polybit_resistor)
     */
	if (polybit)
		level = level + (VMAX - level) * opamp_resistor / (opamp_resistor + polybit_resistor);
	else
		level = level * polybit_resistor / (opamp_resistor + polybit_resistor);

	counter -= tone4_max_freq * level / 32768;
	if( counter <= 0 )
	{
		int n = (-counter / samplerate) + 1;
		counter += n * samplerate;
		output = (output + n) & 1;
	}

	/* mix the two signals */
	sum = vpc5 * pa5_resistor / (pa5_resistor + pc5_resistor) +
		  vpa5 * pc5_resistor / (pa5_resistor + pc5_resistor);

	return (output) ? sum : -sum;
}