# Bhargava Swara
A Python library for analyzing and visualizing Indian classical music, including spectrogram generation (Mel-frequency, Chroma, CQT, and Cent filterbank), raga, tala, tempo, tradition, ornaments, and full analysis.
## Prerequisites
- **Gemini API Key:**
This library uses Google's Gemini API for music analysis. To obtain a key:
1. Sign up for a Google Cloud account
2. Enable the Generative AI API in the Google Cloud Console
3. Create an API key in the "Credentials" section
Refer to [Google's Generative AI Docs](https://cloud.google.com/generative-ai/docs) for details
- **Audio Files:**
Supported formats include WAV and MP3 for analysis and spectrogram generation
## Installation
Install the library using pip:
```sh
pip install bhargava_swara
```
## Dependencies
- `google-generativeai>=0.1.0`
- `librosa>=0.10.0`
- `matplotlib>=3.7.0`
- `numpy>=1.24.0`
## Spectrogram Generation
Generate various types of spectrograms to visualize different aspects of audio frequency content over time.
### Mel-Frequency Spectrogram
```python
from bhargava_swara import generate_mel_spectrogram
audio = "path/to/audio.wav"
output = "path/to/output_mel_spectrogram.png"
generate_mel_spectrogram(audio, output, n_mels=128, fmax=8000)
print("Mel spectrogram generated successfully!")
```
### CQT Spectrogram
```python
from bhargava_swara import generate_cqt_spectrogram
audio = "path/to/audio.wav"
output = "path/to/output_cqt_spectrogram.png"
generate_cqt_spectrogram(audio, output, hop_length=512, n_bins=84)
print("CQT spectrogram generated successfully!")
```
### Cent Filterbank Spectrogram
```python
from bhargava_swara import generate_cent_spectrogram
audio = "path/to/audio.wav"
output = "path/to/output_cent_spectrogram.png"
generate_cent_spectrogram(audio, output, n_filters=128, fmax=8000)
print("Cent filterbank spectrogram generated successfully!")
```
#### Spectrogram Parameters:
- `audio`: Path to the input audio file (e.g., WAV or MP3)
- `output`: Path to save the PNG file
- Mel-specific: `n_mels` (default: 128), `fmax` (default: 8000)
- Chroma-specific: `n_chroma` (default: 12), `hop_length` (default: 512)
- CQT-specific: `hop_length` (default: 512), `n_bins` (default: 84)
- Cent-specific: `n_filters` (default: 128), `fmax` (default: 8000)
## Music Analysis
Analyze various aspects of Indian classical music using the Gemini API.
### Raga Analysis
```python
from bhargava_swara import analyze_raga
api_key = "YOUR_API_KEY"
audio = "path/to/audio.wav"
result = analyze_raga(audio, api_key)
print(f"Raga: {result}")
```
### Tala Analysis
```python
from bhargava_swara import analyze_tala
api_key = "YOUR_API_KEY"
audio = "path/to/audio.wav"
result = analyze_tala(audio, api_key)
print(f"Tala: {result}")
```
### Tempo Analysis
```python
from bhargava_swara import analyze_tempo
api_key = "YOUR_API_KEY"
audio = "path/to/audio.wav"
result = analyze_tempo(audio, api_key)
print(f"Tempo: {result}")
```
### Tradition Analysis
```python
from bhargava_swara import analyze_tradition
api_key = "YOUR_API_KEY"
audio = "path/to/audio.wav"
result = analyze_tradition(audio, api_key)
print(f"Tradition: {result}")
```
### Ornament Analysis
```python
from bhargava_swara import analyze_ornaments
api_key = "YOUR_API_KEY"
audio = "path/to/audio.wav"
result = analyze_ornaments(audio, api_key)
print(f"Ornaments: {result}")
```
### Full Music Analysis
```python
from bhargava_swara import analyze_music_full
api_key = "YOUR_API_KEY"
audio = "path/to/audio.wav"
result = analyze_music_full(audio, api_key)
print(f"Full Analysis:\n{result}")
```
## Music Synthesis
Create Indian classical music elements with ease.
### Tanpura Drone
Generate a tanpura drone for practice or ambiance.
```python
from bhargava_swara import generate_tanpura_drone
# Play in real-time
generate_tanpura_drone(pitch=261.63, duration=10)
# Save to WAV
generate_tanpura_drone(pitch=261.63, duration=10, output_path="tanpura_drone.wav")
```
#### Parameters:
- pitch: Fundamental frequency of Sa (e.g., 261.63 Hz for C4).
- duration: Length of the drone in seconds.
- output_path: Path to save WAV file (optional; if None, plays in real-time).
## License
This library is licensed under the MIT License. See the `LICENSE` file for details.
```
Change Log
==========
0.0.1 (26/03/2025)
-------------------
- First Release
===========
0.0.2 (27/03/2025)
-------------------
- Fixed missing module files in package
0.0.3 (27/03/2025)
-------------------
- Fixed ornaments detection file
0.0.4 (27/03/2025)
-------------------
- Fixed real time full analysis file
0.0.5 (27/03/2025)
-------------------
- Added mel-frequency spectogram generation
0.0.6 (27/03/2025)
-------------------
- seaborn included. README.txt updated
0.0.7 (27/03/2025)
-------------------
- mel-frequency spectogram issue resolved. README.md is created
0.0.8 (06/04/2025)
-------------------
- 3 more spectogram generations added. README.md file updated
0.0.9 (06/04/2025)
-------------------
- fixed bugs
0.0.10 to 0.0.12 (18/04/2025)
-------------------
- added tanpura droid generation
Raw data
{
"_id": null,
"home_page": null,
"name": "bhargava-swara",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "music, analysis, synthesis, carnatic, hindustani, indian classical music, raga, tala, spectograms, signal",
"author": "Kuchi Chaitanya Krishna Deepak",
"author_email": "kckdeepak29@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/37/1e/7e8f55668191cc9a300de6ea046e4b00304b6b72d0bf383b711929da8941/bhargava_swara-0.0.12.tar.gz",
"platform": null,
"description": "# Bhargava Swara\r\n\r\nA Python library for analyzing and visualizing Indian classical music, including spectrogram generation (Mel-frequency, Chroma, CQT, and Cent filterbank), raga, tala, tempo, tradition, ornaments, and full analysis.\r\n\r\n## Prerequisites\r\n\r\n- **Gemini API Key:** \r\n This library uses Google's Gemini API for music analysis. To obtain a key: \r\n 1. Sign up for a Google Cloud account \r\n 2. Enable the Generative AI API in the Google Cloud Console \r\n 3. Create an API key in the \"Credentials\" section \r\n Refer to [Google's Generative AI Docs](https://cloud.google.com/generative-ai/docs) for details\r\n\r\n- **Audio Files:** \r\n Supported formats include WAV and MP3 for analysis and spectrogram generation\r\n\r\n## Installation\r\n\r\nInstall the library using pip:\r\n\r\n```sh\r\npip install bhargava_swara\r\n```\r\n\r\n## Dependencies\r\n\r\n- `google-generativeai>=0.1.0` \r\n- `librosa>=0.10.0` \r\n- `matplotlib>=3.7.0` \r\n- `numpy>=1.24.0`\r\n\r\n## Spectrogram Generation\r\n\r\nGenerate various types of spectrograms to visualize different aspects of audio frequency content over time.\r\n\r\n### Mel-Frequency Spectrogram\r\n```python\r\nfrom bhargava_swara import generate_mel_spectrogram\r\n\r\naudio = \"path/to/audio.wav\"\r\noutput = \"path/to/output_mel_spectrogram.png\"\r\ngenerate_mel_spectrogram(audio, output, n_mels=128, fmax=8000)\r\nprint(\"Mel spectrogram generated successfully!\")\r\n```\r\n\r\n### CQT Spectrogram\r\n```python\r\nfrom bhargava_swara import generate_cqt_spectrogram\r\n\r\naudio = \"path/to/audio.wav\"\r\noutput = \"path/to/output_cqt_spectrogram.png\"\r\ngenerate_cqt_spectrogram(audio, output, hop_length=512, n_bins=84)\r\nprint(\"CQT spectrogram generated successfully!\")\r\n```\r\n\r\n### Cent Filterbank Spectrogram\r\n```python\r\nfrom bhargava_swara import generate_cent_spectrogram\r\n\r\naudio = \"path/to/audio.wav\"\r\noutput = \"path/to/output_cent_spectrogram.png\"\r\ngenerate_cent_spectrogram(audio, output, n_filters=128, fmax=8000)\r\nprint(\"Cent filterbank spectrogram generated successfully!\")\r\n```\r\n\r\n#### Spectrogram Parameters:\r\n- `audio`: Path to the input audio file (e.g., WAV or MP3)\r\n- `output`: Path to save the PNG file\r\n- Mel-specific: `n_mels` (default: 128), `fmax` (default: 8000)\r\n- Chroma-specific: `n_chroma` (default: 12), `hop_length` (default: 512)\r\n- CQT-specific: `hop_length` (default: 512), `n_bins` (default: 84)\r\n- Cent-specific: `n_filters` (default: 128), `fmax` (default: 8000)\r\n\r\n## Music Analysis\r\n\r\nAnalyze various aspects of Indian classical music using the Gemini API.\r\n\r\n### Raga Analysis\r\n```python\r\nfrom bhargava_swara import analyze_raga\r\n\r\napi_key = \"YOUR_API_KEY\"\r\naudio = \"path/to/audio.wav\"\r\nresult = analyze_raga(audio, api_key)\r\nprint(f\"Raga: {result}\")\r\n```\r\n\r\n### Tala Analysis\r\n```python\r\nfrom bhargava_swara import analyze_tala\r\n\r\napi_key = \"YOUR_API_KEY\"\r\naudio = \"path/to/audio.wav\"\r\nresult = analyze_tala(audio, api_key)\r\nprint(f\"Tala: {result}\")\r\n```\r\n\r\n### Tempo Analysis\r\n```python\r\nfrom bhargava_swara import analyze_tempo\r\n\r\napi_key = \"YOUR_API_KEY\"\r\naudio = \"path/to/audio.wav\"\r\nresult = analyze_tempo(audio, api_key)\r\nprint(f\"Tempo: {result}\")\r\n```\r\n\r\n### Tradition Analysis\r\n```python\r\nfrom bhargava_swara import analyze_tradition\r\n\r\napi_key = \"YOUR_API_KEY\"\r\naudio = \"path/to/audio.wav\"\r\nresult = analyze_tradition(audio, api_key)\r\nprint(f\"Tradition: {result}\")\r\n```\r\n\r\n### Ornament Analysis\r\n```python\r\nfrom bhargava_swara import analyze_ornaments\r\n\r\napi_key = \"YOUR_API_KEY\"\r\naudio = \"path/to/audio.wav\"\r\nresult = analyze_ornaments(audio, api_key)\r\nprint(f\"Ornaments: {result}\")\r\n```\r\n\r\n### Full Music Analysis\r\n```python\r\nfrom bhargava_swara import analyze_music_full\r\n\r\napi_key = \"YOUR_API_KEY\"\r\naudio = \"path/to/audio.wav\"\r\nresult = analyze_music_full(audio, api_key)\r\nprint(f\"Full Analysis:\\n{result}\")\r\n```\r\n\r\n## Music Synthesis\r\nCreate Indian classical music elements with ease.\r\n\r\n### Tanpura Drone\r\nGenerate a tanpura drone for practice or ambiance.\r\n\r\n```python\r\nfrom bhargava_swara import generate_tanpura_drone\r\n\r\n# Play in real-time\r\ngenerate_tanpura_drone(pitch=261.63, duration=10)\r\n\r\n# Save to WAV\r\ngenerate_tanpura_drone(pitch=261.63, duration=10, output_path=\"tanpura_drone.wav\")\r\n```\r\n\r\n#### Parameters:\r\n\r\n- pitch: Fundamental frequency of Sa (e.g., 261.63 Hz for C4).\r\n- duration: Length of the drone in seconds.\r\n- output_path: Path to save WAV file (optional; if None, plays in real-time).\r\n\r\n## License\r\n\r\nThis library is licensed under the MIT License. See the `LICENSE` file for details.\r\n```\r\n\r\n\r\nChange Log\r\n==========\r\n\r\n0.0.1 (26/03/2025)\r\n-------------------\r\n- First Release\r\n\r\n===========\r\n\r\n0.0.2 (27/03/2025)\r\n-------------------\r\n- Fixed missing module files in package\r\n\r\n0.0.3 (27/03/2025)\r\n-------------------\r\n- Fixed ornaments detection file\r\n\r\n0.0.4 (27/03/2025)\r\n-------------------\r\n- Fixed real time full analysis file\r\n\r\n0.0.5 (27/03/2025)\r\n-------------------\r\n- Added mel-frequency spectogram generation\r\n\r\n0.0.6 (27/03/2025)\r\n-------------------\r\n- seaborn included. README.txt updated\r\n\r\n0.0.7 (27/03/2025)\r\n-------------------\r\n- mel-frequency spectogram issue resolved. README.md is created\r\n\r\n0.0.8 (06/04/2025)\r\n-------------------\r\n- 3 more spectogram generations added. README.md file updated\r\n\r\n0.0.9 (06/04/2025)\r\n-------------------\r\n- fixed bugs\r\n\r\n0.0.10 to 0.0.12 (18/04/2025)\r\n-------------------\r\n- added tanpura droid generation\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A library for analysis and synthesis of Indian classical music",
"version": "0.0.12",
"project_urls": null,
"split_keywords": [
"music",
" analysis",
" synthesis",
" carnatic",
" hindustani",
" indian classical music",
" raga",
" tala",
" spectograms",
" signal"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "a3bac0841d871c36e87aff2c95a934585adcc771bb310d0a26c628a8c4915838",
"md5": "3cae4599aba78bd6abcb5d6dd644ea2b",
"sha256": "1821352b6e297d36ac90265eaa122305013447dc46e39b88590f384f140f5142"
},
"downloads": -1,
"filename": "bhargava_swara-0.0.12-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3cae4599aba78bd6abcb5d6dd644ea2b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 15605,
"upload_time": "2025-04-18T07:36:05",
"upload_time_iso_8601": "2025-04-18T07:36:05.245681Z",
"url": "https://files.pythonhosted.org/packages/a3/ba/c0841d871c36e87aff2c95a934585adcc771bb310d0a26c628a8c4915838/bhargava_swara-0.0.12-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "371e7e8f55668191cc9a300de6ea046e4b00304b6b72d0bf383b711929da8941",
"md5": "2cf2731158a5d5ff3267736f787b8686",
"sha256": "9c39cce1fce59733a6a1d7586080bda9343bed4e0c3d6720def4cdb9c68e471c"
},
"downloads": -1,
"filename": "bhargava_swara-0.0.12.tar.gz",
"has_sig": false,
"md5_digest": "2cf2731158a5d5ff3267736f787b8686",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 17869,
"upload_time": "2025-04-18T07:36:08",
"upload_time_iso_8601": "2025-04-18T07:36:08.849767Z",
"url": "https://files.pythonhosted.org/packages/37/1e/7e8f55668191cc9a300de6ea046e4b00304b6b72d0bf383b711929da8941/bhargava_swara-0.0.12.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-04-18 07:36:08",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "bhargava-swara"
}