Аудио-объекты

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, описывая текущий путь к местоположению, в котором создается файл. В большинстве случаев эти два свойства будут совпадать, хотя бывают и исключения.