Initial commit

This commit is contained in:
Pierre Krieger 2014-12-11 14:22:55 +01:00
commit 4f96e54e31
6 changed files with 78 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
/target
/Cargo.lock
.cargo/

1
.travis.yml Normal file
View File

@ -0,0 +1 @@
language: rust

11
Cargo.toml Normal file
View File

@ -0,0 +1,11 @@
[package]
name = "cpal"
version = "0.0.1"
authors = ["Pierre Krieger <pierre.krieger1708@gmail.com>"]
description = "Cross-platform audio playing library in pure Rust."
[dependencies.winapi]
git = "https://github.com/tomaka/winapi-rs"
branch = "mmdeviceapi"
features = ["ole32"]

3
README.md Normal file
View File

@ -0,0 +1,3 @@
# CPAL - Cross-platform audio library
Audio player in pure Rust.

7
src/lib.rs Normal file
View File

@ -0,0 +1,7 @@
#[cfg(all(not(windows)))]
use this_platform_is_not_supported;
#[cfg(windows)]
#[path="wasapi/mod.rs"]
mod cpal_impl;

53
src/wasapi/mod.rs Normal file
View File

@ -0,0 +1,53 @@
extern crate libc;
extern crate winapi;
#[link(name = "uuid")]
extern "C" {
static CLSID_MMDeviceEnumerator: winapi::CLSID;
static IID_IMMDeviceEnumerator: winapi::IID;
}
fn create() -> Result<(), String> {
unsafe {
try!(check_result(winapi::CoInitializeEx(::std::ptr::null_mut(), 0)));
let enumerator = {
let mut enumerator: *mut winapi::IMMDeviceEnumerator = ::std::mem::uninitialized();
let hresult = winapi::CoCreateInstance(&CLSID_MMDeviceEnumerator,
::std::ptr::null_mut(), winapi::CLSCTX_ALL,
&IID_IMMDeviceEnumerator,
::std::mem::transmute(&mut enumerator));
try!(check_result(hresult));
enumerator.as_mut().unwrap()
};
// getting the default end-point
let device = {
let mut device: *mut winapi::IMMDevice = ::std::mem::uninitialized();
let f = enumerator.lpVtbl.as_ref().unwrap().GetDefaultAudioEndpoint;
let hresult = f(enumerator, winapi::EDataFlow::eRender, winapi::ERole::eConsole,
::std::mem::transmute(&mut device));
try!(check_result(hresult));
device.as_mut().unwrap()
};
// activating
let audio_client = {
//let mut audio_client: *mut winapi::IAudioClient = ::std::mem::uninitialized();
let f = device.lpVtbl.as_ref().unwrap().Activate;
//let hresult = f(IID_IAudioClient, winapi::CLSCTX_ALL, ::std::ptr::null_mut(),
// ::std::mem::transmute(&mut audio_client));
//try!(check_result(hresult));
};
};
Ok(())
}
fn check_result(result: winapi::HRESULT) -> Result<(), String> {
// TODO:
Ok(())
}