반응형
반응형

Marmot screaming on Blackcomb Mountain

https://youtu.be/syNumVb2kUs

 

Marmot screaming on Blackcomb Mountain

Marmot scream on Blackcomb Mountain. The original video filmed by us can be found on our Instagram account @lonegoatsoap. To use this video in a commercial player or in broadcasts, please email licensing@storyful.com

youtu.be

 

Screaming marmot

https://youtu.be/Qj0u5QE8WLc

 

Screaming marmot

 

youtu.be

 

반응형
반응형

야 개 짖는 소리 좀 안 나게 하라

 

https://youtu.be/qwKiYuGp29k

 

개짖는 소리에 열받은 아저씨 (개짖는 소리 좀 안나게해라!)

멍멍!! 야!!!!!!!!!!!!!! 개짖는 멍멍멍멍!! 소리좀안나게해라!!!! 야이!!! 멍멍!!!! 개 xx 야!!!!! 멍멍!!!! 야!!!!!!!!!! 멍!!! 개짖는소리좀 안나게해라!!! 멍!!!!

youtu.be

 

반응형
반응형

실패는 무엇인가?
단지 교육일 뿐이다.
무엇인가 더 나아지는 첫 걸음이다.
다음 승리에 가까이 다가서는 것이다.
(물론 당신이 1,000% 노력할 경우)
- 데브라 벤튼, 'CEO처럼 행동하라'에서


우리가 실패를 예찬(?)할 때는
과감한 도전의 결과인 새로운 실수나 실패를 용인하고 장려하는 것이지,
같은 실수를 계속 반복하는 것을 용인하는 것이 아니라는 사실을 알아야 합니다.
사소한 실수를 계속 반복하는 것은 프로의식 결여에서 비롯되는 것으로
쉽게 용서받기 어려운 최악의 실수에 다름 아닙니다.

반응형
반응형

비가 많이 왔지만 월요일부터 금주(酒) 계속 진행 중

 

반응형

'LIFE (일상다반사)' 카테고리의 다른 글

Marmot screaming on Blackcomb Mountain  (0) 2021.09.08
야 개 짖는 소리 좀 안 나게 하라  (0) 2021.09.08
2021.09.05 서울시친환경농장  (0) 2021.09.06
미생 마지막회  (0) 2021.09.01
이봐, 해보기나 했어?  (0) 2021.08.16
반응형



한여름 어머니 몸에서 배어 나온 땀 냄새 같은
저 쿱쿱한 냄새
진한 내음으로 떠다니는 시간 붙잡고
차분히 기다리라는 쉰내

마누라는 나를 위해 찌개를 끓인다
오랜 식음에 익숙해진 나
감기약 대체용으로 돼지고기 몇 점
송송 썰어 부글부글 익어가는 얼큰한 약

나른한 시간
차분히 삶의 실체를 알려주는
마음을 정리해 주는 냄새


- 이종범의 시《김치찌개》전문 -


* 우리 음식 가운데
가장 친숙한 것이 김치찌개입니다.
냄새만으로도 군침이 돕니다. 아무리 입맛이
없어도 좋습니다. 우울한 날, 의욕을 잃은 날도
괜찮습니다. 아내나 엄마가 끓여주는 김치찌개
하나면 밥 한 그릇 뚝딱입니다. 볼에 화색이 돌고
기운이 납니다. 마음도 편안해집니다.
언제나 효과가 좋은 치유제입니다.

반응형

'아침편지' 카테고리의 다른 글

'자동차 연료통'이 아니다  (0) 2021.09.10
우리가 서점을 찾는 이유  (0) 2021.09.09
'엄마에게 너무 화가 나요'  (0) 2021.09.07
진정성을 담은 고백  (0) 2021.09.06
나로부터 끝나고, 나로부터 시작한다  (0) 2021.09.06
반응형

HTML5 웹에서 마이크 녹음 기능

 

 

 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>마이크 테스트</title>
</head>

<body>
    <input type=checkbox id="chk-hear-mic"><label for="chk-hear-mic">마이크 소리 듣기</label>
    <button id="record">녹음</button>
    <button id="stop">정지</button>
    <div id="sound-clips"></div>
    <script>
        const record = document.getElementById("record")
        const stop = document.getElementById("stop")
        const soundClips = document.getElementById("sound-clips")
        const chkHearMic = document.getElementById("chk-hear-mic")

        const audioCtx = new(window.AudioContext || window.webkitAudioContext)() // 오디오 컨텍스트 정의

        const analyser = audioCtx.createAnalyser()
        //        const distortion = audioCtx.createWaveShaper()
        //        const gainNode = audioCtx.createGain()
        //        const biquadFilter = audioCtx.createBiquadFilter()

        function makeSound(stream) {
            const source = audioCtx.createMediaStreamSource(stream)

            source.connect(analyser)
            //            analyser.connect(distortion)
            //            distortion.connect(biquadFilter)
            //            biquadFilter.connect(gainNode)
            //            gainNode.connect(audioCtx.destination) // connecting the different audio graph nodes together
            analyser.connect(audioCtx.destination)

        }

        if (navigator.mediaDevices) {
            console.log('getUserMedia supported.')

            const constraints = {
                audio: true
            }
            let chunks = []

            navigator.mediaDevices.getUserMedia(constraints)
                .then(stream => {

                    const mediaRecorder = new MediaRecorder(stream)
                    
                    chkHearMic.onchange = e => {
                        if(e.target.checked == true) {
                            audioCtx.resume()
                            makeSound(stream)
                        } else {
                            audioCtx.suspend()
                        }
                    }
                    
                    record.onclick = () => {
                        mediaRecorder.start()
                        console.log(mediaRecorder.state)
                        console.log("recorder started")
                        record.style.background = "red"
                        record.style.color = "black"
                    }

                    stop.onclick = () => {
                        mediaRecorder.stop()
                        console.log(mediaRecorder.state)
                        console.log("recorder stopped")
                        record.style.background = ""
                        record.style.color = ""
                    }

                    mediaRecorder.onstop = e => {
                        console.log("data available after MediaRecorder.stop() called.")

                        const clipName = prompt("오디오 파일 제목을 입력하세요.", new Date())

                        const clipContainer = document.createElement('article')
                        const clipLabel = document.createElement('p')
                        const audio = document.createElement('audio')
                        const deleteButton = document.createElement('button')

                        clipContainer.classList.add('clip')
                        audio.setAttribute('controls', '')
                        deleteButton.innerHTML = "삭제"
                        clipLabel.innerHTML = clipName

                        clipContainer.appendChild(audio)
                        clipContainer.appendChild(clipLabel)
                        clipContainer.appendChild(deleteButton)
                        soundClips.appendChild(clipContainer)

                        audio.controls = true
                        const blob = new Blob(chunks, {
                            'type': 'audio/ogg codecs=opus'
                        })
                        chunks = []
                        const audioURL = URL.createObjectURL(blob)
                        audio.src = audioURL
                        console.log("recorder stopped")

                        deleteButton.onclick = e => {
                            evtTgt = e.target
                            evtTgt.parentNode.parentNode.removeChild(evtTgt.parentNode)
                        }
                    }

                    mediaRecorder.ondataavailable = e => {
                        chunks.push(e.data)
                    }
                })
                .catch(err => {
                    console.log('The following error occurred: ' + err)
                })
        }
    </script>
</body></html>
반응형

+ Recent posts