aboutsummaryrefslogtreecommitdiff
path: root/src/commands/meme.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/meme.rs')
-rw-r--r--src/commands/meme.rs98
1 files changed, 32 insertions, 66 deletions
diff --git a/src/commands/meme.rs b/src/commands/meme.rs
index a8ac417..913be00 100644
--- a/src/commands/meme.rs
+++ b/src/commands/meme.rs
@@ -1,5 +1,5 @@
use std::{
- io::{BufReader, Read},
+ io::Read,
process::{
Command,
Stdio,
@@ -7,14 +7,8 @@ use std::{
sync::RwLock,
};
-use byteorder::{
- ByteOrder,
- NativeEndian,
-};
use diesel::PgConnection;
use failure::Error;
-use lame_sys;
-use lame_sys::lame_set_brate;
use lazy_static::lazy_static;
use rand::{Rng, thread_rng};
use serenity::{
@@ -31,11 +25,7 @@ use audio::ytdl_url;
use crate::{
audio::{
CtxExt,
- ffmpeg_dl,
- Mp3,
- Opus,
parse_times,
- Pcm,
PlayArgs,
PlayQueue,
},
@@ -162,22 +152,39 @@ pub fn addaudiomeme(_: &mut Context, msg: &Message, mut args: Args) -> Result<()
let (start, end) = parse_times(opts);
let youtube_url = ytdl_url(audio_link.as_str())?;
- let ffmpeg_command = ffmpeg_dl::<Pcm>(&youtube_url, start, end, None)?;
- let lame = Command::new("lame")
+ let duration_opts = if let Some(e) = end {
+ vec! [
+ "-ss".to_owned(), start.map_or_else(
+ || "00:00:00".to_owned(),
+ |s| format!("{:02}:{:02}:{:02}", s.num_hours(), s.num_minutes() % 60, s.num_seconds() % 60)
+ ),
+
+ "-to".to_owned(), format!("{:02}:{:02}:{:02}", e.num_hours(), e.num_minutes() % 60, e.num_seconds() % 60),
+ ]
+ } else {
+ vec! []
+ };
+
+ let ffmpeg_command = Command::new("ffmpeg")
+ .arg("-i")
+ .arg(youtube_url)
+ .args(duration_opts)
.args(&[
- "-r",
- "-m", "s",
- "-s", "48",
- "-V", "2",
- "-b", "96",
- "-", "-",
+ "-ac", "2",
+ "-ar", "48000",
+ "-f", "opus",
+ "-acodec", "libopus",
+ "-b:a", "96k",
+ "-",
])
- .stdin(ffmpeg_command.stdout.unwrap())
.stdout(Stdio::piped())
.stderr(Stdio::null())
+ .stdin(Stdio::null())
.spawn()?;
+ let mut audio_reader = ffmpeg_command.stdout.unwrap();
+
let text = match args.multiple_quoted::<String>() {
Ok(text) => text.join(" "),
Err(_) => "".to_owned(),
@@ -196,53 +203,12 @@ pub fn addaudiomeme(_: &mut Context, msg: &Message, mut args: Args) -> Result<()
.ok();
let mut audio_data = Vec::new();
- lame.stdout.unwrap().read_to_end(&mut audio_data)?;
-
-// let mut i16_data: Vec<i16> = {
-// let mut audio_data = Vec::new();
-// let bytes = audio_reader.read_to_end(&mut audio_data)?;
-//
-// let mut i16_data = Vec::with_capacity(bytes / 2);
-// i16_data.resize(bytes / 2, 0);
-//
-// NativeEndian::read_i16_into(&audio_data, &mut i16_data);
-//
-// i16_data
-// };
-//
-// if i16_data.len() == 0 {
-// debug!("read 0 bytes from audio reader");
-// return send(msg.channel_id, "🔇🔇🔇🔕🔕🔕🔕🔕🔇🔕🔕🔇🔕🔕📣📢📣📢📣", msg.tts);
-// }
-//
-// let audio_data = unsafe {
-// let lame_flags = lame_sys::lame_init();
-//
-// lame_sys::lame_set_brate(lame_flags, 96000);
-// lame_sys::lame_set_num_channels(lame_flags, 2);
-// lame_sys::lame_set_num_samples(lame_flags, 48000);
-//
-// let mut out = Vec::<u8>::with_capacity(i16_data.len() * 2);
-// out.resize(i16_data.len() * 2, 0);
-//
-// let result = lame_sys::lame_encode_buffer_interleaved(
-// lame_flags,
-// i16_data.as_mut_ptr(),
-// (i16_data.len() / 2) as i32,
-// out.as_mut_ptr(),
-// out.len() as i32,
-// );
-//
-// if result <= 0 {
-// debug!("return code {} from lame", result);
-// return send(msg.channel_id, "wat", msg.tts);
-// }
-//
-// out.truncate(result as usize);
-//
-// out
-// };
+ let bytes = audio_reader.read_to_end(&mut audio_data)?;
+ if bytes == 0 {
+ debug!("read 0 bytes from audio reader");
+ return send(msg.channel_id, "🔇🔇🔇🔕🔕🔕🔕🔕🔇🔕🔕🔇🔕🔕📣📢📣📢📣", msg.tts);
+ }
let audio_id = Audio::create(&conn, audio_data, msg.author.id.0)?;