| // Copyright 2022 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| library fuchsia.test.audio.recording; |
| |
| using zx; |
| |
| /// Maximum number of bytes in a audio input payload |
| const AUDIO_INPUT_BYTES_MAX uint32 = 8192; |
| |
| /// Status code for Audio Recording FIDL |
| type AudioRecordingError = strict enum { |
| FAIL = 1; |
| }; |
| |
| /// A protocol that supports audio input injection and audio capture. |
| @discoverable |
| protocol AudioRecordingControl { |
| |
| /// Writes and appends `audio_data` at `index`. |
| /// |
| /// The first time this is called, an empty vector will be created, subsequent calls will |
| /// append to `audio_data` to the same vector. |
| /// |
| /// Use `ClearInputAudio` to clear audio input data stored at `index`. |
| /// |
| /// + request `index` refers a specific `audio_data` input record. We can have multiple records. |
| /// + request `audio_data` vector containing audio_data bytes. |
| /// - response `byte_count` the total number of bytes stored. |
| PutInputAudio(resource struct { |
| index int32; |
| audio_data vector<uint8>:AUDIO_INPUT_BYTES_MAX; |
| }) -> (struct { |
| byte_count int32; |
| }); |
| |
| /// Clears audio data stored at `index`. |
| /// |
| /// If no data exists at `index` nothing will get cleaned. |
| /// |
| /// + request `index` refers a specific `audio_data` input record to clear. |
| /// - response `error` a AudioRecordingError value indicating success or failure. |
| ClearInputAudio(resource struct { |
| index int32; |
| }) -> (struct {}) error AudioRecordingError; |
| |
| /// Returns the captured audio data in `zx.handle.VMO`. |
| /// |
| /// User should have first called `StartOutputSave` and `StopOutputSave`. |
| /// |
| /// + request `audio_data` vmo containing the full captured audio data. |
| GetOutputAudio() -> (resource struct { |
| audio_data zx.handle:VMO; |
| }); |
| |
| /// Starts inject audio data stored at `index`. |
| /// Use `PutInputAudio` to store audio data. |
| /// |
| /// + request `index` refers a specific `audio_data` input record to clear. |
| /// - response `error` a AudioRecordingError value indicating success or failure. |
| StartInputInjection(resource struct { |
| index int32; |
| }) -> (struct {}) error AudioRecordingError; |
| |
| /// Stops inject audio data. |
| /// |
| /// - response `error` a AudioRecordingError value indicating success or failure. |
| StopInputInjection() -> (struct {}) error AudioRecordingError; |
| |
| /// Start capturing audio output |
| /// |
| /// - response `error` a AudioRecordingError value indicating success or failure. |
| StartOutputSave() -> (struct {}) error AudioRecordingError; |
| |
| /// Stops capturing the audio output. |
| /// |
| /// Use `GetOutputAudio` to get the latest audio capture. |
| /// |
| /// - response `error` a AudioRecordingError value indicating success or failure. |
| StopOutputSave() -> (struct {}) error AudioRecordingError; |
| }; |