1

という名前のモジュールaifcを Mac の Python にインポートしました。Python 3.3 と Mac OS X 10.8.2 を実行しています。

ある aifc ファイルから別の aifc ファイルにマーカー データを単純にコピーしようとしています。最初のファイルを正常に開き、マーカー データを読み取ることができます。これはうまく機能します。しかし、2 番目の aifc ファイルを開くと、メソッドaifc.open("file2.aifc", 'w')はそのファイルのすべての内容をすぐに削除します。そのため、適切なマーカーはあるが音楽がない aifc ファイルができあがります。

私はいくつかの調査を行い、ファイルが mode で開かれたときにファイルの内容を削除するのが Python の正しい動作であることを発見しました'w''a'そのモードではファイルを追加できると読みました。ただし、aifc.open()モードを試すと、このメソッドはエラーを返します'a'。インタープリターは、モードはまたはでなければならないと言い"r" "rb" "w"ます"wb"

したがって、私は立ち往生しています-おそらくこれは古いライブラリであり、別のものを使用する必要があります。

もしそうなら、Python 内で Apple Objective C ライブラリにアクセスしてオーディオ ファイルを操作する方法を教えてもらえますか。Audio File Services というライブラリがあると思いますが、Python 内でそれをどのように使用できるかは不明です。

私はプログラミングは初めてではありませんが、Python は初めてなので、これらが初心者の質問である場合は申し訳ありません。

4

1 に答える 1

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 で正しく再生されました。

于 2013-03-14T01:41:55.507 に答える