Parses the song info & lyrics from various lyric presentation software file formats. You can convert between different formats and download the converted files.
Use it here: https://LyricConverter.net
Input | Output | |
---|---|---|
ChordPro | ✅ | ✅ |
EasyWorship - Issue #3 | ⭕ | ⭕ |
JSON | ✅ | ✅ |
MediaShout 7 | ✅ | ✅ |
OpenSong - Issue #5 | ⭕ | ⭕ |
OpenLyrics | ✅ | ✅ |
Plain Text | ✅ | ✅ |
ProPresenter v4 | ✅ | ⭕ |
ProPresenter v5 | ✅ | ✅ |
ProPresenter v6 | ✅ | ✅ |
ProPresenter v7💾 | ⭕ | ⭕ |
SongPro | ✅ | ✅ |
SongShow Plus v7 | ✅ | ⭕ |
SongShow Plus v8 | ❓ | ⭕ |
SongShow Plus v9 | ❓ | ⭕ |
- ✅ = Supported
- ⭕ = Not supported (yet?)
- ❓ = Unknown/Untested
- 💾 = You can import the ProPresenter 6 files made by LyricConverter into ProPresenter 7!
- ChrisMBarr/ProPresenter-Parser
- ChrisMBarr/OpenLyrics-Parser
- ChrisMBarr/SongShowPlus-Parser
- SongProOrg/songpro-javascript
- martijnversluis/ChordSheetJS
- Deal with possibly duplicated info keys
- Allow user-configurable options for output file (resolution, text size, etc)
Want to help out and improve LyricConverter? Thanks!
You'll need to be familiar with Angular and TypeScript, which are needed to run this project. Run npm install @angular/cli typescript -g
to install the global tools you'll need.
Clone this project and run npm install
. Afterwards run ng serve
to start the development server, you can see it running at http://localhost:4200/
. The application will automatically reload if you change any of the source files.
I recommend you use VSCode and install the recommended extensions when you open this project in it.
- In VSCode press Alt+Shift+F to run the Prettier code formatter.
- Run
ng lint
to report on any potential code issues - Run
ng test
to run the unit tests. Please add tests for any new features or changes you make. - Run
npm run test-coverage
to generate a test coverage report. View the generated/coverage/lyric-converter/index.html
file to see specifics about uncovered areas of code if needed.
- Run
ng build
to build the project in production mode which is stored in thedist/
directory. - Run
npm run prerender
to generate the prerendered HTML pages for each route - this is what is deployed to production
Anything added to this project will most likely be a new format for LyricConverter to either be able to read or write. So all you need to worry about is dealing with the inputs and outputs which are generalized TypeScript classes and not specific to the Angular framework at all.
- Arrays of all available input types and output types are kept in the
ParserService
at/app/convert/parser/parser.service.ts
for the Angular app to manage. - Lyric converter will take any files passed to it and run them each through all of the input types available to it.
- All input types are classes in the
/app/convert/inputs/*
folder that implement theIInputConverter
interface. - Files are passed to the
doesInputFileMatchThisType()
method which returns aboolean
. Typically this only needs to check the file extension for most file types. - Once each incoming file type is known, it will use the
extractSongData()
method to get the song information and lyrics converted to a genericISong
format.
- All input types are classes in the
- Once all songs are in
ISong
format, all of these objects are passed to the output type that the user has selected- All output types are classes in the
/app/convert/outputs/*
folder that implement theIOutputConverter
interface. - The
ISong
representation of the song is passed toconvertToType()
which manipulates it into astring
representation of the file content for whatever the desired format is - That
string
is then put into anIOutputFile
object and passed along to the UI for conversion to a real file to be downloaded
- All output types are classes in the
- Open the
/app/convert/inputs/
directory in your command line (in VSCode right click the folder > "Open in integrated terminal") and runng generate class input-type-whatever
and Angular will generate a new class file namedinput-type-whatever.ts
and a test fileinput-type-whatever.spec.ts
- Open the newly generated TS file and make the class
export class InputTypeWhatever implements IInputConverter
and add the required properties and methods - Open the
ParserService
at/app/convert/parser/parser.service.ts
and add this new input type to theinputConverters
array - Look at other existing input types to get an idea of how these work. Basically you will need to manipulate the incoming data to extract the song info and the lyrics into the
ISong
format. - Add tests to verify that this new input type can convert all kinds of variations of songs in whatever format this is into an
ISong
object
- Open the
/app/convert/outputs/
directory in your command line (in VSCode right click the folder > "Open in integrated terminal") and runng generate class output-type-whatever
and Angular will generate a new class file namedoutput-type-whatever.ts
and a test fileoutput-type-whatever.spec.ts
- Open the newly generated TS file and make the class
export class OutputTypeWhatever implements IOutputConverter
and add the required properties and methods - Open the
ParserService
at/app/convert/parser/parser.service.ts
and add this new input type to theoutputConverters
array - Look at other existing output types to get an idea of how these work. Basically you will need to take the incoming
ISong
object and create astring
representation of whatever the file content of this format looks like and pass that off as anIOutputFile
object. Add tests to verify that this new output type can take all kinds ofISong
objects and convert them to the expected outputstring
I am not in any way affiliated with any of the companies or organizations that make any of the lyric file formats or presentation software listed here