はじめに
PulseAudioを使って録音しながらリアルタイムで音量を表示します。
方法とコード
PulseAudioのSimple API [1] を使って録音し、音量を表示します。音量の計算はざっくりです。20秒間録音して終了します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include <iostream>
#include <vector>
#include <cmath>
#include <string>
#include <pulse/simple.h>
std::string getbar(double v)
{
v = 10*(v-4); // 10 and -4 are determined by heuristic
if(v < 0){v = 0;}
return std::string(v, '*');
}
int main(void)
{
pa_sample_spec ss;
ss.format = PA_SAMPLE_S16LE; // Signed, 16bits, Little endian
ss.channels = 1;
ss.rate = 8000; // Sampling frequency is 8kHz
pa_simple *s = pa_simple_new(NULL, "Volume meter", PA_STREAM_RECORD, NULL, "Microphone vm",
&ss, NULL, NULL, NULL);
std::vector<short> buffer(800); // For 100ms
for(int i=0; i<200; ++i) // Record for 20s
{
// Read audio for 100ms
pa_simple_read(s, &buffer[0], buffer.size()*sizeof(short), nullptr);
// Calculate power for the range of 100ms
double power = 0;
for(auto &v : buffer)
{
power += v*v;
}
// Output a result with a bar
double logp = log10(power/buffer.size());
std::cout << logp << "\t" << getbar(logp) << std::endl;
}
pa_simple_free(s);
return 0;
}
|
g++ --std=c++14 -lpulse-simple rec.cppで行えます。g++はバージョン4.9.2を利用しています。libpulse-dev が必要ですので、コンパイルする前にapt-getやaptitudeを使ってインストールしておきましょう。 マイクがリモートにある場合は、リモート側でPulseAudioのサーバの設定を行い、
PULSE_SERVER=192.168.1.2 ./a.outのようにして実行します。ここでは、リモートマシンのIPアドレスが192.168.1.2であるとしています。 リモートマシンの設定は前の記事を参照ください。
結果
実行すると録音が始まり、コンソールに音量がバーで表示されます。
5.09851 ********** 4.93314 ********* 4.76426 ******* 4.96767 ********* 6.26456 ********************** 6.17523 ********************* 5.34311 ************* 6.9875 ***************************** 4.98664 ********* 7.23169 ******************************** 5.60815 **************** 6.16099 ********************* 5.55161 *************** 5.16174 *********** 5.62978 **************** 5.19768 *********** 5.73633 ***************** 5.85854 ****************** 6.54446 ************************* 5.53201 *************** 5.42636 ************** 5.40482 ************** 5.77586 ***************** 4.9568 ********* 4.82601 ******** 7.56319 *********************************** 8.19005 *****************************************
参考
[1] https://freedesktop.org/software/pulseaudio/doxygen/simple.html
0 件のコメント :
コメントを投稿