Objets audio

ArcGIS AppStudio fournit un composant d'enregistrement de haut niveau pour gérer l'audio, y compris des fonctions permettant de contrôler et surveiller l'enregistrement. Ceci permet de créer de puissants outils pour collecter des données dont la qualité et la taille peuvent être configurées selon les besoins de votre application.

Contrôles de l'enregistreur

Le composant AudioRecorder fournit des fonctions permettant de contrôler le processus d'enregistrement audio. Les méthodes d'enregistrement, de mise en pause et d'arrêt fournissent des outils de base pouvant être enrichis par d'autres méthodes.

L'exemple de code suivant fournit un panneau de configuration général permettant de gérer le processus d'enregistrement 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();
        }
    }
}

Propriétés d'enregistrement

Les méthodes AudioRecorder fournissent les outils permettant d'enregistrer l'audio, tandis que le composant fournit des propriétés qui informent le processus, ce qui vous permet de configurer une expérience offrant plus d'informations selon vos besoins. Les exemples de code suivants fournissent des moyens de contrôler des propriétés potentiellement utiles.

La propriété input décrit le périphérique allant capturer l'audio. Ce périphérique démarre par défaut mais peut être remplacé par n'importe quel périphérique d'entrée 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 propriété containerFormat décrit le type de fichier vers lequel le composant AudioRecorder génère les données résultantes.

        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;
                }
            }
        }

A ne pas confondre avec la propriété containerFormat, la propriété codec définit la méthode dans laquelle l'enregistrement audio sera codé et traité. Le codec, plutôt que le type de fichier, détermine généralement la taille ou le degré de compression d'un fichier. La propriété codec peut être manipulée de la même manière que la propriété containerFormat ci-dessus.

Le volume auquel l'audio sera enregistré est déterminé par la propriété volume sous la forme d'un nombre entier. Le volume auquel votre périphérique devrait normalement enregistrer est défini comme égal à 1. Ainsi, par exemple, 0,5 enregistrera à la moitié du volume. Cet exemple de code contrôle cette propriété à l'aide d'un curseur allant de 0 à 1, avec des paliers d'incrémentation à chaque dixième.

        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 propriété outputLocation, définie via la boîte de dialogue de fichier dans l'exemple de code de panneau de configuration situé en haut de cette page, détermine l'emplacement voulu auquel enregistrer le fichier. Une fois l'enregistrement commencé, la propriété actualLocation est définie en fonction de ceci, et indique le chemin d'accès du fichier ayant été effectivement créé. Dans la plupart des cas, ces deux propriétés sont les mêmes, mais il existe des exceptions.