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 속성은 앞에서 설명한 containerFormat 속성과 같은 방식으로 조작할 수 있습니다.
오디오가 녹음되는 볼륨은 정수 형식의 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 속성은 이 위치를 기준으로 설정되어 실제로 생성된 파일의 경로를 설명합니다. 대부분의 경우 이러한 두 속성은 동일하지만 예외적인 경우도 있습니다.