[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

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

/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 <stabbingfinger@xxxxxxxxx

<mailto:stabbingfinger@xxxxxxxxx>> 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

<philip@xxxxxxxxxxxxxxx <mailto:philip@xxxxxxxxxxxxxxx>> 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 dissemination of this e-mail or its contents is

strictly prohibited and may be unlawful. Internet communications

cannot be guaranteed to be timely, secure, error or virus-free. The

sender does not accept liability for any errors or omissions.


**********************************************************************************************














--
If you don't have any failures then you're not trying hard enough.
 - Dr. Charles Elachi, director of NASA's Jet Propulsion Laboratory
-----
Website: http://miriam-english.org
Blogs:   http://miriam-e.dreamwidth.org
         http://miriam-e.livejournal.com