現在、python と numpy/scipy を使用してビート検出アルゴリズムを実装しています。基本的に、.wav ファイルを読み取って処理する必要があります。コードは次のとおりです。
sampling_rate, wave_data = scipy.io.wavfile.read(argv[1])
wave_data
は、約 441,000 要素 (44.1 kHz のサンプリング レートで 10 秒間のサウンド) を持つ 1 次元の numpy 配列です。ここで、この配列の 2 つの要素ごとに基本的な計算を行う必要があります。これは私が今それを行う方法です:
wave_data = [sampling_rate * (wave_data[i+1] - wave_data[i])
for i in xrange(len(wave_data)-1)]
この操作には時間がかかりすぎます (プロファイリングをしなくてもわかります)。新しいpythonリストを作成せずに、配列をペアごとに「インプレース」でマップする必要があります。があることは知ってnumpy.vectorize
いますが、ペアごとにマッピングを行う方法がわかりません(配列の2つの要素ごとにマッピングします)。