Obiekty dźwiękowe

Aplikacja ArcGIS AppStudio udostępnia zaawansowany komponent rejestrowania do obsługi dźwięku, w tym funkcje służące do sterowania rejestrowaniem i jego monitorowania. Można go używać do tworzenia zaawansowanych narzędzi pozwalających na zbieranie danych, przy czym jakość i wielkość danych można skonfigurować zgodnie z potrzebami aplikacji użytkownika.

Elementy sterujące rejestratora

Komponent AudioRecorder udostępnia funkcje pozwalające na sterowanie procesem rejestrowania dźwięku. Metody rejestrowania, wstrzymywania i zatrzymywania udostępniają narzędzia na poziomie podstawowym, które można następnie uzupełnić o inne metody.

Poniższy przykładowy kod tworzy ogólny panel sterowania do zarządzania procesem rejestrowania dźwięku:

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

Właściwości rejestrowania

Podczas gdy metody komponentu AudioRecorder dostarczają narzędzi do rejestrowania dźwięku, komponent udostępnia pewną liczbę właściwości przekazujących procesowi informacje. Te właściwości pozwalają na utworzenie konfiguracji bardziej dopasowanej do potrzeb użytkownika. Poniższy przykładowy kod tworzy instrumenty do sterowania potencjalnie przydatnymi właściwościami.

Właściwość input opisuje urządzenie do przechwytywania dźwięku. Będzie ono uruchamiane domyślnie w systemie, ale można je zmienić na dowolne dostępne urządzenie wejściowe.

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

Właściwość containerFormat opisuje typ pliku wynikowego dla komponentu 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;
                }
            }
        }

Właściwość codec (nie należy mylić z właściwością containerFormat) definiuje metodę, przy użyciu której rejestrowanie dźwięku będzie kodowane i przetwarzane. Zwykle to kodek, a nie typ pliku, steruje wielkością lub poziomem skompresowania pliku. Właściwości codec można używać w ten sam sposób, co powyższej właściwości containerFormat.

Głośnością, z jaką będzie rejestrowany dźwięk, steruje właściwość volume podana w formie liczby całkowitej. Standardowa głośność rejestrowania urządzenia jest zdefiniowana jako 1, więc na przykład wartość 0,5 będzie oznaczać rejestrowanie z głośnością zmniejszoną o połowę. Poniższy przykładowy kod steruje tą właściwością za pomocą suwaka z zakresu od 0 do 1, z możliwością zmiany co jedną dziesiątą.

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

Właściwość outputLocation ustawiana za pomocą okna dialogowego pliku w przykładowym kodzie panelu sterowania umieszczonym na początku tej strony definiuje miejsce przeznaczone na zapisanie pliku. Po rozpoczęciu rejestrowania na tej podstawie ustawiana jest właściwość actualLocation, która opisuje ścieżkę do utworzonego pliku. W większości przypadków te dwie właściwości będą takie same, ale istnieją wyjątki.