From e285e9f22c8a2f6253c448d1f4fb5219753fbcc4 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Fri, 26 Jul 2024 15:57:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 4 +- src/components/StupWizard/index.tsx | 111 +++++++++++++++++++++++----- src/page/Meeting/index.tsx | 5 +- src/utils/package/agora.ts | 39 +++++----- 4 files changed, 116 insertions(+), 43 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index f77582f..f06fb14 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -130,10 +130,10 @@ const App: React.FC = () => { playBackDeviceId: "", //输出设备id ecordingVolume: '', //输入音量 playBackVolume: '', //输出音量 - autoEcordingVolume: false, //是否自动调整麦克风音量 + autoEcordingVolume: true, //是否自动调整麦克风音量 recordingFilesPath: '', //本地录制保存路径 shareFilesPath: '', //共享文件保存路径 - isShareSavePath: false, //是否下载钱询问每个文件保存的位置 + isShareSavePath: true, //是否下载钱询问每个文件保存的位置 })) } }, []) diff --git a/src/components/StupWizard/index.tsx b/src/components/StupWizard/index.tsx index 52054a5..d74c9c2 100644 --- a/src/components/StupWizard/index.tsx +++ b/src/components/StupWizard/index.tsx @@ -5,6 +5,7 @@ import { useState, useImperativeHandle, forwardRef, useEffect } from "react"; import agora from '@/utils/package/agora' import { CloseOutlined, LoadingOutlined } from '@ant-design/icons'; import { storage } from '@/utils'; +const os = require('os') let userInfo = JSON.parse(storage.getItem('user') as string) const StupWizard = forwardRef((props: any, ref: any) => { useImperativeHandle(ref, () => ({ @@ -178,10 +179,11 @@ const AudioComponents = () => { ecordingList: [], playBackItem: null, ecordingItem: null, - playBackVolume: 127, + playBackVolume: 0, playBackActive: false, ecordingActive: false, ecordingVolume: 0, + autoEcordingVolume: true, }); useEffect(() => { getAudioMediaList() @@ -194,8 +196,28 @@ const AudioComponents = () => { } }) }, []); - const getAudioMediaList = (): void => { - const { playBackList, ecordingList, playBackItem, ecordingItem, ecordingVolume } = agora.getAudioMediaList(); + const getAudioMediaList = async (): Promise => { + const { playBackList, ecordingList, playBackItem, ecordingItem, ecordingVolume } = await agora.getAudioMediaList(); + const setting = await JSON.parse(storage.getItem('setting') as string) + if ((!setting.ecordingDeviceId && ecordingItem.deviceId) || (!(ecordingList.find((item: any) => item.deviceId === setting.ecordingDeviceId)) && ecordingItem.deviceId)) { + setting.ecordingDeviceId = ecordingItem.deviceId + } + if ((!setting.playBackDeviceId && playBackItem.deviceId) || (!(playBackList.find((item: any) => item.deviceId === setting.playBackDeviceId)) && playBackItem.deviceId)) { + setting.playBackDeviceId = playBackItem.deviceId + } + if (!ecordingList.length) { + setting.ecordingDeviceId = '' + } + if (!playBackList.length) { + setting.playBackDeviceId = '' + } + if (!setting.ecordingVolume) { + setting.ecordingVolume = ecordingVolume; + } + if (!setting.playBackVolume) { + setting.playBackVolume = 127; + } + storage.setItem('setting', JSON.stringify(setting)) setAudioDeviceManager({ ...audioDeviceManager, playBackList: playBackList.map((row: any) => { @@ -210,9 +232,11 @@ const AudioComponents = () => { label: row.deviceName } }), - playBackItem: playBackItem.deviceId ? playBackItem.deviceId : null, - ecordingItem: ecordingItem.deviceId ? ecordingItem.deviceId : null, - ecordingVolume, + playBackItem: setting.playBackDeviceId ? setting.playBackDeviceId : playBackItem.deviceId || null, + ecordingItem: setting.ecordingDeviceId ? setting.ecordingDeviceId : ecordingItem.deviceId || null, + ecordingVolume: setting.ecordingVolume, + playBackVolume: setting.playBackVolume, + autoEcordingVolume: setting.autoEcordingVolume }) } return ( @@ -226,7 +250,10 @@ const AudioComponents = () => { { + value={audioDeviceManager.playBackItem} onChange={async (e) => { + const setting = await JSON.parse(storage.getItem('setting') as string) + setting.playBackDeviceId = e; + storage.setItem('setting', JSON.stringify(setting)) setAudioDeviceManager({ ...audioDeviceManager, playBackItem: e @@ -316,7 +355,10 @@ const AudioComponents = () => { : null}
输出音量: - { + { + const setting = await JSON.parse(storage.getItem('setting') as string) + setting.playBackVolume = e; + storage.setItem('setting', JSON.stringify(setting)) agora.setPlaybackDeviceVolume(e) setAudioDeviceManager({ ...audioDeviceManager, @@ -332,6 +374,16 @@ const AudioComponents = () => { } const RecordingComponents = () => { const [filePath, setFilePath] = useState('') + useEffect(() => { + const setting = JSON.parse(storage.getItem('setting') as string) + if (!setting.recordingFilesPath) { + setting.recordingFilesPath = `${os.homedir()}\\Desktop\\` + setFilePath(setting.recordingFilesPath) + storage.setItem('setting', JSON.stringify(setting)) + } else { + setFilePath(setting.recordingFilesPath); + } + }, []) return ( <>
@@ -344,7 +396,10 @@ const RecordingComponents = () => { placeholder="请填入文件路径" style={{ margin: '0 14px', flexGrow: 1 }} value={filePath} - onChange={(e) => { + onChange={async (e) => { + const setting = await JSON.parse(storage.getItem('setting') as string) + setting.recordingFilesPath = e.target.value; + storage.setItem('setting', JSON.stringify(setting)) setFilePath(e.target.value) }} /> @@ -357,6 +412,18 @@ const RecordingComponents = () => { } const FileComponents = () => { const [filePath, setFilePath] = useState('') + const [isShareSavePath, setIsShareSavePath] = useState(true) + useEffect(() => { + const setting = JSON.parse(storage.getItem('setting') as string) + if (!setting.shareFilesPath) { + setting.shareFilesPath = `${os.homedir()}\\Desktop\\` + setFilePath(setting.shareFilesPath) + storage.setItem('setting', JSON.stringify(setting)) + } else { + setFilePath(setting.shareFilesPath); + } + setIsShareSavePath(setting.isShareSavePath) + }, []) return ( <>
@@ -369,16 +436,22 @@ const FileComponents = () => { placeholder="请填入保存目录" style={{ margin: '0 14px', flexGrow: 1 }} value={filePath} - onChange={(e) => { + onChange={async (e) => { + const setting = await JSON.parse(storage.getItem('setting') as string) + setting.shareFilesPath = e.target.value; + storage.setItem('setting', JSON.stringify(setting)) setFilePath(e.target.value) }} />
- { - - }}>下载前询问每个文件保存位置 + { + const setting = await JSON.parse(storage.getItem('setting') as string) + setting.isShareSavePath = e.target.checked; + storage.setItem('setting', JSON.stringify(setting)) + setIsShareSavePath(e.target.checked) + }} checked={isShareSavePath}>下载前询问每个文件保存位置
diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index f9e4b12..80bad73 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -800,10 +800,9 @@ const Meeting: React.FC = () => { })}
-
- {/* { + { - }}>共享电脑音频 */} + }}>共享电脑音频
diff --git a/src/utils/package/agora.ts b/src/utils/package/agora.ts index 421f10e..b05b0df 100644 --- a/src/utils/package/agora.ts +++ b/src/utils/package/agora.ts @@ -1,5 +1,4 @@ import { message } from "antd"; -const os = require('os'); import { createAgoraRtcEngine, ClientRoleType, @@ -12,6 +11,7 @@ import { MediaRecorderStreamType } from "agora-electron-sdk"; import { GetRoomRtcToken } from "@/api/Home/Index"; +import { storage } from '@/utils'; const option: any = { appId: 'dcfc466a6ecb4a1f972630065dfb1e75', token: '', @@ -259,8 +259,9 @@ const agora = { message.success(`文件已保存至${info.fileName}`) }, }) + const setting = JSON.parse(storage.getItem('setting') as string) iMediaRecorder.startRecording({ - storagePath: `${os.homedir()}/Desktop/${+new Date()}.mp4`, //录音文件在本地保存的绝对路径,需精确到文件名及格式 + storagePath: `${setting.recordingFilesPath}${+new Date()}.mp4`, //录音文件在本地保存的绝对路径,需精确到文件名及格式 containerFormat: MediaRecorderContainerFormat.FormatMp4, //录制文件的格式 streamType: MediaRecorderStreamType.StreamTypeBoth, //录制内容 maxDurationMs: 7200000, //maxDurationMs @@ -299,7 +300,7 @@ const agora = { }) }, // 获取输入输出设备列表 - getAudioMediaList: () => { + getAudioMediaList: async () => { return { playBackList: rtcEngine.getAudioDeviceManager().enumeratePlaybackDevices(), ecordingList: rtcEngine.getAudioDeviceManager().enumerateRecordingDevices(), @@ -309,36 +310,36 @@ const agora = { } }, // 启动音频播放设备测试。 - startPlaybackDeviceTest: () => { - rtcEngine.getAudioDeviceManager().startPlaybackDeviceTest('https://wgshare.oss-cn-chengdu.aliyuncs.com/TestAudio.mp3') + startPlaybackDeviceTest: async () => { + await rtcEngine.getAudioDeviceManager().startPlaybackDeviceTest('https://wgshare.oss-cn-chengdu.aliyuncs.com/TestAudio.mp3') }, // 停止音频播放设备测试。 - stopPlaybackDeviceTest: () => { - rtcEngine.getAudioDeviceManager().stopPlaybackDeviceTest() + stopPlaybackDeviceTest: async () => { + await rtcEngine.getAudioDeviceManager().stopPlaybackDeviceTest() }, // 设置播放设备音量 - setPlaybackDeviceVolume: (volume: number) => { - rtcEngine.getAudioDeviceManager().setPlaybackDeviceVolume(volume) + setPlaybackDeviceVolume: async (volume: number) => { + await rtcEngine.getAudioDeviceManager().setPlaybackDeviceVolume(volume) }, // 指定播放设备 - setPlaybackDevice: (deviceId: string) => { - rtcEngine.getAudioDeviceManager().setPlaybackDevice(deviceId) + setPlaybackDevice: async (deviceId: string) => { + await rtcEngine.getAudioDeviceManager().setPlaybackDevice(deviceId) }, // 启动音频采集设备测试 - startRecordingDeviceTest: (indicationInterval: number) => { - rtcEngine.getAudioDeviceManager().startRecordingDeviceTest(indicationInterval) + startRecordingDeviceTest: async (indicationInterval: number) => { + await rtcEngine.getAudioDeviceManager().startRecordingDeviceTest(indicationInterval) }, // 设置音频设备音量 - setRecordingDeviceVolume: (volume: number) => { - rtcEngine.getAudioDeviceManager().setRecordingDeviceVolume(volume) + setRecordingDeviceVolume: async (volume: number) => { + await rtcEngine.getAudioDeviceManager().setRecordingDeviceVolume(volume) }, // 设置音频采集设备 - setRecordingDevice: (deviceId: string) => { - rtcEngine.getAudioDeviceManager().setRecordingDevice(deviceId) + setRecordingDevice: async (deviceId: string) => { + await rtcEngine.getAudioDeviceManager().setRecordingDevice(deviceId) }, // 停止音频采集设备测试 - stopRecordingDeviceTest: () => { - rtcEngine.getAudioDeviceManager().stopRecordingDeviceTest() + stopRecordingDeviceTest: async () => { + await rtcEngine.getAudioDeviceManager().stopRecordingDeviceTest() }, }