Playing music

With the MP3 decoder done, we're now ready to play some music. We'll create a new module, called player, which we will add at the top of main.rs:

mod player;

We'll start this module by creating a new player.rs file with the following import statements:

use std::fs::File;
use std::io::BufReader;
use std::path::{Path, PathBuf};
use std::sync::{Arc, Condvar, Mutex};
use std::thread;

use crossbeam::sync::SegQueue;
use pulse_simple::Playback;

use mp3::Mp3Decoder;
use self::Action::*;

We'll also create some constants:

const BUFFER_SIZE: usize = 1000;
const DEFAULT_RATE: u32 = 44100;

The buffer size is the number of samples we'll decode and play to avoid having slowdowns when playing the song and also to avoid using 100% of the CPU by constantly reading and decoding the data at the same time as playing. The default rate will be used when we cannot find one in the MP3 file.