360macky / lyricoder

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Lyricoder

Lyricoder

Lyricoder is a script that generates a JSON file of song lyrics with timestamps.

πŸš€ Concept

Lyricoder is a script that generates a JSON file of song lyrics with timestamps. The script takes in a .mp3 file and the name of the song and outputs a JSON file with the lyrics and timestamps. The script uses OpenAI Whisper to transcribe the song.

graph TB
    A([Start]) --> B[Read Input Parameters]
    B --> C[Open MP3 File]
    C --> D(Call OpenAI Whisper API)
    D --> E[Receive and Parse Response]
    E --> F[Is response SRT Format?]
    F -- Yes --> G[Convert SRT to JSON]
    F -- No --> H[Print Error - Invalid response format]
    G --> I[Export JSON to File]
    I --> J[Print Success Message]
    J --> K((End))
Loading

This script is useful for a music player app that could display the lyrics of the song as it is playing.

🌈 Installation

Clone the repository to your local machine and navigate into the directory:

git clone https://github.com/360macky/lyricoder.git
cd lyricoder

You will need to make the script executable and move it to a directory in your PATH. You can do this by running the following commands:

chmod +x lyricoder.py
sudo mv lyricoder.py /usr/local/bin/lyricoder

The chmod command makes the file executable and the mv command moves the file. /usr/local/bin is a common place to put user programs on macOS, and should be in your PATH.

Now, you should be able to run the script from anywhere using the lyricoder command:

lyricoder --input ./song.mp3 --name "Song Name" --output ./song.json

πŸͺ Usage

python lyricoder.py --input ./song.mp3 --name "Song Name" --output ./song.json

πŸ›  Core Development

The script takes in three command-line arguments: --input (the path to the .mp3 file), --name (the name of the song), and --output (the path to the output .json file).

The song is transcribed using OpenAI Whisper through a POST request to the Whisper API. The ASR system returns the transcribed text in SRT (SubRip Subtitle) format along with timestamps. The response is then parsed and converted into a JSON format.

The final output is a JSON file which includes each line of lyrics along with its start and end times. The JSON is structured as follows:

{
  "Song Name": [
    {
      "id": 1,
      "start_time": "00:00:03",
      "end_time": "00:00:04",
      "text": "First line of lyrics"
    },
    {
      "id": 2,
      "start_time": "00:00:05",
      "end_time": "00:00:09",
      "text": "Second line of lyrics"
    },
    ...
  ]
}

This script includes error handling for failed transcription attempts and unexpected errors.

🀲 Contributing

Lyricoder is an open source project.

If you want to be the author of a new feature, fix a bug or contribute with something new.

Fork the repository and make changes as you like. Pull requests are warmly welcome.

πŸ“ƒ License

Distributed under the MIT License. See LICENSE for more information.

About


Languages

Language:Python 100.0%