音频对象

ArcGIS AppStudio 提供可用于处理音频的高级录音组件,其中包含用于控制和监控录音的各项功能。这可用于创建功能强大的数据采集工具,以按应用程序需求配置采集数据的数量和大小。

录音机控件

AudioRecorder 组件提供控制音频记录过程的功能。录制方法、暂停方法和停止方法提供了一些基础工具,后续可通过其他方法对这些工具加以补充。

该代码示例提供了常规的控制面板,可管理音频录制的过程:

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

codec 属性可定义编码和处理音频录制的方法,请勿将其与 containerFormat 属性混淆。通常由 codec 而不是 filetype 来控制文件的大小或文件压缩后的大小。可采取与处理上述 containerFormat 属性相同的方法处理 codec 属性。

所录制音频的音量由 volume 属性以整数的形式控制。举个例子,如果将设备录制时的正常音量定义为 1,则采用 0.5 时设备将以一半的音量进行录制。该代码示例通过一个 0 到 1 的滑块控制该属性,并按 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 属性,以说明实际创建的文件路径。在大多数情况下,这两个属性相同,但也存在例外情况。