Mercurial > repos > blastem
annotate mediaplayer.h @ 2688:b42f00a3a937 default tip
Fix default target. Ensure m68k.h and z80.h are built before anything else when no dep info is available
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 31 Mar 2025 21:06:18 -0700 |
parents | fb8f49b0aece |
children |
rev | line source |
---|---|
2289
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 #ifndef MEDIAPLAYER_H_ |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 #define MEDIAPLAYER_H_ |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 #include <stdint.h> |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 #include "system.h" |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 #include "vgm.h" |
2290
c4980d89614b
Support WAVE files in media player
Michael Pavone <pavone@retrodev.com>
parents:
2289
diff
changeset
|
7 #include "wave.h" |
2296
789802d99629
Add basic FLAC decoder and add FLAC playback support to the media player
Michael Pavone <pavone@retrodev.com>
parents:
2290
diff
changeset
|
8 #include "flac.h" |
2374
97f164d1f0f6
Re-enable VGM looping. Enable oscilloscope in VGM player. Fix VGM player PSG output
Michael Pavone <pavone@retrodev.com>
parents:
2296
diff
changeset
|
9 #include "oscilloscope.h" |
2290
c4980d89614b
Support WAVE files in media player
Michael Pavone <pavone@retrodev.com>
parents:
2289
diff
changeset
|
10 #include "render_audio.h" |
2375
02c04196c2da
Fix mediaplayer play/pause handling
Michael Pavone <pavone@retrodev.com>
parents:
2374
diff
changeset
|
11 #include "io.h" |
2289
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 typedef struct chip_info chip_info; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 typedef void (*chip_run_fun)(void *context, uint32_t cycle); |
2374
97f164d1f0f6
Re-enable VGM looping. Enable oscilloscope in VGM player. Fix VGM player PSG output
Michael Pavone <pavone@retrodev.com>
parents:
2296
diff
changeset
|
15 typedef void (*chip_scope_fun)(chip_info *chip, oscilloscope *scope); |
97f164d1f0f6
Re-enable VGM looping. Enable oscilloscope in VGM player. Fix VGM player PSG output
Michael Pavone <pavone@retrodev.com>
parents:
2296
diff
changeset
|
16 typedef void (*chip_noarg_fun)(void *context); |
2289
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 typedef void (*chip_adjust_fun)(chip_info *chip); |
2482
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
18 typedef void (*chip_stream_fun)(chip_info *chip, uint8_t port, uint8_t command, uint16_t sample); |
2289
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 struct chip_info { |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 void *context; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 chip_run_fun run; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 chip_adjust_fun adjust; |
2374
97f164d1f0f6
Re-enable VGM looping. Enable oscilloscope in VGM player. Fix VGM player PSG output
Michael Pavone <pavone@retrodev.com>
parents:
2296
diff
changeset
|
23 chip_scope_fun scope; |
97f164d1f0f6
Re-enable VGM looping. Enable oscilloscope in VGM player. Fix VGM player PSG output
Michael Pavone <pavone@retrodev.com>
parents:
2296
diff
changeset
|
24 chip_noarg_fun no_scope; |
2377
30e59954eab9
Properly free sound chips in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2376
diff
changeset
|
25 chip_noarg_fun free; |
2482
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
26 chip_stream_fun stream; |
2289
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 data_block *blocks; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 uint32_t clock; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 uint32_t samples; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 uint8_t cmd; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 uint8_t data_type; |
2482
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
32 uint8_t stream_type; |
2289
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 }; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 |
2482
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
35 typedef struct { |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
36 chip_info *chip; |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
37 data_block *cur_block; |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
38 uint32_t step; |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
39 uint32_t block_offset; |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
40 uint32_t start_offset; |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
41 uint32_t cycles_per_sample; |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
42 uint32_t sample_rate; |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
43 uint32_t next_sample_cycle; |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
44 uint32_t remaining; // sample count or command count |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
45 uint8_t data_type; |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
46 uint8_t port; |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
47 uint8_t command; |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
48 uint8_t flags; |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
49 uint8_t length_mode; |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
50 } vgm_stream; |
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
51 |
2376
1c09f5be285b
Very basic UI for media player
Michael Pavone <pavone@retrodev.com>
parents:
2375
diff
changeset
|
52 enum { |
1c09f5be285b
Very basic UI for media player
Michael Pavone <pavone@retrodev.com>
parents:
2375
diff
changeset
|
53 STATE_PLAY, |
1c09f5be285b
Very basic UI for media player
Michael Pavone <pavone@retrodev.com>
parents:
2375
diff
changeset
|
54 STATE_PAUSED |
1c09f5be285b
Very basic UI for media player
Michael Pavone <pavone@retrodev.com>
parents:
2375
diff
changeset
|
55 }; |
1c09f5be285b
Very basic UI for media player
Michael Pavone <pavone@retrodev.com>
parents:
2375
diff
changeset
|
56 |
2289
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 typedef struct { |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 system_header header; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 system_media *media; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 vgm_header *vgm; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 vgm_extended_header *vgm_ext; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 data_block *ym_seek_block; |
2290
c4980d89614b
Support WAVE files in media player
Michael Pavone <pavone@retrodev.com>
parents:
2289
diff
changeset
|
63 wave_header *wave; |
2296
789802d99629
Add basic FLAC decoder and add FLAC playback support to the media player
Michael Pavone <pavone@retrodev.com>
parents:
2290
diff
changeset
|
64 flac_file *flac; |
2290
c4980d89614b
Support WAVE files in media player
Michael Pavone <pavone@retrodev.com>
parents:
2289
diff
changeset
|
65 audio_source *audio; |
2289
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 chip_info *chips; |
2374
97f164d1f0f6
Re-enable VGM looping. Enable oscilloscope in VGM player. Fix VGM player PSG output
Michael Pavone <pavone@retrodev.com>
parents:
2296
diff
changeset
|
67 oscilloscope *scope; |
2482
fb8f49b0aece
Impelement partial support for DAC stream commands in VGM player
Michael Pavone <pavone@retrodev.com>
parents:
2377
diff
changeset
|
68 vgm_stream *streams[256]; |
2289
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 uint32_t num_chips; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 uint32_t current_offset; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 uint32_t playback_time; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 uint32_t wait_samples; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 uint32_t ym_seek_offset; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 uint32_t ym_block_offset; |
2374
97f164d1f0f6
Re-enable VGM looping. Enable oscilloscope in VGM player. Fix VGM player PSG output
Michael Pavone <pavone@retrodev.com>
parents:
2296
diff
changeset
|
75 uint32_t loop_count; |
2289
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 uint8_t state; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 uint8_t media_type; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 uint8_t should_return; |
2375
02c04196c2da
Fix mediaplayer play/pause handling
Michael Pavone <pavone@retrodev.com>
parents:
2374
diff
changeset
|
79 uint8_t button_state[NUM_GAMEPAD_BUTTONS]; |
2289
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 } media_player; |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
81 |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
82 media_player *alloc_media_player(system_media *media, uint32_t opts); |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
83 |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
84 |
92449b47cce8
Integrate VGM player into main blastem binary
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
85 #endif //MEDIAPLAYER_H_ |