コード例 #1
0
        /* 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);
        }
コード例 #2
0
        // 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);
                }
            }
        }