square_wave_source
今日はチュートリアルの書き直しとリファレンスの修正・加筆をしました。
今日の成果物
ドキュメントだけだとつまらないので、前から作ろうと思っていた「矩形波を生成するSource」も追加しました。
template<class CharT=float> class basic_square_wave_source { public: typedef CharT char_type; struct category : public boost::iostreams::input , public boost::iostreams::device_tag {}; basic_square_wave_source(long rate, CharT freq) : rate_(rate), freq_(freq), sum_() { } std::streamsize read(CharT* s, std::streamsize n) { if (n <= 0) return -1; const CharT v = freq_ / static_cast<CharT>(rate_); for (std::streamsize i = 0; i < n; ++i) { *(s++) = (sum_ < 0.5f) ? 1.0f : -1.0f; sum_ += v; if (sum_ >= 1.0f) sum_ -= 1.0f; } return n; } long rate() const { return rate_; } CharT frequency() const { return freq_; } private: long rate_; CharT freq_; CharT sum_; }; typedef basic_square_wave_source<> square_wave_source;
ドキュメントも含めてsine_wave_sourceのほぼコピペです。
サンプルの「かえるのうた」も矩形波の方が似合うので、こちらを使うように修正しています。