Git Product home page Git Product logo

thindx-xaudio2's Introduction

๐Ÿ’ฌ Contact

๐Ÿต Activity

โ— Website โ— Pull Requests โ— Notes โ—

โš™๏ธ Rust

โ— Reviews โ— Guide: C++ vs Rust โ—

authored desc
Subcommands
cargo-container Package rlibs in several containing frontends
cargo-html create self-contained HTML programs
cargo-local-install Wraps cargo install for better local, non-conflicting installation
cargo-vs Autogenerate visual studio solutions / projects
cargo-vsc Autogenerate .vscode folders
General
abibool C ABI compatible boolean types
abistr C ABI compatible string types
bugsalot Rust macros for bug wrangling, debugger interop.
firehazard ๐Ÿ”ฅ Safe, "sound", 1:1 windows security API wrappers
hwnd Windows HWND wrappers
mcom ๐Ÿ‘ฝ COM smart pointers and interop functions
minidl Extremely lean cross platform library for loading symbols
thindx ๐ŸŽฎ Safe, "sound", 1:1 DirectX wrappers
thindx-xinput ๐ŸŽฎ Safe, "sound", 1:1 XInput wrappers
thindx-xaudio2 ๐Ÿ”Š Safe, "sound", 1:1 XAudio2 wrappers
untokio Pretend tokio doesn't exist
vfs-clgit Virtual FileSystem abstraction around Command Line GIT
vfs-zip Virtual FileSystem abstraction around zip archives
winresult Windows HRESULT and error code wrappers
winstr Windows BSTR wrappers
Build Tooling
appx Manage appx packages
clgit Command Line GIT wrappers
json-spanned-value Track the origin of your json values for better error reporting!
lies LIcense Embedding System
mmrbi Rust Build Infrastructure
natvis-pdbs Embed .natvis files into your .pdbs, for ease of debugging.
wslapi Managing the Windows Subsystem for Linux
Binaries
mmuhttpd 0 deps 100% monkey HTTP server
rust_win32_sample Basic samples relying only on winapi
rust-opendingux-test OpenGL on RG350M demo
contributions desc
Major
nonmax NonMax* equivalents to NonZero*
Medium
crev Distributed Code Reviews
midir Cross-platform, realtime MIDI processing in Rust.
rust rustc itself!
wmi Windows Management Instrumentation
Minor
inventory typed distributed plugin registration
lokacore ???
num_cpus Count the number of CPUs on the current machine
quicksilver web+desktop 2d gamedev framework
rust-android-gradle Cross compile Rust Cargo projects for Android targets.
rusty-xinput Dynamically loads an xinput dll and lets you safely call the functions.
tempfile Temporary files management
xml XML reader/writers

thindx-xaudio2's People

Contributors

maulingmonkey avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

thindx-xaudio2's Issues

Overhaul doc versioning

Having the same symbol exported N times in docs.rs is lame.
Abuse wildcards, probably. And #[doc(no_inline)].

Don't require importing winresult to use thindx-xaudio2

fn on_voice_error(&self, _buffer_context: &Self::BufferContext, error: winresult::HResult) { panic!("{error:?}"); }

This effectively requires pulling in winresult just to impl this semi-mandatory trait.
Also consider making a callbackless version of this, or at least introduce:

  • impl DefaultVoiceCallback for VoiceCallback
  • impl DefaultEngineCallback for EngineCallback

Which would presumably panic on errors but otherwise do โ‰ˆnothing. The A440 sample really shouldn't be forced to impl callbacks.

voice destruction

  • DestroyVoice warns of perf issues / delays measured in milliseconds
  • destroy_voice_async for automatic offloading to a worker thread per doc suggestions?
  • features to make drop do so automatically?
  • Also probably bad to allow them to outlive IXAudio2
  • Make SourceVoice et all borrow IXAudio2?

Provenance tracking issues

core::ptr::from_raw_parts is not yet stable

Which is a problem for here:

b.pContext = Box::into_raw(Box::new(SourceBuffer::<Context> {
context,
audio_len: audio_data.len(),
audio_data: {
// โš ๏ธ WARNING: easy to muck up provenance of ArcInner<[Sample]> here.
let raw : *const [Sample] = Arc::into_raw(audio_data);
let raw : *const Sample = unsafe { (*raw).as_ptr() };
raw.cast()
},
audio_free: |data, len| {
// ๐Ÿž BUG: core::slice::from_raw_parts here incorrectly narrows provenance from ArcInner<[Sample]> to [Sample] here.
// However, core::ptr::from_raw_parts is not yet stable: https://github.com/rust-lang/rust/issues/81513
// Local tracking issue: https://github.com/MaulingMonkey/thindx-xaudio2/issues/18
let audio_data : *const [Sample] = unsafe { core::slice::from_raw_parts(data as *const Sample, len) };
let audio_data = unsafe { Arc::from_raw(audio_data) };
drop(audio_data);
},
})).cast();

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.