/* generate sound by oversampling */ uint32_t namco_update_one(write_stream_view buffer, Pointer <int16_t> wave, uint32_t counter, uint32_t freq) //uint32_t namco_update_one(write_stream_view &buffer, const int16_t *wave, uint32_t counter, uint32_t freq); { for (int sampindex = 0; sampindex < buffer.samples(); sampindex++) { buffer.add_int(sampindex, wave[WAVEFORM_POSITION((int)counter)], 32768); counter += freq; } return(counter); }
// sound interface overrides //------------------------------------------------- // sound_stream_update - mix all inputs to one // output //------------------------------------------------- public override void sound_stream_update(sound_stream stream, std.vector <read_stream_view> inputs, std.vector <write_stream_view> outputs) //virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override; { // special case: single input, single output, same rate if (inputs.size() == 1 && outputs.size() == 1 && inputs[0].sample_rate() == outputs[0].sample_rate()) { outputs[0] = new write_stream_view(inputs[0]); //outputs[0] = inputs[0]; return; } // reset the clear flags std.fill(m_output_clear, false); //std::fill(std::begin(m_output_clear), std::end(m_output_clear), false); // loop over inputs for (int inputnum = 0; inputnum < m_auto_allocated_inputs; inputnum++) { // skip if the gain is 0 var input = inputs[inputnum]; if (input.gain() == 0) { continue; } // either store or accumulate int outputnum = m_outputmap[inputnum]; var output = outputs[outputnum]; if (!m_output_clear[outputnum]) { output.copy(input); } else { output.add(input); } m_output_clear[outputnum] = true; } // clear anything unused for (int outputnum = 0; outputnum < m_outputs; outputnum++) { if (!m_output_clear[outputnum]) { outputs[outputnum].fill(0); } } }