Skip to content

Commit

Permalink
Initial release.
Browse files Browse the repository at this point in the history
  • Loading branch information
Lakelezz committed Mar 26, 2019
0 parents commit 177c1e2
Show file tree
Hide file tree
Showing 24 changed files with 1,806 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
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "opus"]
path = opus
url = https://github.com/xiph/opus/
23 changes: 23 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Contributing

Everyone is welcome to get involved, may it be a pull request, suggestion, bug report, or a textual improvement! : )

## Contributions

Contributions to `audiopus_sys` should be made via pull requests.
Issues display development-plans or required brainstorming, feel free to ask, suggest, and discuss!
The `master`-branch contains the latest release.

## Pull Request Checklist

- If a pull requests breaks the current API, use the `breaking-changes`-branch, otherwise `stable-changes`.

- Commits shall be as small as possible, compile, and pass all tests.

- Make sure your code is formatted with `rustfmt`.

- If you fixed a bug, add a test for that bug. Unit-Tests belong inside same file's `mod` named `tests`, integrational tests belong inside the `tests`-folder.

- Last but not least, make sure your planned pull request merges cleanly, if it does not, rebase your changes.

If you have any questions left, ask in a related issue or open a new one! : )
23 changes: 23 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
[package]
name = "audiopus_sys"
version = "0.1.0"
authors = ["Lakelezz <[email protected]>"]
keywords = ["audio", "opus", "codec"]
categories = ["api-bindings", "compression", "encoding",
"multimedia::audio", "multimedia::encoding"]
description = "FFI-Binding to Opus, dynamically or statically linked for Windows and UNIX."
readme = "README.md"
documentation = "https://docs.rs/audiopus_sys"
edition = "2018"

[dependencies]

[build-dependencies]
bindgen = "0.48.1"
log = "0.4.6"
pkg-config = "0.3.14"

[features]
default = []
dynamic = []
static = []
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.
66 changes: 66 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
[![ci-badge][]][ci] [![docs-badge][]][docs] [![rust 1.33+ badge]][rust 1.33+ link] [![crates.io version]][crates.io link]

# About

`audiopus_sys` is an FFI-Rust-binding to [`Opus`] version 1.3.

Orginally, this sys-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`, `audiopus_sys` will try finding Opus with `pkg-config`.

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

## Linking
`audiopus_sys` links to Opus 1.3 and supports Windows, Linux, and MacOS
By default, we statically link to Windows, MacOS, and if you use the
`musl`-environment. We will link dynamically for Linux except when using
mentioned `musl`.

This can be altered by compiling with the `static` or `dynamic` feature having effects respective to their names. If both features are enabled,
we will pick your system's default.

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 of 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_sys = "0.1.0"
```
[`serenity`]: https://crates.io/crates/serenity

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

[ci]: https://dev.azure.com/lakeware/audiopus_sys/_build?definitionId=4
[ci-badge]: https://img.shields.io/azure-devops/build/lakeware/cefad0bd-3570-41d2-b886-f452aedd028c/4/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_sys

[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_sys
[crates.io version]: https://img.shields.io/crates/v/audiopus_sys.svg?style=flat-square&colorB=b73732
42 changes: 42 additions & 0 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
jobs:
- template: 'azure-template-unix.yml'
parameters:
name: 'macOS_stable_static'
vmImage: 'xcode9-macos10.13'
toolchain: 'stable'
features: 'static'

- template: 'azure-template-unix.yml'
parameters:
name: 'macOS_stable_dynamic'
vmImage: 'xcode9-macos10.13'
toolchain: 'stable'
features: 'dynamic'

- template: 'azure-template-unix.yml'
parameters:
name: 'Linux_stable_static'
vmImage: 'ubuntu-16.04'
toolchain: 'stable'
features: 'static'

- template: 'azure-template-unix.yml'
parameters:
name: 'Linux_stable_dynamic'
vmImage: 'ubuntu-16.04'
toolchain: 'stable'
features: 'dynamic'

- template: 'azure-template-windows.yml'
parameters:
name: 'Windows_stable_static'
vmImage: 'vs2017-win2016'
toolchain: 'stable'
features: 'static'

- template: 'azure-template-windows.yml'
parameters:
name: 'Windows_stable_dynamic'
vmImage: 'vs2017-win2016'
toolchain: 'stable'
features: 'dynamic'
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:
- bash: |
if [[ "$OS" == "xcode9-macos10.13" ]]; then
HOMEBREW_NO_AUTO_UPDATE=1 brew install automake autoconf libtool
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
git submodule init
git submodule update
chmod +x opus/autogen.sh
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'
Loading

0 comments on commit 177c1e2

Please sign in to comment.