我已经在Mac上将名为aifc
的模块导入Python,我正在运行Python 3.3和Mac OS X 10.8.2。
我正在尝试将标记数据从一个aifc文件复制到另一个aifc文件。我可以成功打开第一个文件并读取标记数据,效果很好。但是当我打开第二个aifc文件时,方法aifc.open("file2.aifc", 'w')
会立即删除该文件的所有内容。所以我最终得到了一个带有正确标记但没有音乐的aifc文件!
我做了一些研究,发现当用文件'w'
打开文件时,删除文件内容是Python的正确行为。我已经读过该模式'a'
允许附加文件。但是,当我尝试使用模式aifc.open()
时,'a'
方法会出现错误,解释程序说该模式必须为"r"
"rb"
"w"
或{{1} }。
因此我被困 - 也许这是一个旧图书馆,我应该使用不同的东西。
如果是这样,有人可以指导我如何在Python中访问Apple Objective C库来操作音频文件。我认为有一个名为Audio File Services的库,但我不清楚如何在Python中使用它。
虽然我不是编程的新手,但我是Python的新手,所以如果这些是新手问题就道歉。
答案 0 :(得分:1)
我自己刚遇到过这个!
aifc.open
辅助函数明确地将模式限制为'r','rb','w'和'wb'。看来这个模块中的类(Aifc_read
和Aifc_write
)仅用于读取现有的AIFC文件或分别从头开始创建一个全新的AIFC文件。
以下是我使用此模块作为可读写的AIFC文件实用程序所提出的内容:
import aifc
import sys
class AIFC(aifc.Aifc_write, aifc.Aifc_read):
def __init__(self, f):
aifc.Aifc_write.initfp(self, f)
aifc.Aifc_read.initfp(self, f)
if (__name__ == "__main__"):
f = open(sys.argv[1], "rb+")
a = AIFC(f)
# read test
print("%s channels, %s bits, %s Hz sampling rate, %s frames" %
(a.getnchannels(), a.getsampwidth() * 8, a.getframerate(),
a.getnframes()))
# write ("identity") test
data = a.readframes(a.getnframes())
a.setpos(0)
a.writeframes(data)
a.close() # f.close()
它尚未经过广泛测试,但似乎确实可以解决问题。我通过它运行了几个原始的AIF,它们都在Audacity中正确播放。