0

曲の BPM 値を取得するために AppleScript を使用しようとしています。最終的にはゲームで実装したいと思っています。これが私のコードです:

import os
import time
import sys


def getBPM():
    iTunesInstruct = """'
    tell application "iTunes"
    set k to get bpm of current track
    end tell
    return k
    '"""
    bpm = os.system('arch -i386 osascript -e ' + iTunesInstruct )
    #bpm =90

    bpm = int(bpm)
    bpm = round(bpm)

    if bpm > 250:
        bpm = 200
    return bpm


def getBeatSecond(bpm):
    bps = float(bpm) / 60
    #raw_input(bps)
    return float(bps)

i = 0

beatMatch = True

while True:
    beat = 1 / getBeatSecond(getBPM()) # BPS Beat divided by a second.

    if beatMatch:
        time.sleep(beat)
        print beat
    else:
        raw_input('Go??')
    i += 1
    if i > 50:
        break

しかし、これは 1 回しか機能しないようです... 聞いていた曲の BPM を取得し、それが 94 であることを確認し、2 回目の反復で 0 であると考え、0 で割って死亡したようです。どうしたの?

4

1 に答える 1

1

os.systemはコマンドの完了を待ちません。

90 = osascript の結果、0 = エラーなし、終了ステータス ( os.system )。

使用するsubprocess.Popen

from subprocess import Popen, PIPE

def getBPM():
    cmd = "arch -i386 osascript -e " + """'tell application "iTunes" to return bpm of current track'"""
    bpm, tError = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE).communicate()
    if bpm > 250:
        return = 200
    return int(bpm)
于 2012-07-09T00:26:05.930 に答える