69 lines
1.5 KiB
C++
69 lines
1.5 KiB
C++
#include <iostream>
|
|
#include <vector>
|
|
|
|
#include <SFML/Audio.hpp>
|
|
|
|
#define NIKOLA_UTILS_IMPLEMENTATION
|
|
#include "utils.hpp"
|
|
|
|
#include "Compressor.hpp"
|
|
#include "Decompressor.hpp"
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
if (argc <= 2)
|
|
{
|
|
printf("Usage: %s <1|2>\n", argv[0]);
|
|
return 1;
|
|
}
|
|
|
|
if (std::atoi(argv[1]) == 1)
|
|
{
|
|
if (argc != 6)
|
|
{
|
|
printf("Usage: %s 1 <input.wav> <block size> <window size> <output.bin>\n", argv[0]);
|
|
return 1;
|
|
}
|
|
|
|
sf::SoundBuffer buffer;
|
|
|
|
if (!buffer.loadFromFile(argv[2]))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
std::size_t sampleCount = buffer.getSampleCount();
|
|
const sf::Int16 *samples_p = buffer.getSamples();
|
|
Compressor compressor;
|
|
compressor.compress(samples_p, sampleCount, std::atoi(argv[3]), std::atoi(argv[4]), argv[5]);
|
|
printf("compressed\n");
|
|
}
|
|
else
|
|
{
|
|
if (argc != 4)
|
|
{
|
|
printf("Usage: %s 2 <input.bin> <output.wav>\n", argv[0]);
|
|
return 1;
|
|
}
|
|
Decompressor decompressor;
|
|
std::vector<signed short> out = decompressor.decompress(argv[2]);
|
|
|
|
sf::SoundBuffer buffer2;
|
|
buffer2.loadFromSamples(&out[0], out.size(), 2, 44100);
|
|
buffer2.saveToFile(argv[3]);
|
|
sf::Sound sound(buffer2);
|
|
|
|
sound.play();
|
|
while (sound.getStatus() == sf::Sound::Playing)
|
|
{
|
|
sf::sleep(sf::milliseconds(1000));
|
|
sf::Time t = sound.getPlayingOffset();
|
|
printf("\rplaying offset: %f", t.asSeconds());
|
|
fflush(stdout);
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
return 0;
|
|
}
|