麦克风
免费插件
此插件免费开源,采用 MIT 许可证。
概述
Microphone API 提供对设备麦克风的访问以录制音频。它提供流式接口用于启动和管理录音,使用唯一标识符跟踪录音,并响应完成事件。
安装
shell
composer require nativephp/mobile-microphone使用
PHP (Livewire/Blade)
php
use Native\Mobile\Facades\Microphone;
// 开始录音
Microphone::record()->start();
// 停止录音
Microphone::stop();
// 暂停录音
Microphone::pause();
// 恢复录音
Microphone::resume();
// 获取状态
$status = Microphone::getStatus();
// 返回: "idle"、"recording" 或 "paused"
// 获取上次录音路径
$path = Microphone::getRecording();JavaScript (Vue/React/Inertia)
js
import { microphone, on, off, Events } from '#nativephp';
// 基本录音
await microphone.record();
// 带有用于跟踪的标识符
await microphone.record()
.id('voice-memo');
// 停止录音
await microphone.stop();
// 暂停/恢复
await microphone.pause();
await microphone.resume();
// 获取状态
const result = await microphone.getStatus();
if (result.status === 'recording') {
// 正在录音
}
// 获取上次录音
const result = await microphone.getRecording();
if (result.path) {
// 处理录音
}PendingMicrophone API
id(string $id)
为此录音设置唯一标识符。
php
Microphone::record()
->id('voice-note-123')
->start();event(string $eventClass)
设置录音完成时要分发的自定义事件类。
php
use App\Events\VoiceMessageRecorded;
Microphone::record()
->event(VoiceMessageRecorded::class)
->start();remember()
将录音器的 ID 存储在会话中以便稍后检索。
php
Microphone::record()
->id('voice-note')
->remember()
->start();start()
显式开始音频录制。如果录音成功开始则返回 true。
事件
MicrophoneRecorded
当录音成功完成时触发。
Payload:
string $path- 录制音频的文件路径string $mimeType- 音频 MIME 类型(默认:'audio/m4a')?string $id- 如果通过id()方法设置,则为可选标识符
php
use Native\Mobile\Attributes\OnNative;
use Native\Mobile\Events\Microphone\MicrophoneRecorded;
#[OnNative(MicrophoneRecorded::class)]
public function handleAudioRecorded(string $path, string $mimeType, ?string $id = null)
{
// 处理录制的音频
$this->processAudio($path);
}js
import { on, off, Events } from '#nativephp';
import { ref, onMounted, onUnmounted } from 'vue';
const recordings = ref([]);
const handleAudioRecorded = (payload) => {
const { path, mimeType, id } = payload;
recordings.value.push({ path, mimeType, id });
};
onMounted(() => {
on(Events.Microphone.MicrophoneRecorded, handleAudioRecorded);
});
onUnmounted(() => {
off(Events.Microphone.MicrophoneRecorded, handleAudioRecorded);
});jsx
import { on, off, Events } from '#nativephp';
import { useState, useEffect } from 'react';
const [recordings, setRecordings] = useState([]);
const handleAudioRecorded = (payload) => {
const { path, mimeType, id } = payload;
setRecordings(prev => [...prev, { path, mimeType, id }]);
};
useEffect(() => {
on(Events.Microphone.MicrophoneRecorded, handleAudioRecorded);
return () => {
off(Events.Microphone.MicrophoneRecorded, handleAudioRecorded);
};
}, []);注意事项
- 麦克风权限: 应用首次请求麦克风访问时,用户会收到权限提示。如果被拒绝,录音功能将静默失败。
- 后台录音: 你可以通过在配置中将
microphone_background设置为 true 来允许应用在设备锁定时录制音频。 - 文件格式: 录音以 M4A/AAC 音频文件(
.m4a)存储。此格式在保持质量的同时优化了文件大小。 - 录音状态: 同一时间只能有一个活动的录音。在录音进行中调用
start()将返回false。 - 自动启动行为: 如果不显式调用
start(),录音将在PendingMicrophone被销毁时自动开始。