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 lintto report on any potential code issues - Run
ng testto run the unit tests. Please add tests for any new features or changes you make. - Run
npm run test-coverageto generate a test coverage report. View the generated/coverage/lyric-converter/index.htmlfile to see specifics about uncovered areas of code if needed.
- Run
ng buildto build the project in production mode which is stored in thedist/directory. - Run
npm run prerenderto 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
ParserServiceat/app/convert/parser/parser.service.tsfor 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 theIInputConverterinterface. - 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 genericISongformat.
- All input types are classes in the
- Once all songs are in
ISongformat, 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 theIOutputConverterinterface. - The
ISongrepresentation of the song is passed toconvertToType()which manipulates it into astringrepresentation of the file content for whatever the desired format is - That
stringis then put into anIOutputFileobject 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-whateverand Angular will generate a new class file namedinput-type-whatever.tsand a test fileinput-type-whatever.spec.ts - Open the newly generated TS file and make the class
export class InputTypeWhatever implements IInputConverterand add the required properties and methods - Open the
ParserServiceat/app/convert/parser/parser.service.tsand add this new input type to theinputConvertersarray - 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
ISongformat. - Add tests to verify that this new input type can convert all kinds of variations of songs in whatever format this is into an
ISongobject
- 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-whateverand Angular will generate a new class file namedoutput-type-whatever.tsand a test fileoutput-type-whatever.spec.ts - Open the newly generated TS file and make the class
export class OutputTypeWhatever implements IOutputConverterand add the required properties and methods - Open the
ParserServiceat/app/convert/parser/parser.service.tsand add this new input type to theoutputConvertersarray - Look at other existing output types to get an idea of how these work. Basically you will need to take the incoming
ISongobject and create astringrepresentation of whatever the file content of this format looks like and pass that off as anIOutputFileobject. Add tests to verify that this new output type can take all kinds ofISongobjects 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
