오디오 객체

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 속성은 이 위치를 기준으로 설정되어 실제로 생성된 파일의 경로를 설명합니다. 대부분의 경우 이러한 두 속성은 동일하지만 예외적인 경우도 있습니다.