ArcGIS AppStudio содержит компонент для записи аудио-файлов высокого качества, включая функции мониторинга и управления процессом записи. Он используется для создания мощных инструментов, позволяющих осуществлять сбор данных желаемого объема и требуемого для вашего приложения уровня качества.
Управление записью
Компонент AudioRecorder содержит функции для управления процессом записи аудио-файлов. Методы record, pause и stop предлагают основные инструменты, которые могут быть использованы в комплексе с другими методами.
В примере кода показано создание основной контрольной панели для управления процессом аудио-записи:
//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();
}
}
}
Свойства записи
Хотя методы AudioRecorder предлагают инструменты для записи аудио, компонент предоставляет ряд дополнительных свойств сбора информации, которые позволят вам настроить процесс на выполнение с максимальной эффективностью. В следующем примере кода показано использование нескольких свойств, которые могут быть полезны.
Свойство input описывает устройство, на котором будет выполнена запись аудио. Оно запускается с системой по умолчанию, но может быть настроено на любое доступное входное устройство.
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;
}
}
}
Свойство containerFormat описывает тип файла, который будет создан компонентом AudioRecorder.
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;
}
}
}
Есть также полезное свойство containerFormat, а свойство codec определяет метод, при помощи которого аудио-запись будет декодироваться и обрабатываться. Codec, в отличие от filetype, определяет, насколько большим или сжатым должен быть файл. Свойство codec используется тем же способом, что и свойство containerFormat, описанное выше.
Объем записываемого аудио-файла контролируется свойством volume в частях от целого. Стандартный объем записи для вашего устройства задается значением 1, а если указано значение 0.5 - будет запись будет величиной в половину стандартного объема. В следующем примере кода показывается построение бегунка с диапазоном от 0 до 1 для управления этим свойством, с шагом в одну десятую.
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;
}
}
}
Свойство outputLocation, устанавливаемое через диалоговое окно файла в примере кода контрольной панели в верхней части страницы, определяет местоположение, предназначенное для этого файла. После начала записи на базе него устанавливается свойство actualLocation, описывая текущий путь к местоположению, в котором создается файл. В большинстве случаев эти два свойства будут совпадать, хотя бывают и исключения.