2013-06-25 5 views
2

Использование pygame mixer, я открываю аудиофайл и управляю им. Я не могу найти способ сохранить «Звуковой объект» в локальном файле на диске.pygame mixer сохраняет аудио на диск?

sound_file = "output.mp3" 
    sound = pygame.mixer.Sound(sound_file) 

Есть ли способ сделать это? Я изучал документы для микшера pygame, но я не мог найти ничего подобного.

ответ

2

Ваш вопрос почти два года, но в случае, если люди все еще ищут ответ: Вы можете сохранить экземпляры PyGame звука с помощью модуля wave (родной Python).

# create a sound from NumPy array of file 
snd = pygame.mixer.Sound(my_sound_source) 

# open new wave file 
sfile = wave.open('pure_tone.wav', 'w') 

# set the parameters 
sfile.setframerate(SAMPLINGFREQ) 
sfile.setnchannels(NCHANNELS) 
sfile.setsampwidth(2) 

# write raw PyGame sound buffer to wave file 
sfile.writeframesraw(snd.get_buffer().raw) 

# close file 
sfile.close() 

Дополнительная информация и примеры на GitHub: https://github.com/esdalmaijer/Save_PyGame_Sound.

0

Я никогда не пробовал это, поэтому я только предполагаю, что это может сработать. Объект pygame.mixer.Sound имеет функцию get_raw(), которая возвращает массив байтов в Python 3.x и строку в Python 2.x. Я думаю, вы могли бы использовать этот массив байтов для сохранения звука.

http://www.pygame.org/docs/ref/mixer.html#pygame.mixer.Sound.get_raw

Я ожидаю, что это будет выглядеть примерно так:

sound = pygame.mixer.Sound(sound_file) 
... # your code that manipulates the sound 
sound_raw = sound.get_raw() 
file = open("editedsound.mp3", "w") 
file.write(sound_raw) 
file.close() 
+0

Возможно, он не сбрасывает данные для формата mp3-файла. Возможно, что это будет wav-файл. –

+0

Это НЕ РАБОТАЕТ. Вот выдержка из теста ipython: В [23]: sound = pygame.mixer.Sound ('FishPolka.mid') В [24]: sr = sound.get_raw() ------- -------------------------------------------------- ------------------ AttributeError Traceback (самый последний вызов последнего) E: \ Documents и Settings \ Me \ Desktop \ в () AttributeError: объект «Звук» не имеет атрибута «get_raw» В [25]: sound.g sound.get_buffer sound.get_length sound.get_num_channels sound.get_volume –

0

Это НЕ asnwer. Это комментарий, потому что комментарий, который я написал выше, неясен, потому что я не могу понять, как заставить работу каретки работать.

Мой комментарий: Вышеупомянутое решение НЕ РАБОТАЕТ.

Вот выдержка из теста с ipython.

In [23]: sound = pygame.mixer.Sound('FishPolka.mid') 

In [24]: sr = sound.get_raw() 
--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 

E:\Documents and Settings\Me\Desktop\<ipython console> in <module>() 

AttributeError: 'Sound' object has no attribute 'get_raw' 

In [25]: sound.g 
sound.get_buffer  sound.get_length  sound.get_num_channels sound.get_volume 
+0

Какую версию Pygame вы используете? В документации (к которой я специально привязался) четко указано, что она новая в Pygame 1.9.2. – Haz

+0

Спасибо за разъяснение, Хаз. Это хорошие новости. Я использовал In [1]: import pygame В [2]: pygame.version.ver Out [2]: '1.9.1release' –