Oggetti audio

ArcGIS AppStudio fornisce un componente di registrazione di alto livello per la gestione di audio, che include funzioni di controllo e monitoraggio delle registrazione. Può essere utilizzato per creare potenti strumenti di raccolta di dati dalle qualità e dimensioni configurabili in base alle necessità della propria app.

Controlli del registratore

Il componente AudioRecorder fornisce funzioni di controllo del processo di registrazione audio. I metodi di registrazione, pausa e interruzione forniscono degli strumenti di base che possono essere integrati da altri metodi.

Questo esempio di codice fornisce un pannello di controllo generale per gestire il processo di registrazione audio:

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

Proprietà di registrazione

Mentre i metodi AudioRecorder forniscono gli strumenti per registrare audio, il componente fornisce una serie di proprietà che danno informazioni al processo per consentire un'esperienza più dettagliata configurabile in base alle proprie esigenze. I seguenti esempi di codici forniscono alcuni mezzi per controllare proprietà potenzialmente utili.

La proprietà input descrive il dispositivo che acquisirà l'audio. Tale dispositivo sarà quello predefinito nel sistema, ma potrà essere cambiato a qualunque dispositivo di ingresso disponibile.

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

La proprietà containerFormat descrive il tipo di file in cui il componente AudioRecorder effettuerà l'emissione.

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

Da non confondersi con la proprietà containerFormat; la proprietà codec definisce il metodo con cui la registrazione audio sarà codificata ed elaborata. Normalmente, il formato grande o compresso di un file viene determinato dal codec, non dal tipo di file. È possibile maneggiare la proprietà codec alla stessa stregua della già menzionata proprietà containerFormat.

Il volume di registrazione dell'audio è controllato dalla proprietà volume sotto forma di numero intero. Il volume normale di registrazione del dispositivo è definito come 1; quindi, ad esempio, con 0,5 si registra con il volume a metà. Questo esempio di codice controlla questa proprietà con un cursore da 0 a 1, con un incremento ad ogni decimo.

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

La proprietà outputLocation, impostata attraverso la finestra di dialogo del file nell'esempio di codice del pannello di controllo in cima a questa pagina, definisce la destinazione prevista per il salvataggio del file. Una volta avviata la registrazione, la proprietà actualLocation è impostata in base a questo e descrive il percorso del file effettivamente realizzato. Nella maggior parte dei casi, queste due proprietà saranno identiche, ma esistono eccezioni.