更新:リンクされた.xmファイルを正常に再生するシンプルなデモをcythonで作成しました。基本的にはthis c demo codeの翻訳です。私のコードはthis github pageにあります。 Ubuntuで動作させるためには、libxmp-dev
パッケージをインストールしなければなりませんでした。現時点ではすべてがハードコードされているので、プロジェクトでより直接的に使用できるようにリファクタリングする必要があります。
これは決して決定的な答えではありません。私はパイガムがここの仕事のための正しいツールであるかどうか疑問に思う多くの潜在的な落とし穴に遭遇しましたが、私が今までに見つけたものといくつかの提案を提示します。
それは.xm
高速トラッカーMOD ULE形式ではなく、単にサンプルデータの配列を再生するよりもその中にあなたの典型的なWAV/OGG/MP3ファイルと異なっているように、あなたが作成するために一緒に別のMIDI機器とサンプルを組み合わせることができます見えますあなたの質問にリンクされている(甘い)チプーンのような音楽。
SDL/pygameはこのようなファイルを再生できますが、かなり制限されています。 pygameのmusicモジュールを見ると、set_pos
関数があります。しかし、それを使用しようと私にpygame.error: set_pos unsupported for this codec
を与えた。興味深いことに、私はこれを回避するには、キーワードを使用してpygame.mixer.music.play
を使用して対処することができました。ほとんどのファイル形式のstart
は、ファイルを開始する前の秒単位のオフセット(曲の最初の再生時のみ)ですが、.xm
ファイルのようにMOD
ファイルの意味が異なります。 Apparentlyの場合は、MODファイルのpattern
に対応します。その結果、ファイル内で各パターンがどこから始まるかに基づいて、パイゲームで使用できる潜在的な出発点が非常に限られています。
開始したい特定のパターン番号がある場合は、ループするには次のコードで十分です。私は音が「ループ」「オフセットパターン」適切なとサウンドファイルに終了したときに表示するpygameののイベントシステムを使用することに注意してください:この時点で
import pygame
pygame.init()
pygame.mixer.music.load('zeta_force_level_2.xm')
pattern = 10
loop_event = pygame.USEREVENT + 1
pygame.mixer.music.set_endevent(loop_event)
pygame.mixer.music.play(start=pattern)
while True:
for event in pygame.event.get():
if event.type == loop_event:
pygame.mixer.music.play(start=pattern)
、あなたは正確にこれらのpatterns
をしているか疑問に思うかもしれませんか?あなたはffmpegのは、システムにインストールしている場合は、次の出力をファイルにffprobe
を実行して取得することができます:
あなたがのためのスタート地点として選択することができ、そこからこのファイル内の20個のパターンがあるように見えます
Input #0, libmodplug, from 'zeta_force_level_2.xm':
Metadata:
name : zeta force level 2
instrument : by zabutom --
: bye bye computer..
: see you in a week
sample : zeta force level 2
extra info : 20 patterns, 10 channels, 3/14 instruments, 1/14 sample
Duration: 00:01:01.00, bitrate: 3 kb/s
Stream #0:0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
ループ。あなたの特定のファイルに関する情報を入手するには、開く(および編集!)あなたのファイルをMilkyTracker
のようなツールにし、このような出力を得ることができます。
がユーチューブでオンラインMilkyTrackerのためのいくつかのチュートリアルがありますが、それが見えますかなり複雑なソフトウェアのように。
そこもlibxmpと呼ばれるライブラリのように見えるし、そのはpython binding対応します。これはMODファイルのデータを、pyaudio
などのライブラリやOpenALにバインドされたPythonで再生できるシンプルなPCM配列にレンダリングするために必要な変換を処理する必要があります。いずれにせよ、あなたの仕事はあなたのために切り取られているようです。
libxmp-pythonは面白そうですが、正しく再生するかどうかテストする必要があります。私は答えを受け入れるだろうとにかく、とにかく返信してくれてありがとう。 – MaxLunar
@MaxLunar週の残りの部分(4日以上)の間、賞金を開いたままにしておき、徐々にあなたの質問に大きな視界を与えます。受け入れられていない質問が回答を得る可能性がさらに高いことを考慮して、他の回答が表示されるかどうかを確認するために、最後まで受け入れを待つことをおすすめします。 –
@MaxLunarちょうど私がリンクしていたライブラリを試して、どのOSプラットフォームとPythonバージョンを使用しているのだろうかと思っていましたか? libxmpのpythonバインディングがpython2で書かれているようです... – CodeSurgeon