엑셀 마이크 입력값 사용가능한가요?

VBA
작성자
양송이
작성일
2021-10-05 15:58
조회
93
엑셀버전 : M365

운영체제 : 윈도우10

가능한지는 모르겠지만

웹캠 마이크로 입력된 소리의 데시벨을 데이터로 받아와서

일정 데시벨 이상이 되면 경고음이 울리게 만들고 싶은데 이런것도 엑셀에서 가능할까요?

전체 4

  • 2021-10-05 16:55
    채택된 답변

    VBA는 모르겠지만 C나 파이썬쓰면 쉽게 가능합니다. (물론 코딩을 모르실 경우 공부가 필요하겠지만요..)

    c# - Read microphone decibels and pitch/frequency - Stack Overflow

    public float rmsVal;
    public float dbVal;
    public float pitchVal;
    
    private const int QSamples = 1024;
    private const float RefValue = 0.1f;
    private const float Threshold = 0.02f;
    
    float[] _samples;
    private float[] _spectrum;
    private float _fSample;
    
    void Start()
    {
        _samples = new float[QSamples];
        _spectrum = new float[QSamples];
        _fSample = AudioSettings.outputSampleRate;
    }
    
    void Update()
    {
        AnalyzeSound();
    
        Debug.Log("RMS: " + rmsVal.ToString("F2"));
        Debug.Log(dbVal.ToString("F1") + " dB");
        Debug.Log(pitchVal.ToString("F0") + " Hz");
    }
    
    void AnalyzeSound()
    {
        GetComponent().GetOutputData(_samples, 0); // fill array with samples
        int i;
        float sum = 0;
        for (i = 0; i < QSamples; i++)
        {
            sum += _samples[i] * _samples[i]; // sum squared samples
        }
        rmsVal = Mathf.Sqrt(sum / QSamples); // rms = square root of average
        dbVal = 20 * Mathf.Log10(rmsVal / RefValue); // calculate dB
        if (dbVal < -160) dbVal = -160; // clamp it to -160dB min
                                        // get sound spectrum
        GetComponent().GetSpectrumData(_spectrum, 0, FFTWindow.BlackmanHarris);
        float maxV = 0;
        var maxN = 0;
        for (i = 0; i < QSamples; i++)
        { // find max 
            if (!(_spectrum[i] > maxV) || !(_spectrum[i] > Threshold))
                continue;
    
            maxV = _spectrum[i];
            maxN = i; // maxN is the index of max
        }
        float freqN = maxN; // pass the index to a float variable
        if (maxN > 0 && maxN < QSamples - 1)
        { // interpolate index using neighbours
            var dL = _spectrum[maxN - 1] / _spectrum[maxN];
            var dR = _spectrum[maxN + 1] / _spectrum[maxN];
            freqN += 0.5f * (dR * dR - dL * dL);
        }
        pitchVal = freqN * (_fSample / 2) / QSamples; // convert index to frequency
    }

     

     


    • 2021-10-05 16:58

      @더블유에이 님 감사합니다!! 그럼 c언어나 파이썬은 엑셀에서는 사용하지 못하는 거지요? 현재 만든 엑셀 프로그램에 기능을 추가하고 싶은거라 엑셀에서 실행이 되어야 해서요. ㅠㅠ


      • 2021-10-05 17:23

        @양송이 님 VBA로 끼얹어야하는데, 파이썬 간단한 코드는 엑셀에서 실행할 수 있습니다.

        공유하는 파일이 아니라면 .py 파일 형태로 읽어와서 실행할 수 있어요.

        유튜브에 검색하시면 많이 있을겁니다. 구현 레벨에 따라 달리지겠지만요


  • 2021-10-06 00:55
    Public Declare PtrSafe Function KernelBeep Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
    
    Sub SpeakDataTest()
        Dim iSoundValue As Long
        Dim iFrequecy As Long
        Dim iDuration As Long
        Dim cVoiceWord As String
        
        
        iDuration = 100 '// 0.1 sec
        cVoiceWord = "ok"
        
        For iFrequecy = 600 To 700 Step 25
        
           iSoundValue = Application.RandBetween(1, 10000)
           Call SpeakData(iSoundValue, iFrequecy, iDuration, cVoiceWord)
            
        Next
    
    
    End Sub
    
    Sub SpeakData(iSoundValue As Long, iFrequecy As Long, iDuration As Long, Optional cVoiceWord As String = "na")
        Select Case iSoundValue
        
            Case Is < 1000
                KernelBeep 4000, iDuration    ' frequency, duration
                If cVoiceWord <> "na" Then Application.Speech.Speak cVoiceWord, True
            
            Case Is < 3000
                KernelBeep iFrequecy, iDuration '// KernelBeep 600, 100 은 표준 beep
                KernelBeep iFrequecy, iDuration
                KernelBeep iFrequecy, iDuration
                
            Case Is >= 3000
                If cVoiceWord <> "na" Then Application.Speech.Speak cVoiceWord, True
                KernelBeep iFrequecy, iDuration
        End Select
    
    End Sub

     

    모듈에 위 소스를 복사후 실행해 보세요.
    영감을 얻으실 것 입니다.


