1 # -*- mode: python -*- 2 # vim: filetype=python 3 # 4 # Copyright (C) 2015-2019 Zoltán Kővágó <DirtY.iCE.hu@gmail.com> 5 # 6 # This work is licensed under the terms of the GNU GPL, version 2 or later. 7 # See the COPYING file in the top-level directory. 8 9 ## 10 # = Audio 11 ## 12 13 ## 14 # @AudiodevPerDirectionOptions: 15 # 16 # General audio backend options that are used for both playback and 17 # recording. 18 # 19 # @mixing-engine: use QEMU's mixing engine to mix all streams inside 20 # QEMU and convert audio formats when not supported by the 21 # backend. When set to off, fixed-settings must be also off 22 # (default on, since 4.2) 23 # 24 # @fixed-settings: use fixed settings for host input/output. When 25 # off, frequency, channels and format must not be specified 26 # (default true) 27 # 28 # @frequency: frequency to use when using fixed settings (default 29 # 44100) 30 # 31 # @channels: number of channels when using fixed settings (default 2) 32 # 33 # @voices: number of voices to use (default 1) 34 # 35 # @format: sample format to use when using fixed settings (default 36 # s16) 37 # 38 # @buffer-length: the buffer length in microseconds 39 # 40 # Since: 4.0 41 ## 42 { 'struct': 'AudiodevPerDirectionOptions', 43 'data': { 44 '*mixing-engine': 'bool', 45 '*fixed-settings': 'bool', 46 '*frequency': 'uint32', 47 '*channels': 'uint32', 48 '*voices': 'uint32', 49 '*format': 'AudioFormat', 50 '*buffer-length': 'uint32' } } 51 52 ## 53 # @AudiodevGenericOptions: 54 # 55 # Generic driver-specific options. 56 # 57 # @in: options of the capture stream 58 # 59 # @out: options of the playback stream 60 # 61 # Since: 4.0 62 ## 63 { 'struct': 'AudiodevGenericOptions', 64 'data': { 65 '*in': 'AudiodevPerDirectionOptions', 66 '*out': 'AudiodevPerDirectionOptions' } } 67 68 ## 69 # @AudiodevAlsaPerDirectionOptions: 70 # 71 # Options of the ALSA backend that are used for both playback and 72 # recording. 73 # 74 # @dev: the name of the ALSA device to use (default 'default') 75 # 76 # @period-length: the period length in microseconds 77 # 78 # @try-poll: attempt to use poll mode, falling back to non-polling 79 # access on failure (default true) 80 # 81 # Since: 4.0 82 ## 83 { 'struct': 'AudiodevAlsaPerDirectionOptions', 84 'base': 'AudiodevPerDirectionOptions', 85 'data': { 86 '*dev': 'str', 87 '*period-length': 'uint32', 88 '*try-poll': 'bool' } } 89 90 ## 91 # @AudiodevAlsaOptions: 92 # 93 # Options of the ALSA audio backend. 94 # 95 # @in: options of the capture stream 96 # 97 # @out: options of the playback stream 98 # 99 # @threshold: set the threshold (in microseconds) when playback starts 100 # 101 # Since: 4.0 102 ## 103 { 'struct': 'AudiodevAlsaOptions', 104 'data': { 105 '*in': 'AudiodevAlsaPerDirectionOptions', 106 '*out': 'AudiodevAlsaPerDirectionOptions', 107 '*threshold': 'uint32' } } 108 109 ## 110 # @AudiodevSndioOptions: 111 # 112 # Options of the sndio audio backend. 113 # 114 # @in: options of the capture stream 115 # 116 # @out: options of the playback stream 117 # 118 # @dev: the name of the sndio device to use (default 'default') 119 # 120 # @latency: play buffer size (in microseconds) 121 # 122 # Since: 7.2 123 ## 124 { 'struct': 'AudiodevSndioOptions', 125 'data': { 126 '*in': 'AudiodevPerDirectionOptions', 127 '*out': 'AudiodevPerDirectionOptions', 128 '*dev': 'str', 129 '*latency': 'uint32'} } 130 131 ## 132 # @AudiodevCoreaudioPerDirectionOptions: 133 # 134 # Options of the Core Audio backend that are used for both playback 135 # and recording. 136 # 137 # @buffer-count: number of buffers 138 # 139 # Since: 4.0 140 ## 141 { 'struct': 'AudiodevCoreaudioPerDirectionOptions', 142 'base': 'AudiodevPerDirectionOptions', 143 'data': { 144 '*buffer-count': 'uint32' } } 145 146 ## 147 # @AudiodevCoreaudioOptions: 148 # 149 # Options of the coreaudio audio backend. 150 # 151 # @in: options of the capture stream 152 # 153 # @out: options of the playback stream 154 # 155 # Since: 4.0 156 ## 157 { 'struct': 'AudiodevCoreaudioOptions', 158 'data': { 159 '*in': 'AudiodevCoreaudioPerDirectionOptions', 160 '*out': 'AudiodevCoreaudioPerDirectionOptions' } } 161 162 ## 163 # @AudiodevDsoundOptions: 164 # 165 # Options of the DirectSound audio backend. 166 # 167 # @in: options of the capture stream 168 # 169 # @out: options of the playback stream 170 # 171 # @latency: add extra latency to playback in microseconds (default 172 # 10000) 173 # 174 # Since: 4.0 175 ## 176 { 'struct': 'AudiodevDsoundOptions', 177 'data': { 178 '*in': 'AudiodevPerDirectionOptions', 179 '*out': 'AudiodevPerDirectionOptions', 180 '*latency': 'uint32' } } 181 182 ## 183 # @AudiodevJackPerDirectionOptions: 184 # 185 # Options of the JACK backend that are used for both playback and 186 # recording. 187 # 188 # @server-name: select from among several possible concurrent server 189 # instances (default: environment variable $JACK_DEFAULT_SERVER if 190 # set, else "default") 191 # 192 # @client-name: the client name to use. The server will modify this 193 # name to create a unique variant, if needed unless @exact-name is 194 # true (default: the guest's name) 195 # 196 # @connect-ports: if set, a regular expression of JACK client port 197 # name(s) to monitor for and automatically connect to 198 # 199 # @start-server: start a jack server process if one is not already 200 # present (default: false) 201 # 202 # @exact-name: use the exact name requested otherwise JACK 203 # automatically generates a unique one, if needed (default: false) 204 # 205 # Since: 5.1 206 ## 207 { 'struct': 'AudiodevJackPerDirectionOptions', 208 'base': 'AudiodevPerDirectionOptions', 209 'data': { 210 '*server-name': 'str', 211 '*client-name': 'str', 212 '*connect-ports': 'str', 213 '*start-server': 'bool', 214 '*exact-name': 'bool' } } 215 216 ## 217 # @AudiodevJackOptions: 218 # 219 # Options of the JACK audio backend. 220 # 221 # @in: options of the capture stream 222 # 223 # @out: options of the playback stream 224 # 225 # Since: 5.1 226 ## 227 { 'struct': 'AudiodevJackOptions', 228 'data': { 229 '*in': 'AudiodevJackPerDirectionOptions', 230 '*out': 'AudiodevJackPerDirectionOptions' } } 231 232 ## 233 # @AudiodevOssPerDirectionOptions: 234 # 235 # Options of the OSS backend that are used for both playback and 236 # recording. 237 # 238 # @dev: file name of the OSS device (default '/dev/dsp') 239 # 240 # @buffer-count: number of buffers 241 # 242 # @try-poll: attempt to use poll mode, falling back to non-polling 243 # access on failure (default true) 244 # 245 # Since: 4.0 246 ## 247 { 'struct': 'AudiodevOssPerDirectionOptions', 248 'base': 'AudiodevPerDirectionOptions', 249 'data': { 250 '*dev': 'str', 251 '*buffer-count': 'uint32', 252 '*try-poll': 'bool' } } 253 254 ## 255 # @AudiodevOssOptions: 256 # 257 # Options of the OSS audio backend. 258 # 259 # @in: options of the capture stream 260 # 261 # @out: options of the playback stream 262 # 263 # @try-mmap: try using memory-mapped access, falling back to 264 # non-memory-mapped access on failure (default true) 265 # 266 # @exclusive: open device in exclusive mode (vmix won't work) (default 267 # false) 268 # 269 # @dsp-policy: set the timing policy of the device (between 0 and 10, 270 # where smaller number means smaller latency but higher CPU usage) 271 # or -1 to use fragment mode (option ignored on some platforms) 272 # (default 5) 273 # 274 # Since: 4.0 275 ## 276 { 'struct': 'AudiodevOssOptions', 277 'data': { 278 '*in': 'AudiodevOssPerDirectionOptions', 279 '*out': 'AudiodevOssPerDirectionOptions', 280 '*try-mmap': 'bool', 281 '*exclusive': 'bool', 282 '*dsp-policy': 'uint32' } } 283 284 ## 285 # @AudiodevPaPerDirectionOptions: 286 # 287 # Options of the Pulseaudio backend that are used for both playback 288 # and recording. 289 # 290 # @name: name of the sink/source to use 291 # 292 # @stream-name: name of the PulseAudio stream created by qemu. Can be 293 # used to identify the stream in PulseAudio when you create 294 # multiple PulseAudio devices or run multiple qemu instances 295 # (default: audiodev's id, since 4.2) 296 # 297 # @latency: latency you want PulseAudio to achieve in microseconds 298 # (default 15000) 299 # 300 # Since: 4.0 301 ## 302 { 'struct': 'AudiodevPaPerDirectionOptions', 303 'base': 'AudiodevPerDirectionOptions', 304 'data': { 305 '*name': 'str', 306 '*stream-name': 'str', 307 '*latency': 'uint32' } } 308 309 ## 310 # @AudiodevPaOptions: 311 # 312 # Options of the PulseAudio audio backend. 313 # 314 # @in: options of the capture stream 315 # 316 # @out: options of the playback stream 317 # 318 # @server: PulseAudio server address (default: let PulseAudio choose) 319 # 320 # Since: 4.0 321 ## 322 { 'struct': 'AudiodevPaOptions', 323 'data': { 324 '*in': 'AudiodevPaPerDirectionOptions', 325 '*out': 'AudiodevPaPerDirectionOptions', 326 '*server': 'str' } } 327 328 ## 329 # @AudiodevPipewirePerDirectionOptions: 330 # 331 # Options of the Pipewire backend that are used for both playback and 332 # recording. 333 # 334 # @name: name of the sink/source to use 335 # 336 # @stream-name: name of the Pipewire stream created by qemu. Can be 337 # used to identify the stream in Pipewire when you create multiple 338 # Pipewire devices or run multiple qemu instances (default: 339 # audiodev's id) 340 # 341 # @latency: latency you want Pipewire to achieve in microseconds 342 # (default 46000) 343 # 344 # Since: 8.1 345 ## 346 { 'struct': 'AudiodevPipewirePerDirectionOptions', 347 'base': 'AudiodevPerDirectionOptions', 348 'data': { 349 '*name': 'str', 350 '*stream-name': 'str', 351 '*latency': 'uint32' } } 352 353 ## 354 # @AudiodevPipewireOptions: 355 # 356 # Options of the Pipewire audio backend. 357 # 358 # @in: options of the capture stream 359 # 360 # @out: options of the playback stream 361 # 362 # Since: 8.1 363 ## 364 { 'struct': 'AudiodevPipewireOptions', 365 'data': { 366 '*in': 'AudiodevPipewirePerDirectionOptions', 367 '*out': 'AudiodevPipewirePerDirectionOptions' } } 368 369 ## 370 # @AudiodevSdlPerDirectionOptions: 371 # 372 # Options of the SDL audio backend that are used for both playback and 373 # recording. 374 # 375 # @buffer-count: number of buffers (default 4) 376 # 377 # Since: 6.0 378 ## 379 { 'struct': 'AudiodevSdlPerDirectionOptions', 380 'base': 'AudiodevPerDirectionOptions', 381 'data': { 382 '*buffer-count': 'uint32' } } 383 384 ## 385 # @AudiodevSdlOptions: 386 # 387 # Options of the SDL audio backend. 388 # 389 # @in: options of the recording stream 390 # 391 # @out: options of the playback stream 392 # 393 # Since: 6.0 394 ## 395 { 'struct': 'AudiodevSdlOptions', 396 'data': { 397 '*in': 'AudiodevSdlPerDirectionOptions', 398 '*out': 'AudiodevSdlPerDirectionOptions' } } 399 400 ## 401 # @AudiodevWavOptions: 402 # 403 # Options of the wav audio backend. 404 # 405 # @in: options of the capture stream 406 # 407 # @out: options of the playback stream 408 # 409 # @path: name of the wav file to record (default 'qemu.wav') 410 # 411 # Since: 4.0 412 ## 413 { 'struct': 'AudiodevWavOptions', 414 'data': { 415 '*in': 'AudiodevPerDirectionOptions', 416 '*out': 'AudiodevPerDirectionOptions', 417 '*path': 'str' } } 418 419 ## 420 # @AudioFormat: 421 # 422 # An enumeration of possible audio formats. 423 # 424 # @u8: unsigned 8 bit integer 425 # 426 # @s8: signed 8 bit integer 427 # 428 # @u16: unsigned 16 bit integer 429 # 430 # @s16: signed 16 bit integer 431 # 432 # @u32: unsigned 32 bit integer 433 # 434 # @s32: signed 32 bit integer 435 # 436 # @f32: single precision floating-point (since 5.0) 437 # 438 # Since: 4.0 439 ## 440 { 'enum': 'AudioFormat', 441 'data': [ 'u8', 's8', 'u16', 's16', 'u32', 's32', 'f32' ] } 442 443 ## 444 # @AudiodevDriver: 445 # 446 # An enumeration of possible audio backend drivers. 447 # 448 # @jack: JACK audio backend (since 5.1) 449 # 450 # Since: 4.0 451 ## 452 { 'enum': 'AudiodevDriver', 453 'data': [ 'none', 454 { 'name': 'alsa', 'if': 'CONFIG_AUDIO_ALSA' }, 455 { 'name': 'coreaudio', 'if': 'CONFIG_AUDIO_COREAUDIO' }, 456 { 'name': 'dbus', 'if': 'CONFIG_DBUS_DISPLAY' }, 457 { 'name': 'dsound', 'if': 'CONFIG_AUDIO_DSOUND' }, 458 { 'name': 'jack', 'if': 'CONFIG_AUDIO_JACK' }, 459 { 'name': 'oss', 'if': 'CONFIG_AUDIO_OSS' }, 460 { 'name': 'pa', 'if': 'CONFIG_AUDIO_PA' }, 461 { 'name': 'pipewire', 'if': 'CONFIG_AUDIO_PIPEWIRE' }, 462 { 'name': 'sdl', 'if': 'CONFIG_AUDIO_SDL' }, 463 { 'name': 'sndio', 'if': 'CONFIG_AUDIO_SNDIO' }, 464 { 'name': 'spice', 'if': 'CONFIG_SPICE' }, 465 'wav' ] } 466 467 ## 468 # @Audiodev: 469 # 470 # Options of an audio backend. 471 # 472 # @id: identifier of the backend 473 # 474 # @driver: the backend driver to use 475 # 476 # @timer-period: timer period (in microseconds, 0: use lowest 477 # possible) 478 # 479 # Since: 4.0 480 ## 481 { 'union': 'Audiodev', 482 'base': { 483 'id': 'str', 484 'driver': 'AudiodevDriver', 485 '*timer-period': 'uint32' }, 486 'discriminator': 'driver', 487 'data': { 488 'none': 'AudiodevGenericOptions', 489 'alsa': { 'type': 'AudiodevAlsaOptions', 490 'if': 'CONFIG_AUDIO_ALSA' }, 491 'coreaudio': { 'type': 'AudiodevCoreaudioOptions', 492 'if': 'CONFIG_AUDIO_COREAUDIO' }, 493 'dbus': { 'type': 'AudiodevGenericOptions', 494 'if': 'CONFIG_DBUS_DISPLAY' }, 495 'dsound': { 'type': 'AudiodevDsoundOptions', 496 'if': 'CONFIG_AUDIO_DSOUND' }, 497 'jack': { 'type': 'AudiodevJackOptions', 498 'if': 'CONFIG_AUDIO_JACK' }, 499 'oss': { 'type': 'AudiodevOssOptions', 500 'if': 'CONFIG_AUDIO_OSS' }, 501 'pa': { 'type': 'AudiodevPaOptions', 502 'if': 'CONFIG_AUDIO_PA' }, 503 'pipewire': { 'type': 'AudiodevPipewireOptions', 504 'if': 'CONFIG_AUDIO_PIPEWIRE' }, 505 'sdl': { 'type': 'AudiodevSdlOptions', 506 'if': 'CONFIG_AUDIO_SDL' }, 507 'sndio': { 'type': 'AudiodevSndioOptions', 508 'if': 'CONFIG_AUDIO_SNDIO' }, 509 'spice': { 'type': 'AudiodevGenericOptions', 510 'if': 'CONFIG_SPICE' }, 511 'wav': 'AudiodevWavOptions' } } 512 513 ## 514 # @query-audiodevs: 515 # 516 # Returns information about audiodev configuration 517 # 518 # Returns: array of @Audiodev 519 # 520 # Since: 8.0 521 ## 522 { 'command': 'query-audiodevs', 523 'returns': ['Audiodev'] } 524