マイク入力について
こうじろう  2014/05/30(Fri) 18:26
マイクからの入力をもっと活用したいと考えています。

Recorderで取得した信号を波形データとして配列に格納することは現在可能でしょうか?
現在可能な方法などご教示いただければと思っております。
宜しくお願いします。
Reputeless  2014/05/30(Fri) 20:51
Recorder::GetWave()  で、録音した波形を保存している Wave 型のバッファへの const 参照を取得できます。
デフォルトではこの Wave はサンプリングレート 44100Hz, 長さは 44100*10 サンプル(10秒)です。
バッファの終端まで録音されると Recorder::IsEnd() が true を返し、
Recorder::Restart() でまたバッファの先頭から録音結果が上書きされます。

Wave 型は音のサンプル WaveSample 型の集合です。
WaveSample::left, WaveSample::right がそれぞれのチャンネルの標本化された波形データを表します。
left, right は 16bit 符号付整数で、-32768〜32767 の範囲で波の振幅を表します。

録音した波形を可視化するサンプルプログラムです。

# include <Siv3D.hpp>

void Main()
{
Window::Resize(800, 640);

const Font font(30);

// サンプリングレートやバッファの長さを変更
//Recorder::SetBufferLengthBySample(RecorerSamplingRate::S11025, 11025 * 20);

// デフォルト設定(サンプリングレート 44100Hz、バッファの長さ 44100 * 10 サンプル) で録音を開始する
if (!Recorder::Start())
{
return;
}

vector<Vec2> points(800);

while (System::Update())
{
const int pos = Recorder::GetPos();
const int beg = Max(pos - 800, 0);
const int end = pos;
const int count = end - beg;

const Wave& wave = Recorder::GetWave();

for (int i = 0; i < count; ++i)
{
points[i].x = i;
points[i].y = (wave[beg + i].left / 32768.0) * Window::Center().y + Window::Center().y;
}

LineString(points).draw(2.0);

font(L"録音サンプル位置: ", pos).draw();

if (Recorder::IsEnd())
{
Recorder::Restart();
}
}
}
こうじろう  2014/05/30(Fri) 21:15
ありがとうございます。

勉強させていただきます。
スーパーコピーブランド専門店  2020/07/15(Wed) 19:39
人気スーパーコピーブランド時計激安通販専門店 

ロレック時針各種海外有名ブランド品を豊富に取り揃え、しかもお客様を第一と考えて、驚きの低価格で提供しております。税関の没収する商品は再度無料にして発送します。広大な客を歓迎して買います!3-6日にきっと引き渡す.スーパーコピーブランド時計 }}}}}}
人気の売れ筋商品を多数取り揃えております。
全て激安特価でご提供.お願いします.
★100%品質保証!満足保障!リピーター率100%!
★商品数も大幅に増え、品質も大自信です。
★スタイルが多い、品質がよい、価格が低い!
★顧客は至上 誠実 信用。
★歓迎光臨
★送料無料(日本全国)
https://www.88kopi.com/product/product-2847.html

- WEB PATIO -