void nesapu_device::calculate_rates() { int rate = clock() / 4; screen_device *screen = machine().first_screen(); if (screen != nullptr) { m_samps_per_sync = rate / ATTOSECONDS_TO_HZ(machine().first_screen()->frame_period().attoseconds()); m_real_rate = m_samps_per_sync * ATTOSECONDS_TO_HZ(machine().first_screen()->frame_period().attoseconds()); } else { m_samps_per_sync = rate / screen_device::DEFAULT_FRAME_RATE; m_real_rate = m_samps_per_sync * screen_device::DEFAULT_FRAME_RATE; } m_buffer_size = m_samps_per_sync; m_apu_incsize = float(clock() / (float) m_real_rate); create_vbltimes(m_vbl_times,vbl_length,m_samps_per_sync); create_syncs(m_samps_per_sync); /* Adjust buffer size if 16 bits */ m_buffer_size+=m_samps_per_sync; if (m_stream != nullptr) m_stream->set_sample_rate(rate); else m_stream = machine().sound().stream_alloc(*this, 0, 1, rate); }
void nesapu_device::calculate_rates() { int rate = clock() / 4; m_samps_per_sync = 89490 / 12; // Is there a different PAL value? m_buffer_size = m_samps_per_sync; create_vbltimes(m_vbl_times,vbl_length,m_samps_per_sync); create_syncs(m_samps_per_sync); /* Adjust buffer size if 16 bits */ m_buffer_size+=m_samps_per_sync; if (m_stream != nullptr) m_stream->set_sample_rate(rate); else m_stream = machine().sound().stream_alloc(*this, 0, 1, rate); }
void nesapu_device::device_start() { int rate = clock() / 4; /* Initialize global variables */ m_samps_per_sync = rate / ATTOSECONDS_TO_HZ(machine().first_screen()->frame_period().attoseconds); m_buffer_size = m_samps_per_sync; m_real_rate = m_samps_per_sync * ATTOSECONDS_TO_HZ(machine().first_screen()->frame_period().attoseconds); m_apu_incsize = (float) (clock() / (float) m_real_rate); /* Use initializer calls */ create_noise(m_noise_lut, 13, NOISE_LONG); create_vbltimes(m_vbl_times,vbl_length,m_samps_per_sync); create_syncs(m_samps_per_sync); /* Adjust buffer size if 16 bits */ m_buffer_size+=m_samps_per_sync; /* Initialize individual chips */ (m_APU.dpcm).memory = &machine().device(m_cpu_tag)->memory().space(AS_PROGRAM); m_stream = machine().sound().stream_alloc(*this, 0, 1, rate); /* register for save */ for (int i = 0; i < 2; i++) { save_item(NAME(m_APU.squ[i].regs), i); save_item(NAME(m_APU.squ[i].vbl_length), i); save_item(NAME(m_APU.squ[i].freq), i); save_item(NAME(m_APU.squ[i].phaseacc), i); save_item(NAME(m_APU.squ[i].output_vol), i); save_item(NAME(m_APU.squ[i].env_phase), i); save_item(NAME(m_APU.squ[i].sweep_phase), i); save_item(NAME(m_APU.squ[i].adder), i); save_item(NAME(m_APU.squ[i].env_vol), i); save_item(NAME(m_APU.squ[i].enabled), i); } save_item(NAME(m_APU.tri.regs)); save_item(NAME(m_APU.tri.linear_length)); save_item(NAME(m_APU.tri.vbl_length)); save_item(NAME(m_APU.tri.write_latency)); save_item(NAME(m_APU.tri.phaseacc)); save_item(NAME(m_APU.tri.output_vol)); save_item(NAME(m_APU.tri.adder)); save_item(NAME(m_APU.tri.counter_started)); save_item(NAME(m_APU.tri.enabled)); save_item(NAME(m_APU.noi.regs)); save_item(NAME(m_APU.noi.cur_pos)); save_item(NAME(m_APU.noi.vbl_length)); save_item(NAME(m_APU.noi.phaseacc)); save_item(NAME(m_APU.noi.output_vol)); save_item(NAME(m_APU.noi.env_phase)); save_item(NAME(m_APU.noi.env_vol)); save_item(NAME(m_APU.noi.enabled)); save_item(NAME(m_APU.dpcm.regs)); save_item(NAME(m_APU.dpcm.address)); save_item(NAME(m_APU.dpcm.length)); save_item(NAME(m_APU.dpcm.bits_left)); save_item(NAME(m_APU.dpcm.phaseacc)); save_item(NAME(m_APU.dpcm.output_vol)); save_item(NAME(m_APU.dpcm.cur_byte)); save_item(NAME(m_APU.dpcm.enabled)); save_item(NAME(m_APU.dpcm.irq_occurred)); save_item(NAME(m_APU.dpcm.vol)); save_item(NAME(m_APU.regs)); #ifdef USE_QUEUE save_item(NAME(m_APU.queue)); save_item(NAME(m_APU.head)); save_item(NAME(m_APU.tail)); #else save_item(NAME(m_APU.buf_pos)); save_item(NAME(m_APU.step_mode)); #endif }