2

こんにちは、後で分析するために、マイク経由で録音されたオーディオ ストリームを int (または float など) の配列に変換したいと考えています (fft など)。しかし、私の現在の方法は少し非効率的で、メモリ割り当ての遅延が散発的に発生していると思います。

ossaudiodev はほとんどの Linux ディストリビューションで動作しなくなったため、alsaaudio を使用していますが、それほど重要ではありません。デバイスから出力されるオーディオ ストリームは、1024 個の 16 ビット オーディオ フレームに対応する 2048 文字の文字列です。「配列」が文字列をintの配列に変換する最良の方法であると考えましたが、各ループの最後に、次のラウンドのデータのために配列をクリアする必要がdelあり、時間を見るとループ内部が実行されるのに時間がかかります(読み取りは含まれません)4番目または5番目(散発的)のループごとにはるかに時間がかかることがわかります。私の質問は、メモリ割り当てに関して私の現在の戦略は効率的ですか?

オーディオ デバイスは次のように設定されています。

import array
import alsaaudio as alsa
audio_data = array.array("h")
ain = alsa.PCM(alsa.PCM_CAPTURE,alsa.PCM_NORMAL,card='default')
ain.setchannels(1)
ain.setrate(rate)
ain.setformat(alsa.PCM_FORMAT_S16_LE)
ain.setperiodsize(1024)

次に、ループ内でこれを行います

Nsamples,astream = ain.read()
audio_data.fromstring(astream)
## some analysis is done (FFT, plot whatever)
# i.e. 
Freq = np.abs(sy.fft(audio_data))
# clear the audio data array for next segment
del audio_data[:]
4

1 に答える 1

1

numpy.fromstring を試しましたか?

于 2012-06-14T05:55:25.810 に答える