|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2025 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: //
8: // サウンドの OpenBSD sndio ドライバ
9: //
10:
11: #include "sounddriver_sndio.h"
12: #include "config.h"
13: #include "sound.h"
14:
15: // コンストラクタ
16: SoundDriverSndIO::SoundDriverSndIO(HostDevice *hostdev_)
17: : inherited(hostdev_, "sndio")
18: {
19: }
20:
21: // デストラクタ
22: SoundDriverSndIO::~SoundDriverSndIO()
23: {
24: Close();
25: }
26:
27: bool
28: SoundDriverSndIO::InitDriver(bool startup)
29: {
30: if (inherited::InitDriver(startup) == false) {
31: return false;
32: }
33:
34: sio = sio_open(SIO_DEVANY, SIO_PLAY, 0);
35: if (sio == NULL) {
36: warn("%s: sio_open() failed", __method__);
37: return false;
38: }
39:
40: struct sio_par param;
41: sio_initpar(¶m);
42: param.rate = freq;
43: param.bits = 16;
44: param.sig = 1;
45: param.le = SIO_LE_NATIVE;
46: param.pchan = Sound::NCHAN;
1.1.1.2 ! root 47: param.appbufsz = freq * Sound::BLK_TSEC / 1_sec;
1.1 root 48: if (sio_setpar(sio, ¶m) != 1) {
49: warn("%s: sio_set_par() failed", __method__);
50: sio_close(sio);
51: return false;
52: }
53:
54: if (sio_start(sio) != 1) {
55: warn("%s: sio_start() failed", __method__);
56: sio_close(sio);
57: return false;
58: }
59:
60: return true;
61: }
62:
63: // ブロック書き出し
64: void
65: SoundDriverSndIO::Write(const int16 *blk)
66: {
67: size_t written = 0;
68: for (; written < blkbytes;) {
69: const uint8 *buf = (const uint8 *)blk;
70: auto r = sio_write(sio, buf + written, blkbytes - written);
71: if (r == 0) {
72: // ?
73: break;
74: }
75: written += r;
76: }
77: }
78:
79: void
80: SoundDriverSndIO::Close()
81: {
82: sio_stop(sio);
83: sio_close(sio);
84: }
85:
86: void
1.1.1.2 ! root 87: SoundDriverSndIO::MonitorScreenMD(TextScreen& screen, int y)
1.1 root 88: {
89: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.