Esempio n. 1
0
static void AudioOutCallback(void *buf, unsigned int _reqn, void *userdata)
{
    memset(buf, 0, _reqn * PSP_NUM_AUDIO_CHANNELS);
    if (_midi.status == MIDI_PLAYING) {
        mid_song_read_wave(_midi.song, buf, _reqn * PSP_NUM_AUDIO_CHANNELS);
    }
}
Esempio n. 2
0
static int timidity_decode (void *void_data, char *buf, int buf_len,
		struct sound_params *sound_params)
{
  struct timidity_data *data = (struct timidity_data *)void_data;

  sound_params->channels = midioptions.channels;
  sound_params->rate = midioptions.rate;
  sound_params->fmt = (midioptions.format==MID_AUDIO_S16LSB)?(SFMT_S16 | SFMT_LE):SFMT_S8;

  return mid_song_read_wave(data->midisong, buf, buf_len);
}
Esempio n. 3
0
/* generate audio data and advance internal timers */
static GstBuffer *
gst_timidity_fill_buffer (GstTimidity * timidity, GstBuffer * buffer)
{
  size_t bytes_read;
  gint64 samples;

  bytes_read = mid_song_read_wave (timidity->song, GST_BUFFER_DATA (buffer),
      GST_BUFFER_SIZE (buffer));

  if (bytes_read == 0) {
    gst_buffer_unref (buffer);
    return NULL;
  }

  GST_BUFFER_OFFSET (buffer) =
      timidity->o_segment->last_stop * timidity->bytes_per_frame;
  GST_BUFFER_TIMESTAMP (buffer) =
      timidity->o_segment->last_stop * timidity->time_per_frame;

  if (bytes_read < GST_BUFFER_SIZE (buffer)) {
    GstBuffer *old = buffer;

    buffer = gst_buffer_create_sub (buffer, 0, bytes_read);
    gst_buffer_unref (old);
  }

  samples = GST_BUFFER_SIZE (buffer) / timidity->bytes_per_frame;

  timidity->o_segment->last_stop += samples;

  GST_BUFFER_OFFSET_END (buffer) =
      timidity->o_segment->last_stop * timidity->bytes_per_frame;
  GST_BUFFER_DURATION (buffer) = samples * timidity->time_per_frame;

  GST_DEBUG_OBJECT (timidity,
      "generated buffer %" GST_TIME_FORMAT "-%" GST_TIME_FORMAT
      " (%" G_GINT64_FORMAT " samples)",
      GST_TIME_ARGS ((guint64) GST_BUFFER_TIMESTAMP (buffer)),
      GST_TIME_ARGS (((guint64) (GST_BUFFER_TIMESTAMP (buffer) +
                  GST_BUFFER_DURATION (buffer)))), samples);

  return buffer;
}
Esempio n. 4
0
//private:
qint64 MidiDecoder::readData(char *data, qint64 maxlen)
{
    if (d->state != QtopiaMedia::Playing)
        return 0;

    qint64      rc = 0;

    if (maxlen > 0) {
        quint32 position = (mid_song_get_time(d->song) / 1000) * 1000;
        if (d->position != position) {
            d->position = position;
            emit positionChanged(d->position);
        }

        if ((rc = (qint64) mid_song_read_wave(d->song, data, maxlen)) == 0) {
            seek(0);
            mid_song_start(d->song);
            emit playerStateChanged(d->state = QtopiaMedia::Stopped);
        }
    }

    return rc;
}