マイク入力について
こうじろう 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