asio_sink

まだ作りかけですが、何とかモノラル再生ができたのでアップしました。

今日の成果物

ステレオだとうまく鳴らないので、どこかバグっています。

#include <hamigaki/detail/windows/com_library.hpp>
#include <hamigaki/audio/asio.hpp>
#include <hamigaki/audio/sine_wave.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/restrict.hpp>

namespace audio = hamigaki::audio;
namespace io = boost::iostreams;
using namespace hamigaki::detail::windows;

int main(int argc, char* argv[])
{
    com_library using_com;

    // CLSID直指定
    audio::asio_device asio(L"{232685C6-6548-49D8-846D-4141A3EF7560}");
    asio.rate(44100.0);

    // 入力チャンネル数, 出力チャンネル数
    asio.create_buffers(0, 1);

    // 5秒間、ドを再生
    io::copy(
        io::restrict(
            audio::sine_wave_source(44100, 32, 261.6),
            0,
            4*44100 * 5
        ),
        asio.get_sink(0)
    );
}

TODO:

  • ステレオ再生の修正
  • 再生の開始と停止が適当なのを直す
  • バイスの列挙
  • 初期化の改善
  • asio_sourceを作る