2016-12-09 3 views
0

再生された曲(サウンド出力)のオーディオレベルに基づいて、私のラズベリーのものを手に入れようとしています。この曲は必ずしもラズベリーのローカルMP3ファイルではありません。私はこのようにそれを説明してみましょう:Pythonを使用してリアルタイムでオーディオレベルを分析する

た場合(閾値以上のオーディオレベル): 何かを..

私はこのhttp://freshfoo.com/posts/pulseaudio_monitoring/が探して何イムはかなりある私は推測するが、私はする必要が見つけました単一のサンプルを読み取ってそれを使用する閾値と比較することができる。 Analyze audio using Fast Fourier Transformは、作成者がその番号をどのように取得したかについてのコード/説明があれば、助けになるトピックでもあります。 私はこれで私を助けてくれるでしょう。詳しい情報はちょっとお尋ねください。

答えて

0

raspberry-vu projectを見てください。それはRPi上でかなり重要なcpu集中部分と同様の機能です。

あなたもgslcblas(GSLのDEP)にリンクし、<gsl/gsl_statistics_double.h>が含まれている場合、あなたがやりたいsrc/impulse.csrc/test-impulse.cを変更することができます。 FFTの大きさを保持するim_getSnapshot()から配列[256]を取得していることに気付くでしょう。その配列を目的の関数に渡します。私にとってはsd = gsl_stats_sd(array, 1, 256)だから、標準偏差を単純な二重として返すでしょう。あなたのために、すべてのスペクトル分布の平均値を与えるmean = gsl_stats_mean(array, 1, 256)を使用したいと思うでしょう。 meanの値に基づいて何かを行うことができます。

ホワイトノイズ検出に基づいてRTPソースをサスペンド/サスペンド解除する同様のプロジェクトを行っています(SDはホワイトノイズに対して非常に低い)。 SDが非常に低い場合、RTPシンクは中断されます。それ以外の場合は有効になります。これは、RTPパケットの洪水は、ホワイトニングなしが見つかった場合にのみ発生することを意味します。

これは、オーディオレベルの信号に反応する最も簡単な方法です。私はここでスニペットを作成しました。これは、監視しているオーディオの標準と平均の両方を表しています。

#include <unistd.h> 
#include "impulse.h" 
#include <stdio.h> 
#include <gsl/gsl_statistics_double.h> 

int main() { 
     int i; 
     double stddev, stddev_max=0, mean; 

     im_start(); 

     while (1) { 
       usleep(1000000/10); 
       double *array = im_getSnapshot(IM_FFT); 
       for (i = 0; i < 256; i+=16) 
       { 
         printf(" %.3f,", array[ i ]); 
       } 

       stddev = gsl_stats_sd(array, 1, 256); 
       mean = gsl_stats_mean(array, 1, 256); 
       if (stddev > stddev_max) 
        stddev_max = stddev; 

       printf(" = [%.05f, %.05f] %.05f\n", stddev, stddev_max, mean); 
       fflush(stdout); 

       // if (mean > some_value) { do_something(); } 
       // else { do_something_else(); } 
     } 

     im_stop(); 

     return 0; 
} 
+0

あなたに大きなおかげで、私は何かのように見えますが、病気は2,3日後にこれを試してみてください。私の後半の反応には申し訳ありません – Slowmo

関連する問題