0

以下を定義に変換しようとしていますが、おそらく許可されていないことをしています...何が間違っているのでしょうか。

# Same for both
import alsaaudio
l_input = alsaaudio.PCM(alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NONBLOCK, card='default')
r_input = alsaaudio.PCM(alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NONBLOCK, card='default')
#

l, data = l_input.read()
if l > 0:
  # transform data to logarithmic scale
  lin_vu = (math.log(float(max(audioop.max(data, 2),1)))-log_lo)/(log_hi-log_lo)
  # Calculate value
  lin_vu = (min(max(int(lin_vu*15),0),15))
l, data = r_input.read()
if l > 0:
  # transform data to logarithmic scale
  rin_vu = (math.log(float(max(audioop.max(data, 2),1)))-log_lo)/(log_hi-log_lo)
  # Calculate value
  rin_vu = (min(max(int(rin_vu*15),0),15))

リストされている2つだけでなく、4つの値を読み取る必要があるため、このようなことをしたいと思っていました:

def readvu( src ):
  l, data = src.read()
  if l > 0:
    # transform data to logarithmic scale
    l_vu = (math.log(float(max(audioop.max(data, 2),1)))-log_lo)/(log_hi-log_lo)
    # Calculate value
    l_vu = (min(max(int(l_vu*15),0),15))

lin_vu = readvu( 'l_input' );
rin_vu = readvu( 'r_input' );

しかし、それは言及されたエラーをもたらします...

4

2 に答える 2

1

解決策は明らかです。 を呼び出すとreadvu('l_input')、 becomeとingsrcは失敗します。'l_input'.read()

呼び出しは次のようになります

lin_vu = readvu(l_input)
rin_vu = readvu(r_input)

文字列ではなく、実際の変数を渡します。

于 2013-10-21T09:45:15.330 に答える
0

考え方を変えた結果、次のようになりました。

# Convert log scale, calculate value & max
def vu_log(data,vu_max,max_t):
  # transform data to logarithmic scale
  vu = (math.log(float(max(audioop.max(data, 2),1)))-log_lo)/(log_hi-log_lo)
  # Calculate value
  vu = (min(max(int(vu*15),0),15))
  if vu >= vu_max:
    max_t = (3 * vu_fps) # keep max for 3 seconds
    vu_max = vu
  else:
    max_t = max(0, max_t-1) # Reduce max timer by 1 until 0
  return (vu,vu_max,max_t);

# Fetch Left input VU from ALSA
l, data = l_input.read()
if l > 0:
  # Transform data to logarithmic scale and calculate value
  lin = vu_log(data,lin_max,lin_t)
  lin_vu = lin[0]  # Desired value
  lin_max = lin[1] # Maximum value (last 3 sec)
  lin_t = lin[2]   # Used for tracking age of lin_max

建設的な提案はいつでも大歓迎です... :)

于 2013-10-21T13:17:50.630 に答える