Skip to content

Commit

Permalink
Initial release.
Browse files Browse the repository at this point in the history
  • Loading branch information
Lakelezz committed Mar 29, 2019
0 parents commit c739cd2
Show file tree
Hide file tree
Showing 15 changed files with 2,096 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/target
**/*.rs.bk
Cargo.lock
30 changes: 30 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
[package]
name = "audiopus"
version = "0.1.0"
license = "ISC"
repository = "https://github.com/lakelezz/audiopus.git"
authors = ["Lakelezz <lakelezz@protonmail.ch>"]
keywords = ["audio", "opus", "codec"]
categories = ["api-bindings", "compression", "encoding",
"multimedia::audio", "multimedia::encoding"]
description = "High-level binding of the Opus Codec library."
readme = "README.md"
documentation = "https://docs.rs/audiopus"
edition = "2018"

[dependencies]
audiopus_sys = "0.1"

[dev-dependencies.matches]
version = "0.1.8"

[features]
default_features = ["coder"]

encoder = ["packet"]
decoder = ["packet"]
coder = ["encoder", "decoder"]

packet = []
repacketizer = ["packet"]
multistream = []
15 changes: 15 additions & 0 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
ISC License

Copyright (c) 2019, Lakelezz

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
67 changes: 67 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
[![ci-badge][]][ci] [![docs-badge][]][docs] [![rust 1.33+ badge]][rust 1.33+ link] [![crates.io version]][crates.io link]

# About

`audiopus` is a high-level binding of [`Opus`] version 1.3.

Orginally, this crate was made to empower the [`serenity`]-crate to build audio features on Windows, Linux, and Mac.

Everyone is welcome to contribute,
check out the [`CONTRIBUTING.md`](CONTRIBUTING.md) for further guidance.

# Building

## Requirements

### UNIX/GNU/MSYS2
You will need `gcc`, `libclang`, `make`, `automake`, `autoconf`, and
`libtool`.
Note that `automake` uses `autoconf` as dependency already.
If you have `pkg-config`, the underlying [`audiopus_sys`]-crate will try finding
Opus with `pkg-config`.

### MSVC
Currently, `audiopus` links to a prebuilt Opus hence should just work.
It supports x86 and x64 as dynamic or static build.

## How Audiopus links
`audiopus` uses [`audiopus_sys`], it links to Opus 1.3 and supports Windows,
Linux, and MacOS.
By default, it statically links to Windows, MacOS, and if you use the
`musl`-environment. It will link dynamically for Linux except when using
mentioned `musl`.

Environment variables named `LIBOPUS_STATIC` or `OPUS_STATIC` will take
precedence over features thus overriding the behaviour. The value of these
environment variables have no influence on the result: If one of them is set,
statically linking will be picked.

## Pre-installed Opus
If you have Opus pre-installed, you can set `LIBOPUS_LIB_DIR` or
`OPUS_LIB_DIR` to point to the directory in which your Opus lies.
Be aware that using an Opus other than version 1.3 may not work.

# Installation
Add this to your `Cargo.toml`:

```toml
[dependencies]
audiopus = "0.1.0"
```
[`serenity`]: https://crates.io/crates/serenity

[`Opus`]: https://www.opus-codec.org/

[`audiopus_sys`]: https://github.com/Lakelezz/audiopus_sys.git

[ci]: https://dev.azure.com/lakeware/audiopus/_build?definitionId=6
[ci-badge]: https://img.shields.io/azure-devops/build/lakeware/9c5a7495-9549-45b5-9f18-a01634be27e2/6/master.svg?style=flat-square

[docs-badge]: https://img.shields.io/badge/docs-online-5023dd.svg?style=flat-square&colorB=32b6b7
[docs]: https://docs.rs/audiopus

[rust 1.33+ badge]: https://img.shields.io/badge/rust-1.33+-93450a.svg?style=flat-square&colorB=ff9a0d
[rust 1.33+ link]: https://blog.rust-lang.org/2019/02/28/Rust-1.33.0.html

[crates.io link]: https://crates.io/crates/audiopus
[crates.io version]: https://img.shields.io/crates/v/audiopus.svg?style=flat-square&colorB=b73732
18 changes: 18 additions & 0 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
jobs:
- template: 'azure-template-unix.yml'
parameters:
name: 'macOS_stable'
vmImage: 'xcode9-macos10.13'
toolchain: 'stable'

- template: 'azure-template-unix.yml'
parameters:
name: 'Linux_stable'
vmImage: 'ubuntu-16.04'
toolchain: 'stable'

- template: 'azure-template-windows.yml'
parameters:
name: 'Windows_stable'
vmImage: 'vs2017-win2016'
toolchain: 'stable'
46 changes: 46 additions & 0 deletions azure-template-unix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
parameters:
name: ''
vmImage: ''
toolchain: 'stable'
features: 'all'

jobs:
- job: ${{ parameters.name }}
pool:
vmImage: ${{ parameters.vmImage }}
variables:
tc: ${{ parameters.toolchain }}
os: ${{ parameters.vmImage }}
features: ${{ parameters.features }}
steps:
- checkout: self
submodules: true

- bash: |
if [[ "$OS" == "xcode9-macos10.13" ]]; then
HOMEBREW_NO_AUTO_UPDATE=1 brew install automake autoconf libtool pkg-config
fi
displayName: 'Install dependencies'
- bash: |
curl -o rustup-init.sh https://sh.rustup.rs -sSf
sh rustup-init.sh --default-toolchain $(tc) -y
displayName: 'Install Rust'
- bash: |
source $HOME/.cargo/env
if [[ "$(features)" == "all" ]]; then
cargo build --all-features
else
cargo build --no-default-features --features "$(features)"
fi
displayName: 'Build Audiopus'
- bash: |
source $HOME/.cargo/env
if [[ "$(features)" == "all" ]]; then
cargo test --all-features
else
cargo test --no-default-features --features "$(features)"
fi
displayName: 'Test Audiopus'
36 changes: 36 additions & 0 deletions azure-template-windows.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
parameters:
name: ''
vmImage: ''
toolchain: 'stable'
features: 'all'

jobs:
- job: ${{ parameters.name }}
pool:
vmImage: ${{ parameters.vmImage }}
variables:
tc: ${{ parameters.toolchain }}
features: ${{ parameters.features }}
steps:
- powershell: |
Invoke-WebRequest -Uri "https://win.rustup.rs" -OutFile "rustup-init.exe"
&".\rustup-init.exe" --default-toolchain $(tc) -y
displayName: 'Install Rust'
- powershell: |
If ("$(features)" -eq "all") {
&"$env:USERPROFILE\.cargo\bin\cargo" build --all-features
}
Else {
&"$env:USERPROFILE\.cargo\bin\cargo" build --no-default-features --features "$(features)"
}
displayName: 'Build Audiopus'
- powershell: |
If ("$(features)" -eq "all") {
&"$env:USERPROFILE\.cargo\bin\cargo" test --all-features
}
Else {
&"$env:USERPROFILE\.cargo\bin\cargo" test --no-default-features --features "$(features)"
}
displayName: 'Test Audiopus'
27 changes: 27 additions & 0 deletions src/coder.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
use crate::{Error, SampleRate};

pub use self::{
decoder::{size, Decoder},
encoder::Encoder,
};

mod decoder;
mod encoder;

/// A set of methods that both `Encoder` and `Decoder` have implemented.
///
/// **Info**:
/// This does not include `set_sample_rate` as it returns unimplemented on
/// [`Decoder`].
///
/// [`Decoder`]: decoder/struct.Decoder.html
pub trait GenericCtl {
fn final_range(&self) -> Result<u32, Error>;

fn phase_inversion_disabled(&self) -> Result<bool, Error>;
fn set_phase_inversion_disabled(&mut self, disabled: bool) -> Result<(), Error>;

fn sample_rate(&self) -> Result<SampleRate, Error>;

fn reset_state(&mut self) -> Result<(), Error>;
}
Loading

0 comments on commit c739cd2

Please sign in to comment.