12 #include "../stdafx.h"
13 #include "../openttd.h"
14 #include "../sound_type.h"
18 #include <sys/types.h>
26 #include <pspaudiolib.h>
29 #include "../safeguards.h"
39 MidSongOptions options;
48 static void AudioOutCallback(
void *buf,
unsigned int _reqn,
void *userdata)
50 memset(buf, 0, _reqn * PSP_NUM_AUDIO_CHANNELS);
51 if (
_midi.status == MIDI_PLAYING) {
52 mid_song_read_wave(
_midi.song, buf, _reqn * PSP_NUM_AUDIO_CHANNELS);
62 _midi.status = MIDI_STOPPED;
65 if (mid_init(param == NULL ? NULL : const_cast<char *>(param[0])) < 0) {
69 if (param != NULL || mid_init_no_config() < 0) {
70 return "error initializing timidity";
73 DEBUG(driver, 1,
"successfully initialised timidity");
75 _midi.options.rate = 44100;
76 _midi.options.format = MID_AUDIO_S16LSB;
77 _midi.options.channels = 2;
79 _midi.options.buffer_size = PSP_NUM_AUDIO_SAMPLES;
81 _midi.options.buffer_size =
_midi.options.rate;
86 pspAudioSetChannelCallback(
_midi.options.channels, &AudioOutCallback, NULL);
87 pspAudioSetVolume(
_midi.options.channels, PSP_VOLUME_MAX, PSP_VOLUME_MAX);
103 _midi.stream = mid_istream_open_file(filename);
104 if (
_midi.stream == NULL) {
105 DEBUG(driver, 0,
"Could not open music file");
110 mid_istream_close(
_midi.stream);
111 _midi.song_length = mid_song_get_total_time(
_midi.song);
113 if (
_midi.song == NULL) {
114 DEBUG(driver, 1,
"Invalid MIDI file");
118 mid_song_start(
_midi.song);
119 _midi.status = MIDI_PLAYING;
124 _midi.status = MIDI_STOPPED;
126 if (
_midi.song != NULL) mid_song_free(
_midi.song);
132 if (
_midi.status == MIDI_PLAYING) {
133 _midi.song_position = mid_song_get_time(
_midi.song);
134 if (
_midi.song_position >=
_midi.song_length) {
135 _midi.status = MIDI_STOPPED;
136 _midi.song_position = 0;
140 return (
_midi.status == MIDI_PLAYING);
145 if (
_midi.song != NULL) mid_song_set_volume(
_midi.song, vol);