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.