Re: [pygame] Noob question: playing sounds
Hi Miriam - My problem seems to have been with the wav file I was using. I'd always assumed a wav file consisted of little more than raw binary samples, in what case there'd be very little to go wrong, but it seems the structure is more complicated than that. In particular, the file I was using was one of the standard Windows sounds taken from c:\Windows\media, which are in stereo. I imagine Pygame must be able to play stereo wav files, given the right settings, but not with the defaults. I eventually came across the GPIO Music Box at https://www.raspberrypi.org/learning/gpio-music-box/worksheet/ which contains a very simple demo program using the Sonic Pi sounds which are pre-installed in|/opt/sonic-pi/etc/samples/| Running my Pi headless and logging in with PuTTy I got an xcb_comection error message, which I got rid of by typing unset DISPLAY at the shell prompt before launching the Pygame program. Hope that helps. Regards - Philip On 05/06/2015 12:20, Miriam English wrote: Ah. Then by elimination it does seem that python/pygame on Raspberry Pi is the source of the problem somehow. Good luck. Let us know when you solve it. I have a Raspberry Pi too and though I haven't got around to playing with python and pygame on it yet, I hope to in the future. :) Cheers, - Miriam On 05/06/15 20:19, Philip Le Riche wrote: Thanks Miriam, but since I can play sounds with omxplayer that wouldn't seem to be the problem. Kind regards - Philip On 05/06/2015 09:52, Miriam English wrote: It just occurred to me that I recall reading somewhere that there are 2 sound outputs in the Raspberry Pi (the audio jack, and the HDMI connector) and that some people have had difficulty switching between them. You are probably trying to get sound from the audio jack. Did you check whether there was sound coming from the HDMI connector? Or if you're doing it the other way, did you check the audio jack? Just a thought. :) Good luck to you, - Miriam On 05/06/15 18:10, Philip Le Riche wrote: I got rid of the xcb_connection_has_error() by unsetting shell environment variable DISPLAY, which PuTTy was helpfully setting for me (for good reason in other circumstances). The line os.environ[SDL_VIDEODRIVER] = dummy still seems to be necessary. However, I still get no sound. I'll try the RPi forums and see what anyone can suggest there. Regards - Philip On 04/06/2015 20:45, Michael Lutinsky wrote: I can verify that running: $ python /usr/lib/python2.7/dist-packages/pygame/examples/sound.py plays without error on my Kubuntu distro (x86_64 Linux kernel 3.19.0-18, pulseaudio 6.0). Must be a RPi issue? ~ Michael On Wed : Jun 3, 2015 10:38:41 AM you wrote: Well, this is strange. In /usr/lib/python2.7/dist-packages/pygame/examples there is sound.py. This must have worked for someone once, and it doesn't include anything about creating a window. When I run it for the first time it makes a click but doesn't play the sound. It produces the xcb_connection_has_error() message but seems to ignore it. Adding pygame.display.set_mode((1,1)) to my program (which otherwise now is very similar to sound.py) doesn't help. This is driving me nuts! Regards - Philip On 02/06/2015 13:58, diliup gabadamudalige wrote: to do most things with pygame you need to initialize a pygame window. On Tue, Jun 2, 2015 at 3:50 AM, B W stabbingfin...@gmail.com mailto:stabbingfin...@gmail.com wrote: Hi, you cannot use the dummy video driver if you want sound. At least I have not figured out a way to do it. You need at least a 1x1 window. Gumm On Mon, Jun 1, 2015 at 2:11 PM, Philip Le Riche phi...@blueskylark.org mailto:phi...@blueskylark.org wrote: Just trying to get started with pygame and stuck at square 1. All I want to do is play sounds on a Raspberry Pi (Raspbian). No screen. Nothing visual. So I do: import pygame, os, sys from pygame.locals import * os.environ[SDL_VIDEODRIVER] = dummy pygame.mixer.init() sound = pygame.mixer.Sound(Exclamation.wav) sound.play(loops = 0) while pygame.mixer.music.get_busy() == True: continue Having saved it in file try.py, I do python try.py and get xcb_connection_has_error() returned true Yes, I've done an apt-get update and upgrade. I can make sounds with Sonic Pi but this produces nothing. Googling the error seemed to give no relevant results. Can someone give me a hint please? Regards - Philip http://www.diliupg.com http://soft.diliupg.com/ ** This e-mail is confidential. It may also be legally privileged. If you are not the intended recipient or have received it in error, please delete it and all copies from your system and notify the sender immediately by return e-mail. Any unauthorized reading, reproducing, printing or further
Re: [pygame] Noob question: playing sounds
Hi Philip, I appreciate the update. Yes, I was surprised to find that WAV files are a series of chunks of data with headers when I first looked into it a while back. At the time I was mucking about generating raw waveforms mathematically using simple programs to basically just build a file out of bytes (like a simple text file) and couldn't work out why audio programs didn't read them properly. :) I found you can use many (free) audio programs, like sox or audacity to convert raw waveforms into properly constructed WAV files. I'm surprised pygame won't play one of the Windows standard sounds. Perhaps the file is a slightly non-standard sound format and was added to the media folder by another program. I just now tried a few experiments using sox to convert some sounds and it seems pygame doesn't like WAV files that are encoded as: signed integer floating point mu-law a-law gsm but will play them if they're encoded as unsigned integer ima-adpcm ms-adpcm That's a bit of a surprise to me. Maybe that's what happened in your case. You can convert almost any sound file (sox will automatically recognise most formats) by doing something like this: sox sample.wav -a fixedSample.wav That converts sample.wav file into an ms-adpcm file named fixedSample.wav If you download and install sox it will give you lots of useful diagnostics about sounds. It is a commandline program, but that makes it more useful than a GUI program because of how you can hitch it to other programs. Sox will play pretty-much any kind of sound and convert almost anything to almost anything else. If it doesn't recognise the sound format you can tell it what you want it to interpret it as. You can run it from inside python too. Sox can also be used as a kind of synthesiser. For instance try this for a surprisingly realistic synthesised guitar sound: play -n synth pl G2 pl B2 pl D3 pl G3 pl D4 pl G4 delay 0 .05 .1 .15 .2 .25 remix - fade 0 4 .1 norm -1 Play is a command that comes with sox... at least it does for Linux. The version of sox for MSWindows probably does too. Sox is available for almost every operating system in existence. Have fun, - Miriam On 10/06/15 01:47, Philip Le Riche wrote: Hi Miriam - My problem seems to have been with the wav file I was using. I'd always assumed a wav file consisted of little more than raw binary samples, in what case there'd be very little to go wrong, but it seems the structure is more complicated than that. In particular, the file I was using was one of the standard Windows sounds taken from c:\Windows\media, which are in stereo. I imagine Pygame must be able to play stereo wav files, given the right settings, but not with the defaults. I eventually came across the GPIO Music Box at https://www.raspberrypi.org/learning/gpio-music-box/worksheet/ which contains a very simple demo program using the Sonic Pi sounds which are pre-installed in|/opt/sonic-pi/etc/samples/| Running my Pi headless and logging in with PuTTy I got an xcb_comection error message, which I got rid of by typing unset DISPLAY at the shell prompt before launching the Pygame program. Hope that helps. Regards - Philip On 05/06/2015 12:20, Miriam English wrote: Ah. Then by elimination it does seem that python/pygame on Raspberry Pi is the source of the problem somehow. Good luck. Let us know when you solve it. I have a Raspberry Pi too and though I haven't got around to playing with python and pygame on it yet, I hope to in the future. :) Cheers, - Miriam On 05/06/15 20:19, Philip Le Riche wrote: Thanks Miriam, but since I can play sounds with omxplayer that wouldn't seem to be the problem. Kind regards - Philip On 05/06/2015 09:52, Miriam English wrote: It just occurred to me that I recall reading somewhere that there are 2 sound outputs in the Raspberry Pi (the audio jack, and the HDMI connector) and that some people have had difficulty switching between them. You are probably trying to get sound from the audio jack. Did you check whether there was sound coming from the HDMI connector? Or if you're doing it the other way, did you check the audio jack? Just a thought. :) Good luck to you, - Miriam On 05/06/15 18:10, Philip Le Riche wrote: I got rid of the xcb_connection_has_error() by unsetting shell environment variable DISPLAY, which PuTTy was helpfully setting for me (for good reason in other circumstances). The line os.environ[SDL_VIDEODRIVER] = dummy still seems to be necessary. However, I still get no sound. I'll try the RPi forums and see what anyone can suggest there. Regards - Philip On 04/06/2015 20:45, Michael Lutinsky wrote: I can verify that running: $ python /usr/lib/python2.7/dist-packages/pygame/examples/sound.py plays without error on my Kubuntu distro (x86_64 Linux kernel 3.19.0-18, pulseaudio 6.0). Must be a RPi issue? ~ Michael On Wed : Jun 3, 2015 10:38:41 AM you wrote: Well, this is strange. In