Giter Site home page Giter Site logo

pxtone-renderer's Introduction

pxtone-renderer

Render pxtone projects.

Usage: pxtone-renderer [options] file(s)...
By default, the provided files will be rendered as .wav to your working directory.
Options:
  --format, -f        [OGG, WAV, FLAC]    Encode data to this format.
  --fadein            [seconds]           Specify song fade in time.
  --loop, -l          Loop the song this many times.
  --loop-separately   Separate the song into 'intro' and 'loop' files.

  --output, -o   If 1 file is being rendered, place the resulting file here.
                 If multiple are being rendered, put them in this directory.

  --help, -h     Show this dialog.
  --quiet, -q    Omit info & warning messages from console output.

Requirements

  • C++17
  • CMake
  • Ogg
  • Vorbis
  • FLAC
  • libsndfile

No C++ bindings required for any of the libraries.

Building

CMake must be able to find all the libraries within its search paths. After the prerequisites are met, the following should be fine:

cmake -B ./build -S ./ && cmake --build ./build

Thanks

  • OPNA2608; big endian fixes, CI, testing
  • Sidedishes; testing
  • Clownacy; bugfixes in pxtone, testing
  • SlightlyIntelligentMonkey; testing
  • Xiph.org; Ogg, Vorbis and FLAC
  • Studio Pixel; pxtone
  • libsndfile guys

pxtone-renderer's People

Contributors

ewancg avatar opna2608 avatar synaodev avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

opna2608 synaodev

pxtone-renderer's Issues

Creating different outputs on different platforms

The renderer currently creates different outputs depending on the platform. Windows/macOS seem to create the same output, and then Linux creates a different one.

Testing with WAV files, we can see that the Linux output's differences (of which there are many) are all the same thing; a byte difference with a value of 1. My first thought is that this is floating-point related, which I've seen before. Adding calls to trunc() before explicit float type to int type casts changed nothing. Changing those to round() broke it wildly, which I haven't really tested too much. None of that should matter, though, because such casts are guaranteed to truncate (I added the trunc calls before I looked into that).

Need to figure out where/why this goes wrong and how we can fix it. It's not strictly required, but I would like for the renderer to produce the same output every time given a specific input.

Expand functionality

There's a lot that can be done to increase the renderer's functionality without bringing in any more dependencies.

  • Add metadata (song title & description from ptcop, all fields overwritable via. command line)
  • More formats; Opus and MP3? Whatever else libsndfile can do
  • VBR and compression rate; I can't say for sure, but I feel like it currently makes huge FLACs & binding libsndfile formats to the user-provided format doesn't suffice. I couldn't get VBR to work at all, under any circumstances. Probably doing it wrong lol

Loop points broken sometimes

Can be seen when testing the song tonal dissonance by ArcOfDream. I haven't had the time to look into it yet; the first portion of the song incorrectly repeats twice. Probably using the wrong variable from pxtone

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.