Cách ghi âm từ micrô của người dùng

François Beaufort
François Beaufort

Bạn có thể truy cập vào máy ảnh và micrô của người dùng trên nền tảng web bằng API Luồng và thu thập nội dung nghe nhìn. Phương thức getUserMedia() sẽ nhắc người dùng truy cập vào máy ảnh và/hoặc micrô để ghi dưới dạng luồng nội dung nghe nhìn. Sau đó, bạn có thể ghi lại luồng này bằng API MediaRecorder hoặc chia sẻ với những người khác qua mạng. Bạn có thể lưu bản ghi vào tệp cục bộ thông qua phương thức showOpenFilePicker().

Ví dụ bên dưới cho thấy cách bạn có thể ghi âm từ micrô của người dùng ở định dạng WebM và lưu bản ghi vào hệ thống tệp của người dùng.

let stream;
let recorder;

startMicrophoneButton.addEventListener("click", async () => {
  // Prompt the user to use their microphone.
  stream = await navigator.mediaDevices.getUserMedia({ audio: true });
  recorder = new MediaRecorder(stream);
});

stopMicrophoneButton.addEventListener("click", () => {
  // Stop the stream.
  stream.getTracks().forEach(track => track.stop());
});

startRecordButton.addEventListener("click", async () => {
  // For the sake of more legible code, this sample only uses the
  // `showSaveFilePicker()` method. In production, you need to
  // cater for browsers that don't support this method, as
  // outlined in https://web.dev/patterns/files/save-a-file/.

  // Prompt the user to choose where to save the recording file.
  const suggestedName = "microphone-recording.webm";
  const handle = await window.showSaveFilePicker({ suggestedName });
  const writable = await handle.createWritable();

  // Start recording.
  recorder.start();
  recorder.addEventListener("dataavailable", async (event) => {
    // Write chunks to the file.
    await writable.write(event.data);
    if (recorder.state === "inactive") {
      // Close the file when the recording stops.
      await writable.close();
    }
  });
});

stopRecordButton.addEventListener("click", () => {
  // Stop the recording.
  recorder.stop();
});

Hỗ trợ trình duyệt

MediaDevices.getUserMedia()

Hỗ trợ trình duyệt

  • 53
  • 12
  • 36
  • 11

Nguồn

API MediaRecorder

Hỗ trợ trình duyệt

  • 47
  • 79
  • 25
  • 14,1

Nguồn

Chương trình showSaveFilePicker() của API Truy cập hệ thống tệp

Hỗ trợ trình duyệt

  • 86
  • 86
  • x
  • x

Nguồn

Tài liệu đọc thêm

Bản minh hoạ

Mở bản minh hoạ