mirror of
https://github.com/GuillemCastro/spotify-dl.git
synced 2025-05-15 00:05:30 +02:00
feat: No native dependencies
This commit is contained in:
parent
a041136986
commit
ad9288d243
4 changed files with 135 additions and 497 deletions
|
@ -2,11 +2,12 @@ use std::path::Path;
|
|||
|
||||
use audiotags::Tag;
|
||||
use audiotags::TagType;
|
||||
use flacenc::component::BitRepr;
|
||||
use flacenc::error::Verify;
|
||||
use librespot::playback::audio_backend::Sink;
|
||||
use librespot::playback::audio_backend::SinkError;
|
||||
use librespot::playback::convert::Converter;
|
||||
use librespot::playback::decoder::AudioPacket;
|
||||
use flac_bound::FlacEncoder;
|
||||
|
||||
use crate::track::TrackMetadata;
|
||||
|
||||
|
@ -65,23 +66,19 @@ impl Sink for FileSink {
|
|||
|
||||
fn stop(&mut self) -> Result<(), SinkError> {
|
||||
tracing::info!("Writing to file: {:?}", &self.sink);
|
||||
let mut encoder = FlacEncoder::new()
|
||||
.ok_or(SinkError::OnWrite(
|
||||
"Failed to create flac encoder".to_string(),
|
||||
))?
|
||||
.channels(2)
|
||||
.bits_per_sample(16)
|
||||
.compression_level(self.compression)
|
||||
.init_file(&self.sink)
|
||||
.map_err(|e| {
|
||||
SinkError::OnWrite(format!("Failed to init flac encoder: {:?}", e).to_string())
|
||||
})?;
|
||||
encoder
|
||||
.process_interleaved(self.content.as_slice(), (self.content.len() / 2) as u32)
|
||||
.map_err(|_| SinkError::OnWrite("Failed to write flac".to_string()))?;
|
||||
encoder
|
||||
.finish()
|
||||
.map_err(|_| SinkError::OnWrite("Failed to finish encondig".to_string()))?;
|
||||
|
||||
let config = flacenc::config::Encoder::default()
|
||||
.into_verified()
|
||||
.map_err(|_| SinkError::OnWrite("Failed to create flac encoder".to_string()))?;
|
||||
let source = flacenc::source::MemSource::from_samples(&self.content, 2, 16, 44100);
|
||||
let flac_stream = flacenc::encode_with_fixed_block_size(&config, source, config.block_size)
|
||||
.map_err(|_| SinkError::OnWrite("Failed to encode flac".to_string()))?;
|
||||
let mut sink = flacenc::bitsink::ByteSink::new();
|
||||
flac_stream
|
||||
.write(&mut sink)
|
||||
.map_err(|_| SinkError::OnWrite("Failed to write flac to sink".to_string()))?;
|
||||
std::fs::write(&self.sink, sink.as_slice())
|
||||
.map_err(|_| SinkError::OnWrite("Failed to write flac to file".to_string()))?;
|
||||
|
||||
let mut tag = Tag::new()
|
||||
.with_tag_type(TagType::Flac)
|
||||
|
|
|
@ -31,7 +31,7 @@ struct Opt {
|
|||
short = "c",
|
||||
long = "compression",
|
||||
help = "Setting the flac compression level from 0 (fastest, least compression) to
|
||||
8 (slowest, most compression). A value larger than 8 will be Treated as 8. Default is 4."
|
||||
8 (slowest, most compression). A value larger than 8 will be Treated as 8. Default is 4. NOT USED."
|
||||
)]
|
||||
compression: Option<u32>,
|
||||
#[structopt(
|
||||
|
@ -72,6 +72,10 @@ async fn main() -> anyhow::Result<()> {
|
|||
std::process::exit(1);
|
||||
}
|
||||
|
||||
if opt.compression.is_some() {
|
||||
eprintln!("Compression level is not supported yet. It will be ignored.");
|
||||
}
|
||||
|
||||
let session = create_session(opt.username, opt.password).await?;
|
||||
|
||||
let track = get_tracks(opt.tracks, &session).await?;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue