2016-09-26 11 views
1

マイクからカウントノイズを生成するために、ALSAバッファからデータを取得しようとしています。しかし、私は配列にデータを変換しようとすると、私は間違った結果を取得します。 符号なし 16ビット整数としてALSAバッファからnumpy配列へのオーディオデータの読み込み

#!/usr/bin/env python 

from __future__ import print_function 

import alsaaudio 
import numpy 

card = 'default' 
buf = [64] 
numpy.set_printoptions(threshold=numpy.inf) 

stream = alsaaudio.PCM(alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NORMAL, card) 
stream.setchannels(1) 
stream.setrate(44100) 
stream.setformat(alsaaudio.PCM_FORMAT_S16_LE) 
stream.setperiodsize(64) 
def listen(): 
    print("Listening") 
    while True: 
     try: 
      l, data = stream.read() 

      f = open('test.raw', 'wb') 
      if l: 
       f.write(data) 
       f.close() 
     except IOError, e: 
      error_count += 1 
      print(" (%d) Error recording: %s" % (error_count, e)) 
     else: 
      decoded_block = numpy.frombuffer(data, dtype='i2') 
      print('Array PCM: \n',decoded_block) 

      return 0 

listen() 

Image with result

答えて

0

hexdump -dディスプレイ内容は、あなたがに変換しているのに対し、 INT16 numpyの配列を締結:以下

は、私のコードの一部です。 'u2'のDTYPEに変換

てみてください(または同等に、np.uint16)、あなたは出力がhexdumpのそれと一致していることがわかります:あなたは右の持っているが、

print(np.array([-7, -9, -10, -6, -2], dtype=np.uint16)) 
# [65529 65527 65526 65530 65534] 
+0

ali_mこれが問題になることはありません。私は問題を見つけようとするが、なぜalsaから間違ったデータを取得する。 – Bednar

+0

「間違ったデータ」を取得していることをどのように知っていますか?あなたはどんな価値を期待していますか? –

+0

範囲int16からのデータは-32,768から32,767になると予想しています。私は何が悪いのか分からない。マイクが正しく動作しない可能性があります。 – Bednar

関連する問題