Annotation of nono/host/hostsound.h, revision 1.1.1.1

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2025 nono project
                      4: // Licensed under nono-license.txt
                      5: //
                      6: 
                      7: //
                      8: // サウンドのホストデバイス
                      9: //
                     10: 
                     11: #pragma once
                     12: 
                     13: #include "hostdevice.h"
                     14: #include "spscqueue.h"
                     15: 
                     16: class SoundDriver;
                     17: 
                     18: class HostSoundDevice : public HostDevice
                     19: {
                     20:        using inherited = HostDevice;
                     21:        using PlayQueue = SPSCQueue<const int16 *, 4>;
                     22:        friend class SoundDriver;
                     23: 
                     24:        // 統計情報
                     25:        struct stat_t {
                     26:                uint64 write_blk;
                     27:        };
                     28: 
                     29:  public:
                     30:        HostSoundDevice(Device *parent_);
                     31:        ~HostSoundDevice() override;
                     32: 
                     33:        void SetLogLevel(int loglevel_) override;
                     34:        bool Create2() override;
                     35: 
                     36:        // ドライバ名を返す。
                     37:        const std::string& GetDriverName();
                     38: 
                     39:        // 再生(を指示)
                     40:        bool Play(const int16 *blk);
                     41: 
                     42:        // 出力キューが空なら true を返す。
                     43:        bool IsQEmpty() const   { return playq.Length() == 0; }
                     44: 
                     45:  private:
                     46:        bool SelectDriver(bool startup) override;
                     47:        void CreateNone();
                     48:        void CreateWav();
                     49:        void CreateNetBSD();
                     50:        void CreateSndIO();
                     51:        void CreateALSA();
                     52: 
                     53:        // 外部への書き出し(再生)
                     54:        void Write() override;
                     55: 
                     56:        // 外部からの読み込み (未対応)
                     57:        int Read() override;
                     58: 
                     59:        DECLARE_MONITOR_CALLBACK(MonitorUpdate);
                     60: 
                     61:        std::unique_ptr<SoundDriver> driver {};
                     62: 
                     63:        // ホストの(入)出力周波数 [Hz]
                     64:        uint32 freq {};
                     65: 
                     66:        // 1ブロックのバイト数
                     67:        size_t bytes_per_blk {};
                     68: 
                     69:        // キュー
                     70:        PlayQueue playq {};
                     71: 
                     72:        // 統計情報
                     73:        struct stat_t stat {};
                     74: 
                     75:        Monitor *monitor {};
                     76: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.