pub use cpal;
mod engine;
pub use engine::Audio;
mod play_buffer;
use play_buffer::PlayingTrack;
mod rate_converter;
use rate_converter::RateConverter;
mod audio_track;
mod sample;
use audio_track::*;
use sample::SampleTransform;
use cpal::{
Host,
HostId,
HostUnavailable,
Device,
DevicesError,
Devices,
OutputDevices,
traits::{
HostTrait,
DeviceTrait,
EventLoopTrait
},
UnknownTypeOutputBuffer,
StreamData,
StreamId,
EventLoop,
Sample,
Format,
StreamError,
};
use std::{
io,
vec::IntoIter,
iter::Cycle,
path::Path,
thread::{Builder,JoinHandle},
sync::{
Arc,
Mutex,
LockResult,
mpsc::{Sender,Receiver,channel},
},
};
enum AudioSystemCommand{
Play((usize,u32)),
Stop,
SetVolume(f32),
Close,
}
#[derive(Clone,Debug,PartialEq)]
pub enum AudioCommandResult{
Ok,
NoSuchTrack,
ThreadClosed,
TrackError,
}
impl AudioCommandResult{
pub fn unwrap(self){
if self!=AudioCommandResult::Ok{
panic!("{:?}",self)
}
}
pub fn expect(self,msg:&str){
if self!=AudioCommandResult::Ok{
panic!("{} {:?}",msg,self)
}
}
}
unsafe impl std::marker::Sync for AudioSystemCommand{}
unsafe impl std::marker::Send for AudioSystemCommand{}
#[derive(Clone,Copy)]
pub enum AudioOutputFormat{
Mono,
Stereo, }
impl AudioOutputFormat{
pub fn into_channels(self)->u16{
match self{
AudioOutputFormat::Mono=>1u16,
AudioOutputFormat::Stereo=>2u16,
}
}
}
#[derive(Clone)]
pub struct AudioSettings{
pub volume:f32,
pub output_format:AudioOutputFormat,
pub track_array_capacity:usize,
}
impl AudioSettings{
pub fn new()->AudioSettings{
Self{
volume:0.5f32,
output_format:AudioOutputFormat::Stereo,
track_array_capacity:1,
}
}
}
enum ChannelName{
FrontLeft,
FrontRight,
FrontCenter,
BackLeft,
BackRight,
}