Cleanup and docs

Signed-off-by: Aron Heinecke <aron.heinecke@t-online.de>
This commit is contained in:
Aron Heinecke 2021-08-13 15:11:59 +02:00
parent a9460dca13
commit ce4d14c830
4 changed files with 14 additions and 19 deletions

View file

@ -7,14 +7,22 @@ This software is in an MVP status, use at your own risk, like always.
## Building
get [rust](https://rust-lang.org) compiler with cargo
`cargo build --release`
Then run `cargo build --release`
.exe/elf is inside target/release/
You can also run `cargo run --release` instead to directly build & execute the resulting binary.
## Starting
Setup your credentials inside .credentials.toml by copying credentials.example.toml
Then join a voice channel in discord, type ~join in a text channel the bot can access. The teamspeak side should already be connected based on your config.
Then join a voice channel, type ~join in a text channel the bot can access.
## Debugging
To enable backtrace you can set the `RUST_BACKTRACE` environment variable like so:
On linux run with `RUST_BACKTRACE=1` (so `RUST_BACKTRACE=1 cargo run --release`)
On windows execute `$Env:RUST_BACKTRACE='1'` in your powershell (I recommend windows terminal). Then run the binary from there, see above.
Logging can be controlled via `RUST_LOG=<value>` environment variable with `<value>` being one of error, warn, info, debug, trace. See above for setting it.
## License

View file

@ -7,7 +7,6 @@ use audiopus::coder::Decoder;
use serde::Deserialize;
use serenity::prelude::{Mentionable, Mutex};
use slog::error;
// This trait adds the `register_songbird` and `register_songbird_with` methods
// to the client builder below, making it easy to install this voice client.
// The voice client can be retrieved in any command using `songbird::get(ctx).await`.
@ -37,9 +36,8 @@ use songbird::{
EventContext,
EventHandler as VoiceEventHandler,
};
use tsproto_packets::packets::{Direction, InAudioBuf};
use crate::{I16_CONVERSION_DIVIDER, ListenerHolder};
use crate::ListenerHolder;
pub(crate) struct Handler;

View file

@ -19,7 +19,6 @@ use audiopus::coder::Decoder;
use audiopus::{packet, Channels, SampleRate};
use slog::{Logger, debug, info, o, trace, warn};
use tsclientlib::audio::Error;
use tsproto_packets::packets::{AudioData, CodecType, InAudioBuf};
use crate::ClientId;
@ -169,9 +168,6 @@ impl AudioQueue {
Ok(res)
}
pub fn get_decoder(&self) -> &Decoder { &self.decoder }
pub fn is_whispering(&self) -> bool { self.whispering }
/// Size is in samples.
fn add_buffer_size(&mut self, size: usize) {
if let Ok(size) = (size / USUAL_FRAME_SIZE).try_into() {
@ -418,9 +414,6 @@ impl<Id: Clone + Debug + Eq + Hash + PartialEq> AudioHandler<Id> {
/// Delete all queues
pub fn reset(&mut self) { self.queues.clear(); }
pub fn get_queues(&self) -> &HashMap<Id, AudioQueue> { &self.queues }
pub fn get_mut_queues(&mut self) -> &mut HashMap<Id, AudioQueue> { &mut self.queues }
/// `buf` is not cleared before filling it.
///
/// Returns the clients that are not talking anymore.

View file

@ -1,4 +1,4 @@
use std::{collections::HashMap, io::Read, mem::size_of, sync::Arc, time::Duration};
use std::{io::Read, mem::size_of, sync::Arc, time::Duration};
use byte_slice_cast::AsByteSlice;
use serde::Deserialize;
use tsclientlib::{ClientId, Connection, DisconnectOptions, Identity, StreamItem};
@ -96,10 +96,6 @@ const TICK_TIME: u64 = 20;
const FRAME_SIZE_MS: usize = 20;
const SAMPLE_RATE: usize = 48000;
const STEREO_20MS: usize = SAMPLE_RATE * 2 * FRAME_SIZE_MS / 1000;
// const STEREO_20MS_FLOAT: usize = SAMPLE_RATE / 20;
/// See http://blog.bjornroche.com/2009/12/int-float-int-its-jungle-out-there.html
/// We use i16::MIN here, which is 0x8000
const I16_CONVERSION_DIVIDER: f32 = 0x8000 as f32;
/// The maximum size of an opus frame is 1275 as from RFC6716.
const MAX_OPUS_FRAME_SIZE: usize = 1275;
#[tokio::main]
@ -256,12 +252,12 @@ async fn process_discord_audio(voice_buffer: &AudioBufferDiscord, encoder: &Arc<
// buffer_map = std::mem::replace(&mut *lock, HashMap::new());
// }
let mut data = [0.0; 1920];
let mut data = [0.0; STEREO_20MS];
{
let mut lock = voice_buffer.lock().await;
lock.fill_buffer(&mut data);
}
let mut encoded = [0; 1920];
let mut encoded = [0; MAX_OPUS_FRAME_SIZE];
let encoder_c = encoder.clone();
// don't block the async runtime
let res = task::spawn_blocking(move || {