Last active 1741880547

play_audio_v01.rs Raw
1use mlua::prelude::*;
2use std::fs::File;
3use std::io::BufReader;
4use rodio::{Decoder, OutputStream, Sink};
5use std::time::Duration;
6use futures_timer::Delay;
7
8async fn play_local_file(lua: &Lua, (filepath, volume, duration): (String, f32, u64)) -> LuaResult<()> {
9 let (_stream, stream_handle) = OutputStream::try_default().unwrap();
10 let sink = Sink::try_new(&stream_handle).unwrap();
11 sink.set_volume(volume);
12 let file = BufReader::new(File::open(filepath).unwrap());
13 let source = Decoder::new(file).unwrap();
14 sink.append(source);
15 Delay::new(Duration::from_millis(duration)).await;
16 Ok(())
17}
18
19#[tokio::main]
20#[mlua::lua_module]
21async fn lua_audio(lua: &Lua) -> LuaResult<LuaTable> {
22 let exports = lua.create_table()?;
23 exports.set("play_from_file", lua.create_async_function(play_local_file)?)?;
24 Ok(exports)
25}
26
27#[mlua::lua_module]
28fn rust_module_error(_: &Lua) -> LuaResult<LuaTable> {
29 Err("custom module error".to_lua_err())
30}