Skip to content

A python library which can generate sounds played by instruments

License

Notifications You must be signed in to change notification settings

Ibrahim2750mi/PyMusic-Instrument

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

About

A python library which can generate sounds played by instruments mainly guitar and piano. It uses PyAudio as its dependency.

Getting Started

Pre-requisites

You just need to know basic python syntax to use this library.

Installation

If in your machine previously you have never installed PyAudio then do this:

Unix:

sudo apt-get install libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0

Windows:

Download the binaries from here
Now do this
pip install PyAudio‑0.2.11‑cp39‑cp39m‑win_amd64.whl

Then
python3 -m pip install PyMusic-Instrument

Usage

Playing piano notes.

from Instrument import Instrument

piano = Instrument(bit_rate = 44100)
piano.record_key(52, duration=0.3)  # C5
piano.record_chord([(52, 56, 61)], duration=0.3)  # C5 E5 A5

piano.play()
piano.close()   # Terminates PyAudio

Playing guitar strings.

guitar = Instrument(44100)
guitar.record_key(25, duration=0.5)  # A
guitar.play()
guitar.clear_sample()  # clears the sample
guitar.close()

You can look at here the key numbers for corresponding frequency.

Alternatively you can also plot the graph

import matplotlib.pyplot as plt

key_colors = {40: ["red", 1], 42: ["blue", 1], 44: ["green", 1], 45: ["gray", 1],
                  47: ["orange", 1], 35: ["purple", 1], ((51, 56, 61),): ['black', 1]}

# piano.graphing sample contains key, time take as an array, wave equation as an array.
for key, time, wave in piano.graphing_sample:
    if key_colors[key][1]:
        plt.plot(time, wave, label=key, color=key_colors[key][0])
        key_colors[key][1] = 0
    else:
        plt.plot(time, wave, color=key_colors[key][0])

plt.show()

Or the spectogram

import librosa.display

amplitude = librosa.stft(piano.sample)
db = librosa.amplitude_to_db(abs(amplitude))
plt.figure(figsize=(14, 5))
librosa.display.specshow(db, sr=44100, x_axis='time', y_axis='hz')
plt.colorbar()
plt.show()

Documentation

https://pymusic-instrument.readthedocs.io/en/latest/

About

A python library which can generate sounds played by instruments

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages