/CarnaticComposer

Carnatic Music Composer

Primary LanguageC#GNU General Public License v3.0GPL-3.0

TalaRagaApp Image

TalaRagaApp

TalaRagaApp is a Windows desktop application designed to help users experiment with Carnatic music by selecting different Ragas and Talas, arranging notes, and playing them back using NAudio. The app allows users to input musical notes based on the selected Raga and play them in accordance with the chosen Tala.

Features

  • Select a Raga and Tala from predefined lists.
  • Arrange musical notes in the given sequence.
  • Play the arranged notes in sync with the selected Tala.
  • Visualize and modify the note arrangement in the user interface.
  • Hear the musical notes generated using NAudio.

Prerequisites

Before you begin, ensure you have the following installed:

  • .NET SDK (version 5.0 or later) - Download here
  • NAudio and Newtonsoft.Json NuGet packages (installed automatically as dependencies).

Installation

Step 1: Clone the Repository

Clone the TalaRagaApp repository from GitHub (or any other source):

git clone https://github.com/yourusername/TalaRagaApp.git

Step 2: Build the Project

  1. Open the project in Visual Studio or Visual Studio Code.
  2. Build the project using the .NET CLI or IDE:
dotnet build

Step 3: Install Dependencies

The project relies on NAudio for audio generation and Newtonsoft.Json for loading Ragas and Talas from JSON files. These dependencies are included in the project file (TalaRagaApp.csproj), but ensure they are installed:

dotnet add package NAudio
dotnet add package Newtonsoft.Json

Step 4: Prepare Resources

Ensure the ragas.json and talas.json files are present in the Resources folder of your project. These JSON files define the list of available Ragas and Talas.

Example ragas.json:

[
  {
    "Name": "Mayamalavagowla",
    "Notes": ["S", "R1", "G3", "M1", "P", "D1", "N3"]
  },
  {
    "Name": "Shankarabharanam",
    "Notes": ["S", "R2", "G3", "M1", "P", "D2", "N3"]
  }
]

Example talas.json:

[
  {
    "Name": "Adi",
    "BeatPattern": [1, 2, 1, 2, 1, 1, 1, 1]
  },
  {
    "Name": "Rupaka",
    "BeatPattern": [1, 1, 2]
  }
]

Ensure these files are set to "Copy to Output Directory" so that they are available when running the app.

Step 5: Run the Application

After building the project and setting up the necessary resources, you can run the application:

dotnet run

Alternatively, run the application from Visual Studio by pressing F5 or selecting Start Debugging.

Usage

Main Features

  1. Select Raga:

    • Choose a Raga from the dropdown list (e.g., Mayamalavagowla).
  2. Select Tala:

    • Choose a Tala from the dropdown list (e.g., Adi Tala).
  3. Arrange Notes:

    • In the Arrange Notes textbox, type the musical notes based on the selected Raga. Separate notes by a space. For example:
      S R1 G3 M1 P D1 N3 S
      
  4. Play Notes:

    • Press the Play Notes button to hear the notes played according to the selected Tala.

Example Input

  • Raga: Mayamalavagowla
  • Tala: Adi
  • Notes: S R1 G3 M1 P D1 N3 S

This sequence will play the notes Sa, Shuddha Rishabham, Antara Gandharam, etc., in the selected Tala.

Output

The app will play the arranged notes through your speakers or headphones using the NAudio library.

File Structure

TalaRagaApp/
├── Resources/
│   ├── ragas.json
│   ├── talas.json
├── TalaRagaApp.csproj
├── App.xaml
├── App.xaml.cs
├── MainWindow.xaml
├── MainWindow.xaml.cs
└── README.md
  • Resources: Contains the ragas.json and talas.json files, which define the data for Ragas and Talas.
  • TalaRagaApp.csproj: The project configuration file.
  • App.xaml: The application definition.
  • MainWindow.xaml: The UI layout for the main window.
  • MainWindow.xaml.cs: The code-behind for the main window, handling the note arrangement, playback, and UI interactions.

Known Issues

  • UI Freezing: Previous versions of the app could cause UI freezes when playing notes. This has been resolved by using asynchronous playback with Task.Delay().
  • Note Validation: Ensure the entered notes match the selected Raga. Invalid notes will show a warning message.

Contributing

If you'd like to contribute to TalaRagaApp, feel free to submit a pull request or report issues on the project's GitHub page.

  1. Fork the repository.
  2. Create a new branch.
  3. Make changes and commit them.
  4. Submit a pull request.

License

This project is licensed under the GNU License.

Contact

If you have any questions or feedback, feel free to reach out to girishvnair@gmail.com.