User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the Python section within the Software Development category of DaniWeb, a massive community of 422,371 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 4,553 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our Python advertiser: Programming Forums
Sep 4th, 2007
Views: 2,427
Another application of Python module base64, this time to embed midi music data in your program. You also need the module pygame to execute this Python code. Enjoy the music!
python Syntax
  1. # play an embedded midi music file on your computer's sound card
  2. # experiments with module pygame from: http://www.pygame.org/
  3. # tested with Python25 and PyGame171 vegaseat 04sep2007
  4.  
  5. """
  6. # use this short program to create the base64 encoded midi music string
  7. # (base64 encoding simply produces a readable string from binary data)
  8. # then copy and paste the result into your pygame program ...
  9. import base64
  10. mid_file = "FishPolka.mid"
  11. print "mid64='''\\\n" + base64.encodestring(open(mid_file, 'rb').read()) + "'''"
  12. """
  13.  
  14. import pygame
  15. import base64
  16.  
  17. def play_music(music_file):
  18. """
  19. stream music with mixer.music module in blocking manner
  20. this will stream the sound from disk while playing
  21. """
  22. clock = pygame.time.Clock()
  23. try:
  24. pygame.mixer.music.load(music_file)
  25. print "Music file %s loaded!" % music_file
  26. except pygame.error:
  27. print "File %s not found! (%s)" % (music_file, pygame.get_error())
  28. return
  29. pygame.mixer.music.play()
  30. while pygame.mixer.music.get_busy():
  31. # check if playback has finished
  32. clock.tick(30)
  33.  
  34. mid64='''\
  35. TVRoZAAAAAYAAQAGAJBNVHJrAAAAJwD/WAQEAhgIAP9ZAgAAAP9RAwfCOwD/BgpGaXNoLVBvbGth
  36. AP8vAE1UcmsAAANoAP8hAQAA/wMOQWNjb3JkaW9uIEhpZ2gAwRUAsQd/ALEKQAD/AQpGaXNoIFBv
  37. bGthAJFOZGhOAAFQYyNQAAFSZBdSADFQZCNQACVOYxdOADFMZCNMACVLYxdLADFJYyNJACVOZCNO
  38. AAFNYyNNAAFOYyNOAAFQZCNQAAFOZCNOAAFMZCNMAAFLZCNLAAFHYyNHAAFLYyNLAAFKYyNKAAFL
  39. YyNLAAFMZCNMAAFLZCNLAAFJZCNJAAFHYyNHAAFCYyNCAAE/YyM/AAFCYyNCAAFHZCNHAAFLZCNL
  40. AAFOYxFOADdQYyNQACVQYyNQACVJYyNJACVJZIEPSQABTGQjTAABS2QjSwABTGMjTAABTmQjTgAB
  41. TGMjTAABS2QjSwABSWMjSQABSGMjSAABSWQjSQABQmMjQgABRmQjRgABSWQjSQABTGQjTAABSWMj
  42. SQABRmQjRgABRGQjRAABQmMjQgABRmQjRgABSWQjSQABTGMjTAABUmMRUgA3UGQjUAAlUGMjUAAl
  43. S2MjSwAlS2SBD0sAAU5jI04AAU1kI00AAU5jI04AAVBjI1AAAU5jI04AAUxkI0wAAUtjI0sAAUdk
  44. I0cAAUtjI0sAAUpkI0oAAUtkI0sAAUxjI0wAAUtkI0sAAUlkI0kAAUdjI0cAAUJjI0IAAT9kIz8A
  45. AUJjI0IAAUdkI0cAAUtkI0sAAU5kI04AAUdjI0cAAUtjI0sAAU5kI04AAVBjgXtQACVQZCNQAAFP
  46. YyNPAAFQZCNQAAFSYyNSAAFVYyNVAAFTYyNTAAFSYyNSAAFQYyNQAAFOYyNOAAFNYyNNAAFOZCNO
  47. AAFPZCNPAAFQZCNQAAFOYyNOAAFMZCNMAAFLYyNLAAFMZCNMAAFLYyNLAAFMZCNMAAFNZCNNAAFO
  48. ZCNOAAFMZCNMAAFLZCNLAAFJYyNJAAFLZCNLACVMYyNMACVNZCNNACVOYyNOACVQZCNQAAFPZCNP
  49. AAFQYyNQAAFSZCNSAAFVYyNVAAFTYyNTAAFSYyNSAAFQZCNQAAFOZCNOAAFNYyNNAAFOZCNOAAFP
  50. YyNPAAFQZCNQAAFOYyNOAAFMZCNMAAFLZCNLAAFJZCNJAAFEZCNEAAFJZCNJAAFMYyNMAAFQZBFQ
  51. ADdSYyNSACVTZCNTACVSYyNSACVTZCNTAAD/LwBNVHJrAAAFMAD/IQEAAP8DDUFjY29yZGlvbiBM
  52. b3cAwhUAsgd/ALIKQACSQmRrQgABRGMjRAABRmMXRgAxRGMjRAAlQmQXQgAxQGQjQAAlP2MXPwAx
  53. PWMjPQBtQmQAP2MAO2MROwAAPwAAQgATP2QAQmQAO2QROwAAQgAAPwBbO2QAP2MAQmMRQgAAPwAA
  54. OwB/P2QAO2MAQmQRQgAAOwAAPwATP2MAO2MAQmMRQgAAOwAAPwBbO2MAP2MAQmMRQgAAPwAAOwB/
  55. QmQAP2MAO2QROwAAPwAAQgATP2MAQmMAO2QROwAAQgAAPwBbP2MAO2QAQmMRQgAAOwAAPwATQmMA
  56. P2MAO2QROwAAPwAAQgBbQGMAOmMAQmQRQgAAOgAAQAATOmQAQGQAQmQRQgAAQAAAOgATQmQAQGMA
  57. OmQROgAAQAAAQgA3OmQAQGQAQmMRQgAAQAAAOgB/OmQAQGQAQmQRQgAAQAAAOgATQGMAOmQAQmQR
  58. QgAAOgAAQABbOmMAQGMAQmQRQgAAQAAAOgB/QGQAOmMAQmMRQgAAOgAAQAATQGMAOmQAQmQRQgAA
  59. OgAAQABbOmMAQGQAQmMRQgAAQAAAOgB/QGQAOmQAQmQRQgAAOgAAQAATQGQAOmMAQmQRQgAAOgAA
  60. QABbOmMAQGQAQmMRQgAAQAAAOgATQGQAOmQAQmMRQgAAOgAAQABbP2QAO2QAQmMRQgAAOwAAPwAT
  61. P2QAO2QAQmQRQgAAOwAAPwATP2QAO2QAQmMRQgAAOwAAPwA3P2QAO2MAQmMRQgAAOwAAPwB/QmMA
  62. P2QAO2MROwAAPwAAQgATP2MAQmQAO2MROwAAQgAAPwBbO2QAP2QAQmMRQgAAPwAAOwB/P2MAO2QA
  63. QmMRQgAAOwAAPwATP2MAO2MAQmMRQgAAOwAAPwBbO2MAP2MAQmQRQgAAPwAAOwB/QmQAP2MAO2MR
  64. OwAAPwAAQgATP2QAQmQAO2MROwAAQgAAPwBbP2QAO2MAQmQRQgAAOwAAPwATQmMAP2MAO2MROwAA
  65. PwAAQgBbO2QARGMAQGQRQAAARAAAOwATO2MARGQAQGQRQAAARAAAOwATO2QARGQAQGMRQAAARAAA
  66. OwA3O2MARGQAQGMRQAAARAAAOwB/QGQARGMAO2QROwAARAAAQAATQGMARGMAO2QROwAARAAAQABb
  67. O2MAQWMARGMRRAAAQQAAOwB/P2QAO2QAQmMRQgAAOwAAPwATP2QAO2MAQmQRQgAAOwAAPwBbO2QA
  68. P2QARGQRRAAAPwAAOwB/PWMAQGMARGQRRAAAQAAAPQATPWMAQGQARGQRRAAAQAAAPQBbOmMAPWQA
  69. QmQRQgAAPQAAOgATOmMAPWQAQmMRQgAAPQAAOgBbQmMAP2QAO2MROwAAPwAAQgATQmMAP2QAO2MR
  70. OwAAPwAAQgATO2QAQmMAP2MRPwAAQgAAOwA3QmMAO2QAP2MRPwAAOwAAQgB/QGMARGQAO2QROwAA
  71. RAAAQAATQGQARGQAO2MROwAARAAAQABbO2MAQWMARGQRRAAAQQAAOwB/P2QAO2QAQmQRQgAAOwAA
  72. PwATP2MAO2QAQmQRQgAAOwAAPwBbO2QAP2QARGMRRAAAPwAAOwB/RGQAPWMAQGQRQAAAPQAARAAT
  73. PWQAQGMARGQRRAAAQAAAPQBbQmMAOmMAPWQRPQAAOgAAQgATOmMAPWMAQmQRQgAAPQAAOgATP2QA
  74. QmMAR2MRRwAAQgAAPwA3P2QAQmQAR2MRRwAAQgAAPwA3R2MAQmQAP2MRPwAAQgAARwAA/y8ATVRy
  75. awAAAYQA/yEBAAD/AwlUdWJhIEJhc3MAwzoAswd4ALMKQACTKmNrKgABLGMjLAABLmMXLgAxLGMj
  76. LAAlKmMXKgAxKGMjKAAlJ2QXJwAxJWQjJQAlI2RHIwBJHmNZHgA3I2NHIwBJHmRZHgA3I2NHIwAB
  77. HmMjHgAlI2M1IwATJ2M1JwATKmNZKgA3JWNZJQA3HmRZHgA3JWNHJQBJHmRZHgA3JWRHJQBJHmQ1
  78. HgATH2RHHwABIGMjIAAlImRHIgABI2QjIwAlImMjIgAlIGMjIAAlHmNHHgABI2MjIwBtHmNZHgA3
  79. I2RHIwBJHmNZHgA3I2QjIwAlHmNHHgABI2QjIwAlJ2MjJwAlKGNHKABJI2RHIwBJHGNZHAA3HWNZ
  80. HQA3HmRZHgA3IGRZIAA3JWRZJQA3HmRZHgA3I2MvIwAZImMvIgAZIGMvIAAZHmQvHgAZHGRZHAA3
  81. HWRZHQA3HmRZHgA3IGNZIAA3JWNZJQA3HmRZHgA3I2QvIwAZHmQvHgAZI2MvIwAA/y8ATVRyawAA
  82. AYYA/yEBAAD/AwtCYXNzIERvdWJsZQDEIgC0B24AtApAAJQqY2sqAAEsYyMsAAEuYxcuADEsZCMs
  83. ACUqZBcqADEoYyMoACUnYxcnADElYyMlACUjZEcjAEkeZFkeADcjZEcjAEkeZFkeADcjZEcjAAEe
  84. ZCMeACUjZDUjABMnZDUnABMqZFkqADclZFklADceY1keADclZEclAEkeY1keADclZEclAEkeYzUe
  85. ABMfZEcfAAEgZCMgACUiZEciAAEjZCMjACUiYyMiACUgZCMgACUeY0ceAAEjZCMjAG0eY1keADcj
  86. Y0cjAEkeZFkeADcjYyMjACUeY0ceAAEjZCMjACUnYyMnACUoZEcoAEkjZEcjAEkcY1kcADcdY1kd
  87. ADceZFkeADcgY1kgADclY1klADceY1keADcjYy8jABkiZC8iABkgZC8gABkeYy8eABkcY1kcADcd
  88. ZFkdADceZFkeADcgY1kgADclY1klADceZFkeADcjZC8jABkeYy8eABkjYy8jAAD/LwBNVHJrAAAD
  89. PQD/IQEAAP8DBURydW1zALkHcQC5CkAAmTluACZ3ACRuASYAAyQAADkADCZYASYADyZVASYADyZU
  90. ASYADyZSASYADiZPASYADiZNASYADSZ6BCYAICZ5ACRtBCQAACYAQyZ6BCYARSZ5ACRsBCQAACYA
  91. QiZ+BCYAFyZ8BCYADSZ/BCYAGCZ6AiRnAiYAAiQAQiZ/BCYARiRvAjluAiQAAjkAQip3BCoAQyRl
  92. BCQARSpoBCoAQyRmBCQARSpqBCoAQyRoBCQARSpsBCoAQyRoBCQARSprBCoAQyRkBCQARSpuBCoA
  93. QyRjBCQARSpkBCoAQyRmBCQARSppBCoAQyRmBCQARSpxBCoARCRmBCQARCp6BCoARCRoBCQARCpy
  94. BCoARCRlBCQARCp/BCoARSRpBCQAQyp6BCoARCRqBCQAQyp6BCoARSRqBCQARCp6BCoARCRpBCQA
  95. RCp/BCoARSRrBCQAQyV6ACp1BCoAQyUAASRnBCQARCV7ACp7BCoAQyUAASRlBCQARCV7ACp9BCoA
  96. QyUAASRoBCQARCV7ACp1BCoAQyUAASRrBCQARCV6ACp+BCoAQyUAASRpBCQAQyp3ASV7ACRoAyoA
  97. ASQAQyUAASRnBCQARCV7ACp6BCoAICV6IyUAAiRpBCQAHiUAJSV6ACp5BCoAQyUAASRrBCQARCV6
  98. ACp4BCoAQyUAASRwBCQARCV6ACp8BCoAQyUAASRrBCQAQyp6ASV6AyoARCUAASRmBCQARCV6ACp9
  99. BCoAQyUAASRpBCQARCV7ACp3BCoAQyUAASRqBCQARCV7ACp0BCoAQyUAASRqBCQARCV6ACp6BCoA
  100. ICV6IyUAASRlBCQAHyUAJCp6ASV7AyoARCUAADlhAiR/AjkAAiQAH7kHdBG5B3ETmSV6ACp4BCoA
  101. QyUAASRuBCQARCV6ACpuBCoAQyUAACRwBCQARCp3ASV7AyoARCUAASRnBCQAQyp2ASV7AyoARCUA
  102. ASRuBCQARCV7ACp6BCoAQyUAASRtBCQAQyp6ASV7AyoARCUAASV6ACRsBCQAQiZ/ASUAAyYAFyZ8
  103. BCYADSZ/BCYAGCZ5Ajl6ACRoAiYAAiQAgQs5AAD/LwA=
  104. '''
  105.  
  106. music_file = "FishPolka.mid"
  107.  
  108. # convert back to a binary midi and save to a file in the working directory
  109. fish = base64.b64decode(mid64)
  110. fout = open(music_file,"wb")
  111. fout.write(fish)
  112. fout.close()
  113.  
  114. freq = 44100 # audio CD quality
  115. bitsize = -16 # unsigned 16 bit
  116. channels = 2 # 1 is mono, 2 is stereo
  117. buffer = 1024 # number of samples
  118. pygame.mixer.init(freq, bitsize, channels, buffer)
  119.  
  120. # optional volume 0 to 1.0
  121. pygame.mixer.music.set_volume(0.8)
  122.  
  123. try:
  124. # use the midi file you just saved
  125. play_music(music_file)
  126. except KeyboardInterrupt:
  127. # if user hits Ctrl/C then exit
  128. # (works only in console mode)
  129. pygame.mixer.music.fadeout(1000)
  130. pygame.mixer.music.stop()
  131. raise SystemExit
Post Comment

Only community members can submit or comment on code snippets. You must register or log in to contribute.

DaniWeb Marketplace (Sponsored Links)
All times are GMT -4. The time now is 8:22 am.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC