Add playlist files
This commit is contained in:
parent
6052436fa9
commit
2d66041928
2 changed files with 92 additions and 0 deletions
53
playlist.cpp
Normal file
53
playlist.cpp
Normal file
|
@ -0,0 +1,53 @@
|
|||
#include "playlist.hpp"
|
||||
#include <Xspf.h>
|
||||
class LooperXspfReaderCallback : public XspfReaderCallback {
|
||||
Playlist *list;
|
||||
public:
|
||||
inline LooperXspfReaderCallback(Playlist *list) : list(list) { }
|
||||
inline void addTrack(XspfTrack *track) {
|
||||
PlaylistEntry entry;
|
||||
entry.speed = 1.0;
|
||||
entry.tempo = 1.0;
|
||||
entry.pitch = 1.0;
|
||||
entry.loops = 1;
|
||||
entry.stream_idx = 0;
|
||||
XML_Char const *loc = track->getLocation(0);
|
||||
if (loc != NULL) {
|
||||
entry.path = (char const *)loc;
|
||||
list->entries.push_back(entry);
|
||||
}
|
||||
delete track;
|
||||
}
|
||||
}
|
||||
Playlist::iterator Playlist::begin() {
|
||||
return entries.begin();
|
||||
}
|
||||
Playlist::iterator Playlist::end() {
|
||||
return entries.end();
|
||||
}
|
||||
Playlist::const_iterator Playlist::cbegin() {
|
||||
return entries.cbegin();
|
||||
}
|
||||
Playlist::const_iterator Playlist::cend() {
|
||||
return entries.cend();
|
||||
}
|
||||
Playlist::reverse_iterator Playlist::rbegin() {
|
||||
return entries.rbegin();
|
||||
}
|
||||
Playlist::reverse_iterator Playlist::rend() {
|
||||
return entries.rend();
|
||||
}
|
||||
Playlist::const_reverse_iterator Playlist::crbegin() {
|
||||
return entries.crbegin();
|
||||
}
|
||||
Playlist::const_reverse_iterator Playlist::crend() {
|
||||
return entries.crend();
|
||||
}
|
||||
Playlist::Playlist(fs::path path) {
|
||||
LooperXspfReaderCallback callback(this);
|
||||
XspfReader reader([=,this]());
|
||||
int ret = reader.parseFile(path.c_str(), &callback, fs::current_path().c_str());
|
||||
if (ret != XSPF_READER_SUCCESS) {
|
||||
throw std::exception();
|
||||
}
|
||||
}
|
39
playlist.hpp
Normal file
39
playlist.hpp
Normal file
|
@ -0,0 +1,39 @@
|
|||
#pragma once
|
||||
#include <filesystem>
|
||||
#include <vector>
|
||||
#define LOOP_FOREVER (-1)
|
||||
namespace fs = std::filesystem;
|
||||
struct PlaylistEntry {
|
||||
|
||||
double speed;
|
||||
double tempo;
|
||||
double pitch;
|
||||
int loops;
|
||||
int stream_idx;
|
||||
fs::path path;
|
||||
};
|
||||
class Playlist {
|
||||
friend class LooperXspfReaderCallback;
|
||||
std::vector<PlaylistEntry> entries;
|
||||
fs::path path;
|
||||
using vec = std::vector<PlaylistEntry>;
|
||||
using iterator = vec::iterator;
|
||||
using const_iterator = vec::const_iterator;
|
||||
using reverse_iterator = vec::reverse_iterator;
|
||||
using const_reverse_iterator = vec::const_reverse_iterator;
|
||||
public:
|
||||
void save(fs::path output_file);
|
||||
inline PlaylistEntry &operator[](int idx) {
|
||||
return entries[idx];
|
||||
}
|
||||
iterator begin();
|
||||
iterator end();
|
||||
const_iterator cbegin();
|
||||
const_iterator cend();
|
||||
reverse_iterator rbegin();
|
||||
reverse_iterator rend();
|
||||
const_reverse_iterator crbegin();
|
||||
const_reverse_iterator crend();
|
||||
Playlist(fs::path input_file);
|
||||
Playlist() = default;
|
||||
};
|
Loading…
Reference in a new issue