Objetos de audio

ArcGIS AppStudio ofrece un componente de grabación de alta calidad para administrar audio, con funciones para controlar y monitorizar la grabación. Se puede utilizar para crear potentes herramientas para recopilar datos en calidades y tamaños configurables para las necesidades de su aplicación.

Controles de la grabadora

El componente AudioRecorder ofrece funciones para controlar el proceso de grabación de audio. Los métodos de grabación, pausa y parada proporcionan herramientas básicas que se pueden complementar con otros métodos.

Esta muestra de código ofrece un panel de control general para administrar el proceso de grabación de audio:

//Creates both audio recorder and audio playback objects
AudioRecorder {
    id: audioRecorder
    onStatusChanged: {
        console.log("audioRecorder status:", status);
    }
    onErrorChanged: {
        console.log("audioRecorder error:", error, "errorString:", errorString);
    }
}
Audio {
    id: audio
    onStatusChanged: {
        console.log("audio status:", status);
    }
    onError: {
        console.log("audio error:", error, "errorString:", errorString);
    }
}
Flow {
    //Button to start recording, disabled if recording is unavailable or already underway
    Button {
        text: "Record"
        enabled: audioRecorder.available
        onClicked: audioRecorder.record();
    }
   
    //Stops recording currently underway or paused, disabled if neither is true
    Button {
        text: "Stop"
        enabled: audioRecorder.state == AudioRecorder.RecordingState || audioRecorder.state == AudioRecorder.PausedState
        onClicked: audioRecorder.stop();
    }
    //Opens file dialog to select where to create the audio file
    Button {
        text: "Location"
        enabled: audioRecorder.state == AudioRecorder.StoppedState
        onClicked: outputDialog.open();
    }
    FileDialog {
        id: outputDialog
        title: "Output Location"
        selectExisting: false
        selectMultiple: false
        nameFilters: [ "All files (*)" ]
        folder: AppFramework.standardPaths.standardLocations(StandardPaths.MusicLocation)[0]
        onAccepted: {
            audioRecorder.outputLocation = fileUrl;
        }
    }
    //Plays back recorded audio file
    Button {
        text: "Play"
        enabled: audioRecorder.state == AudioRecorder.StoppedState && audioRecorder.actualLocation > "" && audioRecorder.duration > 0
        onClicked: {
            audio.source = audioRecorder.actualLocation;
            audio.play();
        }
    }
}

Propiedades de grabación

Mientras los métodos de AudioRecorder proporcionan las herramientas para grabar audio, el componente proporciona diversas propiedades que informan sobre el proceso, lo que permite una experiencia más informada que puede configurar según sus necesidades. Las siguientes muestras de código proporcionan algunos medios para controlar propiedades potencialmente útiles.

La propiedad input describe el dispositivo que capturará el audio. Se iniciará como valor predeterminado del sistema, pero se puede cambiar a cualquier dispositivo de entrada disponible.

        RowLayout {
            Layout.fillWidth: true
            Text {
                text: "Default input"
                color: "black"
            }
            Text {
                text: audioRecorder.defaultInput
                color: "blue"
                font.bold: true
                wrapMode: Text.WrapAtWordBoundaryOrAnywhere
            }
        }
        RowLayout {
            Layout.fillWidth: true
            Text {
                text: "Input device"
                color: "black"
            }
            Text {
                text: audioRecorder.input
                color: "blue"
                font.bold: true
                wrapMode: Text.WrapAtWordBoundaryOrAnywhere
            }
            ComboBox {
                model: audioRecorder.availableInputs
                textRole: "description"
                Layout.fillWidth: true
                onActivated: {
                    audioRecorder.input = model[index].name;
                }
            }
        }

La propiedad containerFormat describe el tipo de archivo que el componente AudioRecorder producirá.

        RowLayout {
            Layout.fillWidth: true
            Text {
                text: "Container format"
                color: "black"
            }
            Text {
                text: audioRecorder.containerFormat
                color: "blue"
                font.bold: true
                wrapMode: Text.WrapAtWordBoundaryOrAnywhere
            }
            ComboBox {
                model: audioRecorder.availableContainerFormats
                textRole: "description"
                Layout.fillWidth: true
                onActivated: {
                    audioRecorder.containerFormat = model[index].name;
                }
            }
        }

La propiedad codec, que no se debe confundir con la propiedad containerFormat, define el método en el que se codificará y procesará la grabación audio. El códec, en lugar del tipo de archivo, controla normalmente el tamaño o la compresión que tendrá un archivo. La propiedad codec puede manipularse de la misma forma que la propiedad containerFormat de arriba.

El volumen al que se grabará el audio lo controla la propiedad volume en forma de un número entero. El volumen al que grabaría normalmente su dispositivo se define como 1, así que, por ejemplo, 0.5 grabará a la mitad de volumen. Esta muestra de código controla esta propiedad con un control deslizante de 0 a 1, con incrementos de décimas.

        RowLayout {
            Layout.fillWidth: true
            Text {
                text: "Volume"
                color: "black"
            }
            Text {
                text: audioRecorder.volume
                color: "blue"
                font.bold: true
                wrapMode: Text.WrapAtWordBoundaryOrAnywhere
            }
            Slider {
                Layout.fillWidth: true
                minimumValue: 0
                maximumValue: 1
                stepSize: 0.1
                value: audioRecorder.volume
                onValueChanged: {
                    audioRecorder.volume = value;
                }
            }
        }

La propiedad outputLocation, configurada mediante el cuadro de diálogo del archivo en la muestra de código del panel de control en la parte superior de esta página, define la ubicación prevista para guardar el archivo. Una vez que la grabación ha comenzado, la propiedad actualLocation se ajusta en función de esto, describiendo la ruta del archivo que se creó. En la mayoría de los casos, estas dos propiedades serán las mismas, pero hay excepciones.