pygame混音器将音频保存到磁盘?

Posted

技术标签:

【中文标题】pygame混音器将音频保存到磁盘?【英文标题】:pygame mixer save audio to disk? 【发布时间】:2013-06-25 08:21:07 【问题描述】:

使用 pygame 混音器,我打开一个音频文件并对其进行操作。我找不到将“声音对象”保存到磁盘上的本地文件的方法。

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

有没有办法做到这一点?我一直在研究 pygame 混音器文档,但找不到与此相关的任何内容。

【问题讨论】:

【参考方案1】:

您的问题已经存在将近两年了,但如果人们仍在寻找答案:您可以使用wave 模块(原生 Python)保存 PyGame Sound 实例。

# 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。

【讨论】:

【参考方案2】:

我从未尝试过,所以我只是猜测它可能会起作用。 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()

【讨论】:

它可能不会转储 mp3 文件格式的数据。它可能是一个 wav 文件。 这行不通。这是 ipython 测试的摘录: 在 [23] 中:sound = pygame.mixer.Sound('FishPolka.mid') 在 [24] 中:sr = sound.get_raw() ----------- -------------------------------------------------- -------------- AttributeError Traceback (最近一次调用最后) E:\Documents and Settings\Me\Desktop\ in () AttributeError: 'Sound' object has [25] 中没有属性“get_raw”:sound.g sound.get_buffer sound.get_length sound.get_num_channels sound.get_volume【参考方案3】:

这不是一个答案。这是一条评论,因为我上面写的评论不清楚,因为我不知道如何使回车起作用。

我的评论是:上述解决方案不起作用。

这是使用 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

【讨论】:

你使用的是什么版本的 Pygame?文档(我专门链接到)明确指出它是 Pygame 1.9.2 中的新内容。 感谢您的澄清,哈兹。那是好消息。我正在使用 In [1]: import pygame In [2]: pygame.version.ver Out[2]: '1.9.1release'

以上是关于pygame混音器将音频保存到磁盘?的主要内容,如果未能解决你的问题,请参考以下文章

将音频流保存到磁盘的推荐方法

Python3+叠加两个音频文件,实现混音

加载和选择音频文件到音频单元

音频混音是啥

Adobe Auditon使用功能:将音频文件切分成多段,并将每段音频分别保存到不同的文件中

制作程序化音频混音的有效方法