| // Copyright 2023 The Fuchsia Authors. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia.audio.controller; |
| |
| using fuchsia.media; |
| using zx; |
| |
| /// Cancels a `Recorder.Record` request. |
| open protocol RecordCanceler { |
| /// Stop recording and writing data on the output socket. |
| strict Cancel() -> () error zx.Status; |
| }; |
| |
| @discoverable |
| open protocol Recorder { |
| /// Record audio data and write it to a socket in WAV format. |
| flexible Record(resource table { |
| /// The source from which to record the audio. |
| /// |
| /// Required. |
| 1: source @generated_name("RecordSource") flexible union { |
| /// An audio_core `AudioCapturer` protocol connection. |
| 1: capturer @generated_name("CapturerConfig") flexible union { |
| /// `AudioCapturer` for standard frequencies. |
| 1: standard_capturer @generated_name("StandardCapturerConfig") table { |
| /// The usage of the audio stream. |
| /// |
| /// Required. |
| 1: usage fuchsia.media.AudioCaptureUsage; |
| |
| /// The reference clock type used by the stream. |
| /// |
| /// Optional. If not specified, the default reference clock |
| /// provided by the capturer is used. |
| 2: clock ClockType; |
| }; |
| |
| /// `AudioCapturer` for ultrasonic frequencies. |
| 2: ultrasound_capturer struct {}; |
| }; |
| |
| /// An audio_core `AudioCapturer` protocol connection with loopback enabled. |
| 2: loopback struct {}; |
| |
| /// A device ring buffer. |
| 3: device_ring_buffer DeviceRingBuffer; |
| }; |
| |
| /// The stream format in which to record the audio. |
| /// |
| /// Required. |
| 2: stream_type fuchsia.media.AudioStreamType; |
| |
| /// Duration in nanoseconds to record audio data. |
| /// |
| /// If not specified, `Recorder` will record and write data to the |
| /// socket until it receives a stop signal on `canceler`. |
| /// |
| /// If present, the record request is still cancelable via `canceler`. |
| /// |
| /// Optional. |
| 3: duration zx.Duration; |
| |
| /// Handle to signal when to stop sending data back to the client. |
| /// |
| /// Required. |
| 4: canceler server_end:RecordCanceler; |
| |
| /// Record gain settings. |
| /// |
| /// Only used for the `capturer` and `loopback` sources. |
| /// |
| /// Optional. |
| 5: gain_settings GainSettings; |
| |
| /// Buffer size. |
| /// |
| /// Optional. If not specified, defaults to a size that is enough to |
| /// hold one second of audio data. |
| 6: buffer_size uint64; |
| |
| /// Sink for audio data. |
| /// |
| /// The captured data here will be written here as a complete WAV file. |
| /// |
| /// Required. |
| 7: wav_data zx.Handle:SOCKET; |
| }) -> (resource table { |
| /// Total number of bytes read from the source. |
| 1: bytes_processed uint64; |
| |
| /// If applicable, number of packets read from an `AudioCapturer`. |
| 2: packets_processed uint64; |
| |
| /// If applicable, number of times the capturer woke up too late to |
| /// read valid data from the device. |
| /// |
| /// If this is non-zero, some data was lost and replaced with silence. |
| 3: late_wakeups uint64; |
| }) error Error; |
| }; |