123

I want to make a in-memory file to use in pygame mixer. I mean something like http://www.pygame.org/docs/ref/music.html#pygame.mixer.music.load which says load() method supports file object.

import requests
from pygame import mixer

r = requests.get("http://example.com/some_small_file.mp3")
in_memory_file = file(r.content) # something like this
mixer.music.init()
mixer.music.load(in_memory_file)
mixer.music.play()

1 Answer 1

204

You are probably looking for BytesIO or StringIO classes from Python io package, both available in python 2 and python 3. They provide a file-like interface you can use in your code the exact same way you interact with a real file.

StringIO is used to store textual data:

import io

f = io.StringIO("some initial text data")

BytesIO must be used for binary data:

import io

f = io.BytesIO(b"\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x01\x01")

To store MP3 file data, you will probably need the BytesIO class. To initialize it from a GET request to a server, proceed like this:

import requests
from pygame import mixer
import io

r = requests.get("http://example.com/somesmallmp3file.mp3")
inmemoryfile = io.BytesIO(r.content)

mixer.music.init()
mixer.music.load(inmemoryfile)
mixer.music.play()

# This will free the memmory from any data
inmemoryfile.close()

Additional note: as both classes inherit from IOBase, they can be used as context manager with the with statement, so you don't need to manually call the close() method anymore:

import requests
from pygame import mixer
import io

r = requests.get("http://example.com/somesmallmp3file.mp3")

with io.BytesIO(r.content) as inmemoryfile:
    mixer.music.init()
    mixer.music.load(inmemoryfile)
    mixer.music.play()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.