Audioobjekte

ArcGIS AppStudio stellt eine ausgereifte Audio-Aufzeichnungskomponente bereit, die u. a. auch Steuerungs- und Überwachungsfunktionen für Aufzeichnungen beinhaltet. Hiermit lassen sich leistungsstarke Werkzeuge zum Sammeln von Daten erstellen, wobei Qualität und Größe den Anforderungen der App entsprechend konfiguriert werden können.

Steuerelemente für Aufzeichnungen

Die Komponente AudioRecorder stellt Funktionen zum Steuern des Prozesses der Audioaufzeichnung bereit. Die Methoden zum Aufzeichnen, Unterbrechen und Anhalten bieten einfache Werkzeuge, die mit weiteren Methoden ergänzt werden können.

In diesem Codebeispiel wird eine allgemeine Systemsteuerung zur Verwaltung der Audioaufzeichnung bereitgestellt:

//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();
        }
    }
}

Aufzeichnungseigenschaften

Während die AudioRecorder-Methoden die Werkzeuge für die Audioaufzeichnung bereitstellen, bietet die Komponente eine Reihe von Eigenschaften, die für den Prozess angegeben werden können. Hierdurch wird eine verbesserte Benutzeroberfläche ermöglicht, die Sie Ihren Anforderungen entsprechend konfigurieren können. In den folgenden Codebeispielen werden einige Möglichkeiten zur Steuerung potenziell nützlicher Eigenschaften aufgezeigt.

In der Eigenschaft input wird das Gerät für die Audioaufnahme angegeben. Hierbei handelt es sich um den Systemstandard. Die Eigenschaft kann jedoch jederzeit in ein beliebiges verfügbares Eingabegerät geändert werden.

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

In der Eigenschaft containerFormat wird der Dateityp angegeben, den die Komponente AudioRecorder für die Ausgabe verwendet.

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

In der Eigenschaft codec wird die Methode definiert, mit der die Audioaufzeichnung verschlüsselt und verarbeitet wird. Sie ist nicht zu verwechseln mit der Eigenschaft containerFormat. Die Größe bzw. der Komprimierungsgrad einer Datei wird nicht durch den Dateityp, sondern durch den Codec gesteuert. Die Eigenschaft codec kann ebenso bearbeitet werden wie die Eigenschaft containerFormat oben.

Die Lautstärke, mit der ein Audioobjekt aufgezeichnet wird, wird durch die Eigenschaft volume in Form einer Ganzzahl gesteuert. Die Lautstärke, mit der ein Gerät normalerweise aufzeichnet, wird als 1 definiert. Bei 0,5 erfolgt die Aufzeichnung also beispielsweise mit der halben Lautstärke. Im vorliegenden Codebeispiel wird diese Eigenschaft mit einem Schieberegler von 0 bis 1 gesteuert, wobei die einzelnen Schritte jeweils ein Zehntel betragen.

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

Die Eigenschaft outputLocation, die über das Dialogfeld "Datei" im Codebeispiel für die Systemsteuerung oben auf dieser Seite festgelegt wird, definiert den gewünschten Speicherort der Datei. Wenn die Aufzeichnung gestartet wird, wird die Eigenschaft actualLocation auf dieser Grundlage festgelegt und gibt den tatsächlichen Pfad der erstellten Datei an. In den meisten Fällen stimmen diese beiden Eigenschaften überein. Hierbei gibt es jedoch Ausnahmen.