Site Map - skip to main content - dyslexic font - mobile - text - print

Hacker Public Radio

Your ideas, projects, opinions - podcasted.

New episodes Monday through Friday.


Please support our Patrons

Our hosting is kindly provided by Josh from AnHonestHost.com. We would appreciate it if you could donate to help reduce his costs in funding the hosting. He is also accepting bitcoins to 1KsxJr9HtsdaUeU7yaV9bk9bQi21UPBtUq
Please also consider supporting the https://archive.org/donate/ who are now hosting our media files. Right now, a generous supporter will match your contributions 3-to-1. So your $5 donation results in $20 for the Internet Archive.

Correspondent

bgryderclock

Host Image
Host ID: 213

email: bgryderclock.nospam@nospam.gmail.com
episodes: 1

hpr0991 :: Making a Music Sampler with Midi and Pygame

Released on 2012-05-20 under a CC-BY-SA license.

Pygame Midi documentation:
http://www.pygame.org/docs/ref/midi.html

Pygame Mailing List:
http://www.pygame.org/wiki/info

Midi.py sample from pygame example folder:
https://bitbucket.org/pygame/pygame/src/25e3f2cee879/examples/midi.py

Sampler/Sound Looper made from python, pygame and midi:
http://www.pygame.org/project-BadPenni+-+MIDI+Triggered+Sound+Looper-1734-.html

Sample values that populate midi_events variable:

Middle C note key press (notice the data1 is 60 and data2 is 127)
<Event(34-Unknown {'status': 144, 'vice_id': 2, 'timestamp': 6701, 'data1': 60, 'data3': 0, 'data2': 127})>

Middle C note key release (notice the data1 is 60 and data2 is 0)
<Event(34-Unknown {'status': 128, 'vice_id': 2, 'timestamp': 6764, 'data1': 60, 'data3': 0, 'data2': 0})>

Middle C# note key press (notice the data1 is now 61)
<Event(34-Unknown {'status': 144, 'vice_id': 2, 'timestamp': 206684, 'data1': 61, 'data3': 0, 'data2': 127})>

Python code snippet that pulls the note number from the midi_events list and appends an "off" string if it is a key release.

    if str(midi_events[0][0][2]) != "0":
        midinote = str(midi_events[0][0][1])
    else:
        midinote = str(midi_events[0][0][1]) + "off"

Controlling sounds with if statements and our midinote variable:

    distbassrollloop = pygame.mixer.Sound("7FullCircleDistBassRollLoop.wav")
    distsnarerollloop = pygame.mixer.Sound("7FullCircleDistSnareRollLoop.wav")
    distbass = pygame.mixer.Sound("7FullCircleDistBassPad.wav")
    distsnare = pygame.mixer.Sound("7FullCircleDistSnare.wav")

    if midinote == "48":
        distbass.play()

    if midinote == "49":
        distbassrollloop.play(1000)

    if midinote == "49off":
        distbassrollloop.stop()

    if midinote == "50":
        distsnare.play()

    if midinote == "51":
        distsnarerollloop.play(1000)

    if midinote == "51off":
        distsnarerollloop.stop()

Contact info:

bgryderclock on Google+:
https://plus.google.com/u/0/114032638902983586355

bgryderclock on Twitter:
https://twitter.com/bgryderclock

bgryderclock on Identica:
http://identi.ca/bgryderclock

Links


Become a Correspondent