paul986 Δημοσ. 12 Μαρτίου 2005 Δημοσ. 12 Μαρτίου 2005 Ειχα μια "φλασια" (το συνηθιζω αυτο) και σκεφτικα να μετατρεψω την καρτα ηχου του Η/Υ μου σε παλμογραφο και γενητρια σηματων. Η γενητρια σηματων ειναι ευκολη υποθεση (το software για να τα παραγει το σημα το εχω ηδη ετοιμο, το hardware (ενισχυτης) εινα ευκολο να φτιαχτει με καποιες ελαχιστες γνωσεις στα ηλεκτρονικα). Ακομη χρειαζετε και ενα ρυθμιστη τασης και ενα προστατευτικο κυκλωμα στην εισοδο (οπου θα ειναι για τον παλμογραφο)αλλα αυτα ειναι επισης σχετικα ευκολο να γινουν. Αυτο που θελω να μαθω ειναι πως θα κανω εναν αλγοριθμο που θα διαβαζει τις τιμες απο την καρτα ηχου (σε realtime). ενα προγραμμα που διαβαζει τις τιμες απο την καρτα και τις γραφει σε ενα αρχειο ειναι ειναι κατι παραπανω απο αρκετο. Εγω γνωριζω μονο c++ αλλα αν καποιος εχει λυση γραμμενη σε java δε με χαλαει καθολου. Αν καποιος εχει καποια απορια ή θελει να μαθει κατι παραπανω για την κατασκευη ευχαριστος να βοηθησω, αλλα επειδη δεν εχω internet σπιτι μου η απαντηση μπορει να καθυστερηση λιγο παραπανω. :???:
Directx Δημοσ. 12 Μαρτίου 2005 Δημοσ. 12 Μαρτίου 2005 Χμ.. πριν μερικούς μήνες είχα ασχοληθεί με την συγκεκριμένη υπόθεση θέλοντας να καταγράψω την ακτινοβολία του κινητού μου οπότε συνέδεσα ένα πολύ ευαίσθητο μικρόφωνο στην κάρτα ήχου μου μετρώντας διάφορους ηχητικούς παλμούς της συσκευής (από τα σήματα σύνδεσης –όχι δεν είναι παράσιτα , μέχρι τον παλμό των κυκλωμάτων της), στα πλαίσια αυτά χρησιμοποίησα μια συλλογή από παλιά μεν αλλά λειτουργικότατα λογισμικά γραμμένα σε Visual Basic 3.0 (αν θυμάμαι καλά) που εξομοίωναν το output ενός παλμογράφου.. Θα ψάξω να τα βρω και να δω την ονομασία τους.. Υ.Γ. Συγχωρείστε μου τις όποιες προαναφερθείσες τεχνικές ανακρίβειες αλλά δεν είμαι ηλεκτρονικός
GrMikeD Δημοσ. 12 Μαρτίου 2005 Δημοσ. 12 Μαρτίου 2005 Xreiazesai auto: http://java.sun.com/products/java-media/jmf/ Einai i prospatheia tis Java gia low level access se kartes ixou. To kako einai oti epeidi upotithetai oti prepei na einai cross-platform, einai arketa buggy. Polloi ftiaxnoun DLLs gia na ekmetalevontai to API twn windows kai tis xrisimopoioun apo Java mesw JNI.
Directx Δημοσ. 12 Μαρτίου 2005 Δημοσ. 12 Μαρτίου 2005 Λοιπόν, ασχολήθηκα λίγο με το Multimedia API των Windows (ας είναι καλά το MSDN) κατασκευάζοντας ένα απλό utility που παρουσιάζει πώς να βρεις κάθε εγκατεστημένο οδηγό εγγραφής ήχου, να τον ενεργοποιήσεις για εγγραφή PCM στα 8kHz, να αποθηκεύσεις & να παρουσιάσεις αυτά τα στοιχεία σε hexadecimal αλλά και decimal μορφή. Η εφαρμογή είναι πολύ απλή και ενδεχομένως να έχει λαθάκια (πρώτη φορά ασχολούμαι με αυτό τον τομέα), δεν κάνω έλεγχο στο while(!kbhit()) loop των functions όμως ελέγχω το WavHeader.dwFlags για το WHDR_DONE bit! Διαβάζω κάθε 100ns το πρώτο byte του pbyAudioData όπου αποθηκεύω τα στοιχεία αν και το ίδιο είναι αρκετά μεγαλύτερο (8kb) μιας και ακολουθώ κατά γράμμα ( ; ) τις οδηγίες για το σωστό utilization PCM WAVE input της Microsoft.. Η εφαρμογή επιστρέφει 0x80 ( 128 ) ως μέση τιμή, 0 ως ελάχιστη και 0xFF (255) ως μάξιμουμ (standards οριζόμενα από την MS σχετικά με το audio level των PCM WAVE) και τουλάχιστον οι τιμές (φαίνεται πως) «τρέχουν» σωστά στις δοκιμές με το μικρόφωνο μου.. Η ρουτίνα εγγραφής των audio level τιμών σε αρχείο κειμένου (DUMP.TXT), είναι ρυθμισμένη ώστε στα 10kb να σβήνει το αρχείο ώστε να μην υπάρξει Overflow.. Για έξοδο από το loop πατήστε οποιοδήποτε πλήκτρο. Υ.Γ. Η εφαρμογή δοκιμάσθηκε σε Windows XP, Sound-Blaster AWE 64 (!) και έγινε compile με τον Borland C/C++ Builder 6.0. Ελπίζω να φανεί χρήσιμη (αν και χρειάζεται ένα γερό debugging για σιγουριά). Καλή τύχη! > //-WAVE Level Audio Recording Utility by directx------------------------------------------ #include <windows.h> #include <mmsystem.h> #include <stdio.h> #include <conio.h> #include <io.h> #pragma hdrstop // Remove this line if non C/C++ Builder compiler #define _QUIT_ printf("\n\nHit any key to quit.."); getch(); ExitProcess(0); //--------------------------------------------------------------------------- int nDevices, nDeviceIndex; FILE *Stream; WAVEINCAPS WavInCaps; WAVEFORMATEX WFEX; HWAVEIN hWavIn; WAVEHDR WavHeader; MMRESULT mmSuccess; BYTE *pbyAudioData; //--------------------------------------------------------------------------- BOOL _WriteData(char *pszFilename,BYTE,long); #pragma argsused // Remove this line if non C/C++ Builder compiler int main(int argc, char* argv[]) { // Are there any Wave Input devices installed? .. if(!(nDevices=waveInGetNumDevs())) { // No! printf(" SYSTEM ERROR: No \"Wave Input\" devices installed!\n"); return -1; } printf(" \"Wave Input\" Devices found: %.2d\n\n",nDevices); // ..Yes! Let's query for available Audio Input devices for(nDeviceIndex=1;nDeviceIndex<=nDevices;nDeviceIndex++) { // ..Get Wave Input device information capabilities printf(" %.2d] ",nDeviceIndex); // nDeviceIndex-1 *it's more rational to assume counting from 1 rather 0* if(waveInGetDevCaps(nDeviceIndex-1,&WavInCaps,sizeof(WavInCaps))!=MMSYSERR_NOERROR) { // Error! printf("Cannot query device information!\n"); continue; } // ..Show device name (truncated to 15 characters) and Channel Support printf("%.30s %s\n",WavInCaps.szPname, (WavInCaps.wChannels==2)?"Stereo":"Mono"); } // ..Ask user which Wave Input device want's to use printf("\n Device ID or Q to quit] "); for(; { nDeviceIndex = getch(); if(nDeviceIndex=='Q' || nDeviceIndex=='q') { ExitProcess(-2); } nDeviceIndex-='0'; if(nDeviceIndex>nDevices || nDeviceIndex<nDevices) { putchar(7); /* Beep */ } else { printf("%c\n",nDeviceIndex+='0'); break; } } // ..Prepare selected Wave Input device for recording nDeviceIndex-='0'; nDeviceIndex--; ZeroMemory(&WFEX,sizeof(WFEX)); WFEX.wFormatTag = WAVE_FORMAT_PCM; // Standard WAV PCM format WFEX.nChannels = 1; // Monophonic WFEX.nSamplesPerSec = 800; // 8.0kHz WFEX.wBitsPerSample = 8; // 8 bits // ..calculated as indicated on MSDN reference for WAVE PCM WFEX.nBlockAlign = (WFEX.nChannels*WFEX.nSamplesPerSec)/8; WFEX.nAvgBytesPerSec = WFEX.nSamplesPerSec*WFEX.nBlockAlign; if((mmSuccess=waveInOpen(&hWavIn,nDeviceIndex,&WFEX,0, NULL,CALLBACK_NULL)) !=MMSYSERR_NOERROR) { printf(" SYSTEM ERROR: Cannot open selected device!\n"); printf(" EXCUSE: "); switch(mmSuccess) { case MMSYSERR_ALLOCATED: printf("Specified resource is already allocated\n"); break; case MMSYSERR_BADDEVICEID: printf("Specified device identifier is out of range"); break; case MMSYSERR_NODRIVER: printf("No device driver is present"); break; case MMSYSERR_NOMEM: printf("Unable to allocate or lock memory"); break; case WAVERR_BADFORMAT: printf("Attempted to open with an unsupported waveform-audio format"); break; default: printf("Unknown error id: %X\n",mmSuccess); break; } _QUIT_ } // ..Allocate enough memory to hold audio data if((pbyAudioData=(BYTE*)malloc(WFEX.nAvgBytesPerSec))==NULL) { waveInClose(hWavIn); printf(" SYSTEM ERROR: Not enough memory to hold audio data!\n"); _QUIT_ } ZeroMemory(pbyAudioData,WFEX.nAvgBytesPerSec); // ..Clear any previous saved DUMP.TXT if(!access("DUMP.TXT",0)) { if(unlink("DUMP.TXT")==-1) { printf(" SYSTEM ERROR: Cannot erase previous session DUMP.TXT!\n"); free(pbyAudioData); waveInClose(hWavIn); _QUIT_ } } ZeroMemory(&WavHeader,sizeof(WavHeader)); WavHeader.lpData = pbyAudioData; WavHeader.dwBufferLength = WFEX.nAvgBytesPerSec; printf("\n *Press any ket to begin Audio Input ..*"); getch(); printf("\n\n"); while(!kbhit()) { // ..did your audio driver finished processing audio data successfully? if(WavHeader.dwFlags & WHDR_DONE) { printf("0x%X (%.2d)\n",pbyAudioData[0],pbyAudioData[0]); _WriteData("DUMP.TXT", pbyAudioData[0],10000); } /* ..prepare WavHeader for audio recording -> ^ send WavHeader to driver (waveInAddBuffer) -> | beging recording (wavInStart) -> | Wait for some ns for the driver to complete -> | Reset WavHeader data for next recording -> | Begin recording---------------------------------+ */ waveInPrepareHeader(hWavIn,&WavHeader,sizeof(WavHeader)); waveInAddBuffer(hWavIn,&WavHeader,sizeof(WavHeader)); waveInStart(hWavIn); Sleep(100); waveInReset(hWavIn); waveInStart(hWavIn); } // ..free allocated resources! waveInReset(hWavIn); waveInStop(hWavIn); waveInClose(hWavIn); free(pbyAudioData); // ..Hit a key to quit printf(" Program finished, hit any key to quit!!"); getch(); return 0; } //--------------------------------------------------------------------------- BOOL _WriteData(char *pszFilename,BYTE byValue,long lMaxLen) { // DONE: Write BYTE to pszFilename FILE *Stream; long lFileLen; /* If file exists switch to append else use create (write) mode, if file length > lMaxLen switch to write mode (truncation) */ if((Stream=fopen(pszFilename,(!access(pszFilename,0))?"ab":"wb"))==NULL) { return FALSE; } if((lFileLen=filelength(fileno(Stream)))==-1L) { fclose(Stream); return FALSE; } if(lFileLen>lMaxLen) { if((Stream=freopen(pszFilename,"wb",Stream))==NULL) { fclose(Stream); return FALSE; } } // write data & verify write success.. if(fprintf(Stream,"0x%X %d\n",byValue,byValue)==EOF) { fclose(Stream); return FALSE; } // free stream and return success!! fclose(Stream); return TRUE; }
Nemo Δημοσ. 12 Μαρτίου 2005 Δημοσ. 12 Μαρτίου 2005 http://www.web-ee.com/Downloads/Sound%20Cards/sound_card.htm Wave Tools 1.0 by Paul Kellett WaveTools is a suite of real-time audio analysis tools for high quality measurements: Spectrum analyzer and oscilloscope (with calibration in dB or Volts), Signal Generator (tones plus pink and white noise) and Audio Meter / Vectorscope. Although the program was written for Windows 3.1, it runs fine on XP as well. Features include: * Oscilloscope - a * Spectrum Analyzer - * Audio Meter - * Signal Generator - ===================================================== Spectra Plus - PC-based Advanced Signal Analysis. SpectraPLUS is a 32 bit Windows application that allows you to perform complex audio signal analysis without the use of any other hardware other than your Windows compatible sound card. Record, playback and post process WAV files Run real-time, single or dual channel analysis of live input Five excellent displays Dual-channel processing features (e.g),Transfer Functions Narrowband spectrum or 1/1and 1/3 Octave scaling Full featured signal generator ================================================ Oscilloscope for Windows v. 2.51 Oscilloscope for Windows uses the sound card as an analog-to-digital converter, providing complete oscilloscope and spectrum analyzer functionality in Windows95 environment. Specifications: - Dual trace digital storage oscilloscope with spectrum analyzer - 20 Hz - 20 kHz bandwidth - 50 ms buffer length - data export to Windows clipboard or to file (text format) ===================================================== PC-DSP Standard Edition from DSP Solutions PC-DSP is an interactive, menu-driven software package used for * discrete-time and continuous-time waveform synthesis using a variety of methods, * basic signal operations (arithmetic, nonlinear, and statistical functions), fast Fourier transforms (forward & inverse transforms, window functions), * convolution and correlation functions, * solution of difference equations, * analysis and design of IIR and FIR filters, * digital filter simulation and code generation, * power spectrum estimation using classical and modern techniques. It is quite simple and straightforward to use, and yet powerful and extensible enough to be used by practicing engineers as well as students of digital signal processing. ===================================================== HpW Works V2.70 FFT Spectrum Analyzer for MS Windows (Win3.1, Win3.11, Win95 and NT) Allows stereo sampling from : * PC Sound card or/and SPDIF I/O PC board * Wave file * Text file with various data formats * Internal test generator * External ADS hardware system (Burr Brown) Various features : * MDI interface allows multiple opened FFT Windows * Production version supports 1'048'576 FFT data points * X-Axis linear or logarithmic * Y-Axis 1-240 dB span * Stereo FFT spectrum * Data cursor on FFT spectrum grid * Timecode information on wave and text files * History function are implemented : Average & count limit, Decay, Peak * Save/keep of FFT spectrum * FFT engine is 64 bit complex and 1024 FFT points runs on a 90 MHz Pentium in 10 ms * Each FFT run it's harmonic data window with DR, SNR, THD, THD+N, Noise Floor and SFDR * Special clipboard copy with custom picture size * Coherent 16/20/24 bit stereo wave generator * Dump folder tree for snapshot measurement for various data types & http://www.hitsquad.com/smm/win95/OSCILLOSCOPES/
paul986 Δημοσ. 15 Μαρτίου 2005 Μέλος Δημοσ. 15 Μαρτίου 2005 Η σελιδα http://www.web-ee.com/ "σκιζει". Εχει οτι μπορει να χρειαστει καποιος πανω στα ηλεκτρονικα κυκλωματα. Αλλα επειδη το site ειναι μεγαλο και με πολλα links μηπως μπορει καποιος να μου πει που θα βρω το ηλεκτρονικο σχεδιο για να φτιαξω το προστατευτικο κυκλωμα και διαιρετη τασης(εισοδος) καθως και το ενισχυτικο κυκλωμα (εξοδος). Γνωριζω βασικα πραγματα στα ηλεκτρονικα και δυσκολευομαι να βγαλω ακρη διοτι εχει πολλα εγγραφα τα οποια ειναι πολυ εξεδεικευμενα(θα μπορουσα με τις γνωσεις που εχω να το φτιαξω αλλα δεν θα ειμαι σιγουρος 100% για το αποτελεσμα οποτε το αφηνω στους ειδεικους ). Το ξερω οτι αυτο που ζηταω δεν εχει σχεση με προγραμματισμο αλλα εχει αμεση σχεση με το θεμα γι 'αυτο το αναφερω εδω. ;-)
mojiro Δημοσ. 23 Μαρτίου 2005 Δημοσ. 23 Μαρτίου 2005 http://www.un4seen.com/bass.html σου παρεχει πιο ευκολη προσβαση στην καρτα ηχου μεσω dsound. δεν γνωριζω αν μπορει να φτασει τοσο κοντα οσο θελετε αλλα ειναι κορυφαιο-ευκολο, μεσα σε μια βδομαδα εφτιαξα την βαση για προγραμμα dj-2καναλια με γραφικα EQ σε vbasic6
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.