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 属性,以说明实际创建的文件路径。在大多数情况下,这两个属性相同,但也存在例外情况。