Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- DataGridView 직접 입력
- map이 undefined가 뜰 때
- mosquitto
- html #select #option #multiple
- DatePicker
- pm2 상태 확인
- c# datagridview 데이터 넣기
- 1883
- mosquitto.conf
- pm2 설치
- 데이터테이블 데이터 넣기
- timepicker
- allow_anonymouse
- 공인IP
- invalid data
- pm2 시작
- setInterval 정지
- pm2 확인
- Replication
- listener 1883
- setInterval 중지
- pm2
- transfer
- 서버동기화
- setInterval clear
- mySQL_Replication
- datagridview 직접입력
- 맥 어드레스
- AntDesign
- setInterval 외부 정지
Archives
- Today
- Total
개발 노트
레벨 별 사운드 구현하기 본문
1. 사운드기능을 하는 컴포넌트 만들기
import { useRef, useEffect } from 'react';
import { useModalStore } from '@/store/useModalStore';
export const AlarmSound: React.FC = () => {
const audioRef = useRef<HTMLAudioElement>(null);
const { play, togglePlay, alarmLevel } = useModalStore();
useEffect(() => {
let intervalId: ReturnType<typeof setInterval> | null = null;
const playAudio = () => {
if (audioRef.current) {
// 오디오 로딩 대기 후 재생
const playPromise = audioRef.current.play();
if (playPromise !== undefined) {
playPromise.then(() => {
// 재생 성공
}).catch((error) => {
console.error('오디오 재생 에러:', error);
});
}
}
};
if (play) {
playAudio(); // 초기에 한 번 재생
intervalId = setInterval(playAudio, 5000); // 5초 간격으로 재생
}
return () => {
if (intervalId) {
clearInterval(intervalId);
}
};
}, [play]);
useEffect(() => {
// 알람 레벨에 따라 오디오 소스 변경
if (audioRef.current) {
audioRef.current.src = alarmLevel === 50 ? "/sound/alarm2.mp3" : "/sound/alarm1.mp3";
// 새로운 소스 로딩 대기 후 자동 재생 방지
audioRef.current.load();
}
}, [alarmLevel]);
return (
<>
<audio ref={audioRef} preload="auto">
<source src={alarmLevel === 50 ? "/sound/alarm2.mp3" : "/sound/alarm1.mp3"} type="audio/mp3" />
</audio>
<button
type="button"
className="ml-2 my-auto"
aria-label="play"
onClick={togglePlay}
>
{play ? '■' : '▶'}
</button>
</>
);
};
2. 트리거 해주는 부분에서 alarmLevel을 업데이트
import { AlarmSound } from './AlarmSound';
const ModalComponent: React.FC = () => {
useEffect(() => {
// 나머지 코드 생략
setAlarmLevel(twoDayIssueList[0]?.level)
}, [groupedMessages,twoDayIssueList]);
3. 나머지 코드들은 기존 코드를 유지
'React' 카테고리의 다른 글
NEXT.js fetch관련 자료 (0) | 2024.06.18 |
---|---|
Next 배포 시 TypeError fetch failed (0) | 2024.04.19 |
fetch를 위해 알아본 자료들 (0) | 2024.04.02 |
새 글 정보 알람 기능 (0) | 2024.03.22 |
로컬스토리지에 값 저장하기 (0) | 2024.03.22 |