0

Windowsでpyaudioを使用して録音に取り組んでいます。matplotlib を使用して録音したサウンドをプロットしています。

録音時間は60秒。

バッファサイズは 1024

私が得ているのは、記録中に最初の数回の反復でジャンク値を取得していることです。その後、実際の音の録音を開始します。

また、MIC がミュートされていても、プロットするとジャンク値が返されることもわかりました。

これらのジャンク値は、私の計算結果に影響を与えています。

このジャンク値/サウンドが録音されるのはなぜですか?? 迅速な解決策はありますか??

コード:

class record(Thread):

def __init__(self):
    #Thread.__init__(self)
    super(record, self).__init__()
    self.lock=threading.Lock()

    self.project=projectutils.getActiveProject()
    self.outfile=self.project['name']+'.wav'
    self.tw=tool.getToolWindow()
    self.duration = 60 #record for 1 second. Pretty long duration don't you think

    self.buffer=1024
    self.pin = pyaudio.PyAudio()
    self.channels=2
    ccare.rate=self.rate=8820
    self.format=pyaudio.paInt16
    self.inStream = self.pin.open(format=self.format, channels=self.channels, rate=self.rate,input=True, frames_per_buffer=self.buffer)
    self.flag=1
    self.out = []
    self.upper_lim = self.rate / self.buffer * self.duration 

def run(self):      
    ccare.val=[]

    x=[]
    if not self.inStream:
       return
    self.lock.acquire()
    data = self.inStream.read(self.buffer)
    self.lock.release()

    x=list(struct.unpack("%dh"%(len(data)/2),data))

    self.lock.acquire()
    ccare.val=ccare.val+list(x)
    self.lock.release()
    self.out.append(data)
    for i in xrange(1, self.upper_lim):

        x=[]
        if not self.inStream:
           break
        data = self.inStream.read(self.buffer)
        x=list(struct.unpack("%dh"%(len(data)/2),data))
        self.lock.acquire()
        ccare.val=ccare.val+list(x)
        self.lock.release()
        self.out.append(data)

    if self.inStream:
       self.inStream.stop_stream()
       self.inStream.close()
       self.pin.terminate()
    self.save_file()

簡単なコード:

import pyaudio
import wave
import struct
val = []

def record(out_file):
    duration = 60 #record for 1 second. Pretty long duration don't you think
    buffer=1024

    pin = pyaudio.PyAudio()

    channels=2
    rate=8820
    format=pyaudio.paInt16
    inStream = pin.open(format=format, channels=channels, rate=rate,input=True, frames_per_buffer=buffer)

    out = []
    upper_lim = rate / buffer * duration 
    val=[]

    x=[]
    if not inStream:
       return
    data = inStream.read(buffer)

    x=list(struct.unpack("%dh"%(len(data)/2),data))

    val=val+list(x)
    out.append(data)

    for i in xrange(1, upper_lim):
        x=[]
        if not inStream:
           break
        data = inStream.read(buffer)
        x=list(struct.unpack("%dh"%(len(data)/2),data))

        val=val+list(x)
        out.append(data)

    if inStream:
       inStream.stop_stream()
       inStream.close()
       pin.terminate()

「val」変数に格納された値は、matplotlib を使用して別のスレッドでプロットされます。

4

0 に答える 0