use rustraight::prelude::*;
fn asset(rel: &str) -> String {
format!("{}/検証素材/{}", env!("CARGO_MANIFEST_DIR"), rel)
}
fn main() {
init(WindowConfig {
title: String::from("10_sound"),
width: 700,
height: 400,
screen_width: 700,
screen_height: 400,
..Default::default()
});
let se16 = load_sound(&asset("sounds/se_16bit.wav"));
let se8 = load_sound(&asset("sounds/se_8bit.wav"));
let bgm = load_sound(&asset("sounds/bgm.ogg"));
let unsupported = load_sound(&asset("sounds/se.wav"));
let mut bgm_playing = false;
let mut bgm_volume = 1.0f32;
let mut bgm_freed = false;
while advance_frame() {
draw_fill(MAIN_SCREEN, Color::rgb(15, 15, 20));
draw_text(MAIN_SCREEN, 10, 10, format!("se_16bit handle={se16} se_8bit handle={se8} bgm handle={bgm}"), Color::WHITE);
draw_text(MAIN_SCREEN, 10, 30, format!("se.wav(32bit float, 非対応) load_sound結果: {unsupported} (0=失敗のはず)"), Color::RED);
draw_text(MAIN_SCREEN, 10, 70, "1: se_16bit再生 2: se_8bit再生 3: bgmループ再生/停止切替", Color::YELLOW);
draw_text(MAIN_SCREEN, 10, 90, "+/-: bgm音量変更 F: free_sound(bgm) A: free_all_sounds(不可逆)", Color::YELLOW);
draw_text(MAIN_SCREEN, 10, 120, format!("bgm_playing={bgm_playing} bgm_volume={bgm_volume:.2} bgm_freed={bgm_freed}"), Color::GREEN);
if is_just_pressed(KeyCode::Digit1) { play_sound(se16, false); log_info!("play_sound(se16, false)"); }
if is_just_pressed(KeyCode::Digit2) { play_sound(se8, false); log_info!("play_sound(se8, false)"); }
if is_just_pressed(KeyCode::Digit3) {
bgm_playing = !bgm_playing;
if bgm_playing { play_sound(bgm, true); } else { stop_sound(bgm); }
}
if is_just_pressed(KeyCode::Equal) { bgm_volume = (bgm_volume + 0.1).min(1.0); set_volume(bgm, bgm_volume); }
if is_just_pressed(KeyCode::Minus) { bgm_volume = (bgm_volume - 0.1).max(0.0); set_volume(bgm, bgm_volume); }
if is_just_pressed(KeyCode::KeyF) && !bgm_freed {
free_sound(bgm);
bgm_freed = true;
bgm_playing = false;
}
if is_just_pressed(KeyCode::KeyA) {
free_all_sounds();
log_info!("free_all_sounds() 実行。以後このプロセス内では音声再生が一切効かなくなるはず");
}
}
}