summaryrefslogtreecommitdiff
path: root/Bus/IvyAudioMon/MeterDlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Bus/IvyAudioMon/MeterDlg.cpp')
-rw-r--r--Bus/IvyAudioMon/MeterDlg.cpp365
1 files changed, 0 insertions, 365 deletions
diff --git a/Bus/IvyAudioMon/MeterDlg.cpp b/Bus/IvyAudioMon/MeterDlg.cpp
deleted file mode 100644
index 1749e28..0000000
--- a/Bus/IvyAudioMon/MeterDlg.cpp
+++ /dev/null
@@ -1,365 +0,0 @@
-// MeterDlg.cpp : implementation file
-//
-
-#include "stdafx.h"
-#include <stdlib.h> // abs, __max
-#include <math.h>
-#include "Meter.h"
-#include "MeterDlg.h"
-#include "ParseCmdLine.h"
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif
-
-
-const char * CONVSTR( const CString& str )
-{
-#ifdef UNDER_CE
-
- static char buffer[4096];
- int len = str.GetLength();
- buffer[len] = '\0';
- if ( len )
- {
- int err = WideCharToMultiByte( CP_ACP, 0, str, len, buffer, 4096, NULL, NULL );
- if ( err == 0 )
- TRACE(TEXT("Error converting chars %d\n"),GetLastError());
- }
- return buffer;
-#else
- return (LPCSTR) str;
-#endif
-
-}
-/////////////////////////////////////////////////////////////////////////////
-// CAboutDlg dialog used for App About
-
-class CAboutDlg : public CDialog
-{
-public:
- CAboutDlg();
-
-// Dialog Data
- //{{AFX_DATA(CAboutDlg)
- enum { IDD = IDD_ABOUTBOX };
- //}}AFX_DATA
-
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CAboutDlg)
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //}}AFX_VIRTUAL
-
-// Implementation
-protected:
- //{{AFX_MSG(CAboutDlg)
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-};
-
-CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
-{
- //{{AFX_DATA_INIT(CAboutDlg)
- //}}AFX_DATA_INIT
-}
-
-void CAboutDlg::DoDataExchange(CDataExchange* pDX)
-{
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CAboutDlg)
- //}}AFX_DATA_MAP
-}
-
-BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
- //{{AFX_MSG_MAP(CAboutDlg)
- // No message handlers
- //}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-/////////////////////////////////////////////////////////////////////////////
-// CMeterDlg dialog
-
-CMeterDlg::CMeterDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CMeterDlg::IDD, pParent)
- , m_busnumber(_T(""))
-{
- //{{AFX_DATA_INIT(CMeterDlg)
- //}}AFX_DATA_INIT
- // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
-}
-
-void CMeterDlg::DoDataExchange(CDataExchange* pDX)
-{
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CMeterDlg)
- DDX_Control(pDX, IDC_PROGRESS, m_ctrlProgress);
- DDX_Control(pDX, IDC_PEEK, m_ctrlPeekValue);
- DDX_Text(pDX, IDC_BUS, m_busnumber);
- //}}AFX_DATA_MAP
-
-
-}
-
-BEGIN_MESSAGE_MAP(CMeterDlg, CDialog)
- //{{AFX_MSG_MAP(CMeterDlg)
- ON_WM_DESTROY()
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- //}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-/////////////////////////////////////////////////////////////////////////////
-// CMeterDlg message handlers
-
-BOOL CMeterDlg::OnInitDialog()
-{
- CDialog::OnInitDialog();
-
- // Add "About..." menu item to system menu.
-
- // IDM_ABOUTBOX must be in the system command range.
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
-
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
-
- // Set the icon for this dialog. The framework does this automatically
- // when the application's main window is not a dialog
- SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
- m_ctrlProgress.SetRange( 0 , 255 );
- m_ctrlPeekValue.SetRange( 0 , 255 );
-
- nb_buffers = 0;
- peekValue = 0.0;
- lastValue = 0.0;
- m_seuil = 15.0;
-
- openWaveDev();
-
- // parse command Line Info
- ParseCmdLine cmd;
- AfxGetApp()->ParseCommandLine( cmd );
-
- // Set Argument from Command Line
- m_seuil = cmd.m_seuil;
- m_busnumber = cmd.m_busNumber;
- bus = new Ivy( "IvyAudioMon","IvyAudioMon Ready",this,FALSE);
-
-// bus->BindMsg("(.*)", BUS_CALLBACK_OF(CTestDlg, IvyCallback ));
-
- //bus->BindMsg("^S( A=([0-9]+))?( B=([0-9]+))?",cb);
-
- // force bus start in case of start
- m_busnumber = bus->GetDomain( CONVSTR(m_busnumber) );
- bus->start(CONVSTR(m_busnumber));
-
-
- VERIFY(this->UpdateData(FALSE));
-
- return TRUE; // return TRUE unless you set the focus to a control
-}
-void CMeterDlg::OnApplicationConnected(IvyApplication *app)
-{
-// TRACE( "Application: %s ready",(LPCSTR)(app->GetName()) );
-}
-void CMeterDlg::OnApplicationDisconnected(IvyApplication *app)
-{
-// TRACE( "Application: %s bye",(LPCSTR)(app->GetName()) );
-}
-void CMeterDlg::OnOK()
-{
- VERIFY(this->UpdateData(TRUE));
- m_busnumber = bus->GetDomain( CONVSTR(m_busnumber) );
- if ( m_busnumber.FindOneOf(":") )
- {
- bus->stop();
- bus->start(CONVSTR(m_busnumber));
- }
- VERIFY(this->UpdateData(FALSE));
-
- // Do not close on return key
- return;
-
- // CDialog::OnOK(); // This will close the dialog and DoModal will return.
-}
-
-
-void CMeterDlg::OnDestroy()
-{
- bus->stop();
- delete bus;
- CDialog::OnDestroy();
-}
-
-void CMeterDlg::OnSysCommand(UINT nID, LPARAM lParam)
-{
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
-}
-
-// If you add a minimize button to your dialog, you will need the code below
-// to draw the icon. For MFC applications using the document/view model,
-// this is automatically done for you by the framework.
-
-void CMeterDlg::OnPaint()
-{
- if (IsIconic())
- {
- CPaintDC dc(this); // device context for painting
-
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
-
- // Center icon in client rectangle
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
-
- // Draw the icon
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
-}
-
-// The system calls this to obtain the cursor to display while the user drags
-// the minimized window.
-HCURSOR CMeterDlg::OnQueryDragIcon()
-{
- return (HCURSOR) m_hIcon;
-}
-
-
-/*
-* Callback function when WAVE input buffer is full
-*/
-void CALLBACK CMeterDlg::recordCallBack(HWAVEIN hWaveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
-{
- CMeterDlg* ctrl = (CMeterDlg*) dwInstance;
- ctrl->recordCB( hWaveIn, uMsg, dwInstance, dwParam1, dwParam2 );
-}
-void CALLBACK CMeterDlg::recordCB(HWAVEIN hWaveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
-{
- WAVEHDR *waveHeader = (WAVEHDR*)dwParam1;
- float lVal =0;
- switch ( uMsg )
- {
- case WIM_OPEN:
- TRACE("WIM_OPEN\n");
- break;
- case WIM_DATA:
- for ( DWORD i = 0; i < waveHeader->dwBytesRecorded; i++ )
- {
- //TRACE("WIM_DATA[%d]= %02x\n",i,waveHeader->lpData[i]);
- lVal += abs( (float)( unsigned char )waveHeader->lpData[i] - 127.0f) ;
- }
- lVal /= waveHeader->dwBytesRecorded ;
- lVal *= 2;
- TRACE("WIM_DATA %d %d %f\n",waveHeader->dwBufferLength,waveHeader->dwBytesRecorded,lVal);
- nb_buffers++;
- peekValue = max( peekValue, lVal );
- // moyenne sur 1 seconde
- if ( nb_buffers*BUFSIZE > 8000 )
- {
- nb_buffers = 0;
- peekValue = lVal;
- }
- m_ctrlPeekValue.SetPos( peekValue );
- m_ctrlProgress.SetPos(lVal);
- if ( lVal > m_seuil || lastValue > m_seuil )
- {
- lastValue = lVal;
- if ( lVal < m_seuil ) peekValue = lVal = 0.0;
- bus->SendMsg("AudioMonitor Change value=%.2f peak=%.2f",lVal,peekValue);
- }
- if (waveInUnprepareHeader(hWaveIn, &WaveHeader,sizeof(WAVEHDR)))
- {
- //cerr << "WAVE unprepare input buffer error\n";
- //exit(1);
- }
- WaveHeader.dwFlags = 0;
-
- if (waveInPrepareHeader(hWaveIn, &WaveHeader,sizeof(WAVEHDR)))
- {
- }
- if (waveInAddBuffer(hWaveIn, &WaveHeader,sizeof(WAVEHDR)))
- {
- }
- break;
- case WIM_CLOSE:
- TRACE("WIM_CLOSE\n");
- break;
- }
-}
-void CMeterDlg::openWaveDev()
-{
- MMRESULT Rc;
- WAVEFORMATEX PCMWaveFmtRecord;
-
- PCMWaveFmtRecord.wFormatTag = WAVE_FORMAT_PCM;
- PCMWaveFmtRecord.nChannels = 1;
- PCMWaveFmtRecord.nSamplesPerSec = 8000;
- PCMWaveFmtRecord.wBitsPerSample = 8;
- PCMWaveFmtRecord.nAvgBytesPerSec = PCMWaveFmtRecord.nSamplesPerSec
- * PCMWaveFmtRecord.wBitsPerSample / 8;
- PCMWaveFmtRecord.nBlockAlign = PCMWaveFmtRecord.nChannels *
- PCMWaveFmtRecord.wBitsPerSample / 8;
-
- Rc = waveInOpen(&hWaveIn, WAVE_MAPPER, &PCMWaveFmtRecord, (DWORD_PTR)CMeterDlg::recordCallBack, (DWORD_PTR)this, CALLBACK_FUNCTION);
- if (Rc)
- {
- }
- WaveHeader.dwBufferLength = BUFSIZE;
- WaveHeader.lpData = (LPSTR) (inbuf);
- WaveHeader.dwFlags = WaveHeader.reserved = 0;
- WaveHeader.dwLoops = 0;
- WaveHeader.lpNext = 0;
- Rc = waveInPrepareHeader(hWaveIn, &WaveHeader,
- sizeof(WAVEHDR));
- if (Rc)
- {
- waveInClose(hWaveIn);
- }
- Rc = waveInAddBuffer(hWaveIn, &WaveHeader,
- sizeof(WAVEHDR));
- if (Rc)
- {
- waveInClose(hWaveIn);
- }
-
-
- ResetEvent(recordDone);
-
- if (Rc = waveInStart(hWaveIn))
- {
- waveInClose(hWaveIn);
- }
-}
-