전체 4,652
번호 카테고리 제목 작성자 작성일 추천 조회
공지사항 공지사항
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (9)
오빠두엑셀 | 2021.10.28 | 추천 15 | 조회 708
트로피 오빠두엑셀 2021.10.28 15 708
24168 VBA
New (문의) 번호가 같을경우 옆에 있는 셀의 값을 병합
ryan_cruze | 16:30 | 추천 0 | 조회 8
ryan_cruze 16:30 0 8
24166 기능/도구
New 질문있습니다.
최강씨맨 | 16:14 | 추천 0 | 조회 10
최강씨맨 16:14 0 10
24163 함수/공식
New 엑셀 특정 내용 추출하는 수식 질문드립니다. (2)
PAKSAW | 15:34 | 추천 0 | 조회 11
PAKSAW 15:34 0 11
24161 함수/공식
New 특정 날짜 값 찾기 (2)
ㄱ박민극 | 15:23 | 추천 -1 | 조회 22
ㄱ박민극 15:23 -1 22
24154 피벗테이블
New 설문조사 피벗테이블 구성이 어렵네요 첨부파일 (2)
가리 | 12:22 | 추천 0 | 조회 23
가리 12:22 0 23
24153 VBA
New 엑셀 검색 창 첨부파일 (2)
이혜 | 11:59 | 추천 0 | 조회 21
이혜 11:59 0 21
24148 피벗테이블
New 피벗테이블 형태의 데이터베이스 변환 (1)
이길호 | 10:34 | 추천 0 | 조회 25
이길호 10:34 0 25
파워쿼리/피벗
New Re:피벗테이블 형태의 데이터베이스 변환
Yukon | 16:08 | 추천 0 | 조회 5
Yukon 16:08 0 5
24140 VBA
New 특정 시트에 추출되어있는 값을 각각의 시트로 분류하려고합니다. 첨부파일 (1)
이치영 | 01:37 | 추천 0 | 조회 37
이치영 01:37 0 37
24135 VBA
New vlookup #N/A 에러가 나오는 경우 IF문은 어떻게.... (2)
툴잇지 with 우정기기 | 2021.11.29 | 추천 0 | 조회 50
툴잇지 with 우정기기 2021.11.29 0 50
24132 함수/공식
New 동적범위, 셀값을 시트명으로 인식하여 합계를 구하는것 첨부파일 (6) 답변완료
키큰아저씨 | 2021.11.29 | 추천 0 | 조회 49
키큰아저씨 2021.11.29 0 49
24129 VBA
New 직사각형 도형 삭제vba (2) 답변완료
H.B | 2021.11.29 | 추천 1 | 조회 33
H.B 2021.11.29 1 33
24126 VBA
New "요청한 레지스트리에 엑세스할 수 없습니다." 라는 에러때문에 진행이 안됩니다. (3)
볼펜수리공 | 2021.11.29 | 추천 0 | 조회 29
볼펜수리공 2021.11.29 0 29
24120 기능/도구
New 조건부서식으로 찾은 바탕색을 실제 엑셀 바탕색 컬러로 변경하고 싶습니다. 첨부파일 (3) 답변완료
glas**** | 2021.11.29 | 추천 0 | 조회 35
glas**** 2021.11.29 0 35
24117 함수/공식
New 맨 끝자리를 제외한 7자리 추출 첨부파일 (2) 답변완료
감사하모니카 | 2021.11.29 | 추천 0 | 조회 41
감사하모니카 2021.11.29 0 41
24116 VBA
New VBA 2007버전과 2021버전에서의 속도 차이가 많이 납니다. 해결방안이 있을까 해서요? 첨부파일 (2)
한정석 | 2021.11.29 | 추천 0 | 조회 45
한정석 2021.11.29 0 45
24113 함수/공식
New 조건 서식 질문입니다. 첨부파일 (1)
space | 2021.11.29 | 추천 0 | 조회 38
space 2021.11.29 0 38
24111 피벗테이블
New 피벗테이블 DAX함수 관련 문의
T첫 | 2021.11.29 | 추천 0 | 조회 24
T첫 2021.11.29 0 24
24106 함수/공식
New 엑셀에서 해당 날짜기간 동안을 찾아 날짜열에 각각 표기하는 방법 첨부파일 (5)
공수래 | 2021.11.29 | 추천 0 | 조회 40
공수래 2021.11.29 0 40
24099 함수/공식
New 입력한 값에 따라 IMAGE 자동입력 함수 문제 관련 (1)
유지연 | 2021.11.29 | 추천 0 | 조회 30
유지연 2021.11.29 0 30
24098 VBA
New 워드 Format(숫자, "#,###") (1) 답변완료
argus | 2021.11.28 | 추천 0 | 조회 38
argus 2021.11.28 0 38
24097 VBA
New 각각 형식이 다른 여러 시트에서 원하는 값들만 가져와서 한 시트에 보기 쉽게 합치고 싶습니다. 첨부파일 (1)
축전 | 2021.11.28 | 추천 0 | 조회 42
축전 2021.11.28 0 42
24096 VBA
New 엑셀 재고관리툴 만들기 VBA영상 시청중 오류 발생관련 문의입니다. 첨부파일
가을전어 | 2021.11.28 | 추천 0 | 조회 24
가을전어 2021.11.28 0 24
24093 기능/도구
New 작업표시줄 클릭으로 클립보드에 복사 문제 관련 (1)
어루 | 2021.11.28 | 추천 0 | 조회 21
어루 2021.11.28 0 21
24091 VBA
New 도와주세요! 뭐가 문제인지 못찾겠습니다.
y**** | 2021.11.28 | 추천 0 | 조회 40
y**** 2021.11.28 0 40
24089 VBA
New 엑셀 vlookup vba 문의드립니다. (4) 답변완료
ㅈㄱㄹ | 2021.11.28 | 추천 0 | 조회 48
ㅈㄱㄹ 2021.11.28 0 48
24088 함수/공식
New 개인별 회비 납부 현황에 따라 월별 납부액 결정 관련 함수 또는 VBA (미납, 매월 16일 이후 납부할 경우 월회비 10% 가산) 첨부파일 (5) 답변완료
007 | 2021.11.28 | 추천 0 | 조회 59
007 2021.11.28 0 59
24081 함수/공식
New 영문주소를 한글주소로 변경 희망합니다. (1)
루s cos 개인대행 | 2021.11.28 | 추천 0 | 조회 38
루s cos 개인대행 2021.11.28 0 38
24072 VBA
New 수식이 있는 데이터에서 매크로를 사용하여 다른시트에 결과값만 붙여넣고 싶습니다. 첨부파일 (6) 답변완료
호랑이파워 | 2021.11.28 | 추천 0 | 조회 59
호랑이파워 2021.11.28 0 59
24068 파워쿼리/피벗
New 파워쿼리 간단한 '값 바꾸기' 에 대해서 질문드립니다. 첨부파일 (3)
월마리아 | 2021.11.28 | 추천 0 | 조회 31
월마리아 2021.11.28 0 31
24065 피벗테이블
New 열과 행 바꾸는 쉬운 방법있나요? 첨부파일 (5) 답변완료
jyj6**** | 2021.11.27 | 추천 0 | 조회 56
jyj6**** 2021.11.27 0 56