1#![no_main]
7
8use dos_like::{
9 curs_off, dos_like_sys::*, goto_xy, install_user_soundbank, key_state, load_wav, play_sound,
10 put_str, set_sound_mode, set_soundbank, shutting_down, stop_music, stop_sound, KeyCode, Music,
11 SoundMode, Soundbank,
12};
13
14#[no_mangle]
15pub extern "C" fn dosmain() -> i32 {
16 unsafe {
17 let mus = Music::load_mus("dos-like-sys/dos-like/files/sound/doom.mus")
18 .expect("Could not load doom.mus");
19 let mid = Music::load_mid("dos-like-sys/dos-like/files/sound/simon.mid")
20 .expect("Could not load simon.mid");
21 let r#mod = Music::load_mod("dos-like-sys/dos-like/files/sound/cfodder.mod")
22 .expect("Could not load cfodder.mod");
23 let opb = Music::load_opb("dos-like-sys/dos-like/files/sound/doom.opb")
24 .expect("Could not load doom.opb");
25 let wav = load_wav("dos-like-sys/dos-like/files/sound/soundcard.wav")
26 .expect("Could not load soundcard.wav");
27 let doom_soundbank = install_user_soundbank("dos-like-sys/dos-like/files/sound/doom.op2")
28 .expect("Could not load doom.op2");
29
30 let mut use_awe32 = true;
31
32 put_str("SOUND DEMO");
33 goto_xy(0, 2);
34 put_str("1 - Play MIDI song");
35 goto_xy(0, 3);
36 put_str("2 - Play MUS song");
37 goto_xy(0, 4);
38 put_str("3 - Play MOD song");
39 goto_xy(0, 5);
40 put_str("4 - Play WAV sound on channel 1");
41 goto_xy(0, 6);
42 put_str("5 - Play WAV sound on channel 2");
43 goto_xy(0, 7);
44 put_str("6 - Play WAV sound on channel 3");
45 goto_xy(0, 8);
46 put_str("7 - Stop sound and music");
47 goto_xy(0, 9);
48 put_str("8 - Sound mode 11khz 8bit mono (default)");
49 goto_xy(0, 10);
50 put_str("9 - Sound mode 44khz 16bit stereo");
51 goto_xy(0, 11);
52 put_str("0 - Sound mode 5khz 8bit mono");
53 goto_xy(0, 12);
54 put_str("A - Use AWE32 for MIDI/MUS (default)");
55 goto_xy(0, 13);
56 put_str("S - Use SoundBlaster16 for MIDI/MUS");
57 goto_xy(0, 14);
58 put_str("O - Play OPB song");
59 goto_xy(0, 16);
60 put_str("ESC - quit");
61 curs_off();
62 while !shutting_down() {
63 let key = *readchars() as u8;
64 match key {
65 b'1' => {
66 if use_awe32 {
67 set_soundbank(&Soundbank::DEFAULT_AWE32);
68 } else {
69 set_soundbank(&Soundbank::DEFAULT_SB16);
70 }
71 mid.play(false, 255);
72 }
73 b'2' => {
74 if use_awe32 {
75 set_soundbank(&Soundbank::DEFAULT_AWE32);
76 } else {
77 set_soundbank(&doom_soundbank);
78 }
79 mus.play(false, 255);
80 }
81 b'3' => {
82 r#mod.play(false, 255);
83 }
84 b'O' | b'o' => {
85 opb.play(false, 255);
86 }
87 b'4' => {
88 play_sound(0, &wav, false, 128);
89 }
90 b'5' => {
91 play_sound(1, &wav, false, 128);
92 }
93 b'6' => {
94 play_sound(2, &wav, false, 128);
95 }
96 b'7' => {
97 stop_music();
98 stop_sound(0);
99 stop_sound(1);
100 stop_sound(2);
101 }
102 b'8' => {
103 set_sound_mode(SoundMode::Mono8bit11025);
104 }
105 b'9' => {
106 set_sound_mode(SoundMode::Mono16Bit44100);
107 }
108 b'0' => {
109 set_sound_mode(SoundMode::Mono8bit5000);
110 }
111 b'A' | b'a' => {
112 if !use_awe32 {
113 use_awe32 = true;
114 stop_music();
115 }
116 }
117 b'S' | b's' => {
118 if use_awe32 {
119 use_awe32 = false;
120 stop_music();
121 }
122 }
123 _ => {}
124 }
125 if key_state(KeyCode::KEY_ESCAPE) {
126 break;
127 }
128 }
129 }
130 0
131}