R
r2d2droids
Guest
hi visiem,
i sūtīt analog audio signālu izmantojot pic (A / D modulis), izmantojot sci uz FT232 čipu.Pēc tam es gribu uzrakstīt šo ciparu signālus noteiktā buferis un pēc tam, kad buferi piepilda, sūta signālus audio ierīci atskaņošanai.
Es atklāju avota kodu, kas var ierakstīt un atskaņot viļņa, izmantojot mikrofonu.bet es couldnt pielāgot šo kodu uz manu projektu.
kods ir redzams zemāk:
//------------------------------------------------ ---------------------------
# Ietvert <vcl\vcl.h>
# Pragma hdrstop
# Ietver "WaveformAPI.h"
//------------------------------------------------ ---------------------------
# Pragma resurss "*. DFM"
TForm1 * Form1;
//------------------------------------------------ ---------------------------
/************************************************* ******************** \
* WaveHeader (WAVEHDR) iesaiņojuma funkciju
\ ************************************************* ********************/
bool WaveMakeHeader (neparakstīta ilgi ulSize, HGLOBAL & HData, HGLOBAL & HWaveHdr,
LPSTR & lpData, LPWAVEHDR & lpWaveHdr)
(
HData = GlobalAlloc (GMEM_MOVEABLE | GMEM_SHARE, ulSize);
ja ()! HData atgriezties viltus;
lpData = (LPSTR) GlobalLock (HData);
if (! lpData)
(
GlobalFree (HData);
atgriezties viltus;
)
HWaveHdr = GlobalAlloc (GMEM_MOVEABLE | GMEM_SHARE, sizeof (WAVEHDR));
if (! HWaveHdr)
(
GlobalUnlock (HData);
GlobalFree (HData);
atgriezties viltus;
)
lpWaveHdr = (LPWAVEHDR) GlobalLock (HWaveHdr);
if (! lpWaveHdr)
(
GlobalUnlock (HWaveHdr);
GlobalFree (HWaveHdr);
GlobalUnlock (HData);
GlobalFree (HData);
atgriezties viltus;
)
ZeroMemory (lpWaveHdr, sizeof (WAVEHDR));
lpWaveHdr-> lpData = lpData;
lpWaveHdr-> dwBufferLength = ulSize;
atgriezties true;
)
//------------------------------------------------ ---------------------------
par spēkā neesošu WaveFreeHeader (HGLOBAL & HData, HGLOBAL & HWaveHdr)
(
GlobalUnlock (HWaveHdr);
GlobalFree (HWaveHdr);
GlobalUnlock (HData);
GlobalFree (HData);
)
//------------------------------------------------ ---------------------------
/************************************************* ******************** \
* WaveIn (ieraksts) iesaiņojuma funkciju
\ ************************************************* ********************/
bool WaveRecordOpen (LPHWAVEIN lphwi, HWND Hwnd, int nChannels,
ilgi lFrequency, int nBits)
(
WAVEFORMATEX wfx;
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = (WORD) nChannels;
wfx.nSamplesPerSec = (DWORD) lFrequency;
wfx.wBitsPerSample = (WORD) nBits;
wfx.nBlockAlign = (WORD) ((wfx.nChannels * wfx.wBitsPerSample) /
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Atdzist" border="0" />
;
wfx.nAvgBytesPerSec = (wfx.nSamplesPerSec * wfx.nBlockAlign);
wfx.cbSize = 0;
MMRESULT rezultāts = waveInOpen (lphwi, WAVE_MAPPER, un wfx (garš) Hwnd, NULL,
CALLBACK_WINDOW);
ja (rezultāts == MMSYSERR_NOERROR) atgriezties true;
atgriezties viltus;
)
//------------------------------------------------ ---------------------------
bool WaveRecordBegin (HWAVEIN DDI, LPWAVEHDR & lpWaveHdr)
(
MMRESULT rezultāts = waveInPrepareHeader (DDI, lpWaveHdr, sizeof (WAVEHDR));
ja (rezultāts == MMSYSERR_NOERROR)
(
MMRESULT rezultāts = waveInAddBuffer (DDI, lpWaveHdr, sizeof (WAVEHDR));
ja (rezultāts == MMSYSERR_NOERROR)
(
MMRESULT rezultāts = waveInStart (DDI);
ja (rezultāts == MMSYSERR_NOERROR) atgriezties true;
)
)
atgriezties viltus;
)
//------------------------------------------------ ---------------------------
par spēkā neesošu WaveRecordEnd (HWAVEIN DDI, LPWAVEHDR & lpWaveHdr)
(
waveInStop (DDI);
waveInReset (DDI);
waveInUnprepareHeader (DDI, lpWaveHdr, sizeof (WAVEHDR));
)
//------------------------------------------------ ---------------------------
par spēkā neesošu WaveRecordClose (HWAVEIN DDI)
(
waveInReset (DDI);
waveInClose (DDI);
)
//------------------------------------------------ ---------------------------
/************************************************* ******************** \
* WaveOut (atskaņošana) iesaiņojuma funkciju
\ ************************************************* ********************/
bool WavePlayOpen (LPHWAVEOUT lphwo, HWND Hwnd, int nChannels,
ilgi lFrequency, int nBits)
(
WAVEFORMATEX wfx;
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = (WORD) nChannels;
wfx.nSamplesPerSec = (DWORD) lFrequency;
wfx.wBitsPerSample = (WORD) nBits;
wfx.nBlockAlign = (WORD) ((wfx.nChannels * wfx.wBitsPerSample) /
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Atdzist" border="0" />
;
wfx.nAvgBytesPerSec = (wfx.nSamplesPerSec * wfx.nBlockAlign);
wfx.cbSize = 0;
MMRESULT rezultāts = waveOutOpen (lphwo, WAVE_MAPPER, un wfx (garš) Hwnd, NULL,
CALLBACK_WINDOW);
ja (rezultāts == MMSYSERR_NOERROR) atgriezties true;
atgriezties viltus;
)
//------------------------------------------------ ---------------------------
bool WavePlayBegin (HWAVEOUT hwo, LPWAVEHDR & lpWaveHdr)
(
MMRESULT rezultāts = waveOutPrepareHeader (hwo, lpWaveHdr, sizeof (WAVEHDR));
ja (rezultāts == MMSYSERR_NOERROR)
(
MMRESULT rezultāts = waveOutWrite (hwo, lpWaveHdr, sizeof (WAVEHDR));
ja (rezultāts == MMSYSERR_NOERROR) atgriezties true;
)
atgriezties viltus;
)
//------------------------------------------------ ---------------------------
par spēkā neesošu WavePlayEnd (HWAVEOUT hwo, LPWAVEHDR & lpWaveHdr)
(
waveOutReset (hwo);
waveOutUnprepareHeader (hwo, lpWaveHdr, sizeof (WAVEHDR));
)
//------------------------------------------------ ---------------------------
par spēkā neesošu WavePlayClose (HWAVEOUT hwo)
(
waveOutReset (hwo);
waveOutClose (hwo);
)
//------------------------------------------------ ---------------------------/************************************************* ******************** \
* Piemērs izmantošana ...
\ ************************************************* ********************/
__fastcall TForm1: TForm1 (TComponent * Īpašnieks)
: TForm (Īpašnieks)
(
ulSize = 1000000;
FAllocated = false;
FRecording = false;
FPlaying = false;
TrackBar1-> max = 0xFFFF;
TrackBar1-> Frekvenču = 1000;
DWORD current_volume;
waveOutGetVolume (0 & current_volume);
TrackBar1-> nostāja = TrackBar1-> Max - LOWORD (current_volume);
)
//------------------------------------------------ ---------------------------
__fastcall TForm1:: ~ TForm1 ()
(
ja (FAllocated) WaveFreeHeader (HData, HWaveHdr);
ja (FRecording) WaveRecordClose (DDI);
ja (FPlaying) WavePlayClose (hwo);
)
//------------------------------------------------ ---------------------------
spēkā __fastcall TForm1: RecordButtonClick (TObject * Sender)
(
ja (WaveRecordOpen (un DDI, rokturis, 2, 44100, 16))
(
ja (WaveMakeHeader (ulSize, HData, HWaveHdr, lpData, lpWaveHdr))
(
FAllocated = true;
ja (WaveRecordBegin (DDI, lpWaveHdr))
(
FRecording = true;
Caption = "reģistrēšana ...";
Shape1-> Brush-> Color clRed =;
StopButton-> Enabled = true;
RecordButton-> Enabled = false;
)
)
)
)
//------------------------------------------------ ---------------------------
spēkā __fastcall TForm1: StopButtonClick (TObject * Sender)
(
ja (FRecording)
(
WaveRecordEnd (DDI, lpWaveHdr);
FRecording = false;
)
ja (FPlaying)
(
WavePlayEnd (hwo, lpWaveHdr);
FPlaying = false;
Shape2-> Brush-> Color = clBlack;
StopButton-> Enabled = false;
)
)
//------------------------------------------------ ---------------------------
spēkā __fastcall TForm1: MMWimData (TMessage & Ziņu)
(
Caption = "Parakstīta ierakstu";
ja (FRecording) WaveRecordEnd (DDI, lpWaveHdr);
WaveRecordClose (DDI);
ja (WavePlayOpen (& hwo, rokturis, 2, 44100, 16))
(
ShowMessage ("Noklikšķiniet uz Labi, lai sāktu atskaņošanu! Ja jūs redzēt šo"
"Ziņojumu, pirms jūs noklikšķinājāt apstādināšanas pogu, tad"
"Bufera beidzās (pieaugums ulSize ).");
ja (WavePlayBegin (hwo, lpWaveHdr))
(
FPlaying = true;
Caption = "Spēlējot ...";
Shape1-> Brush-> Color = clBlack;
Shape2-> Brush-> Color = clGreen;
)
)
)
//------------------------------------------------ ---------------------------
spēkā __fastcall TForm1: MMWomDone (TMessage & Ziņu)
(
Caption = "Parakstīta spēlē";
WavePlayClose (hwo);
RecordButton-> Enabled = true;
StopButton-> Enabled = false;
Shape2-> Brush-> Color = clBlack;
)
//------------------------------------------------ ---------------------------
spēkā __fastcall TForm1: TrackBar1Change (TObject * Sender)
(
DWORD new_volume =
(DWORD) MAKEWPARAM (TrackBar1-> Max - TrackBar1-> nostāja,
TrackBar1-> Max - TrackBar1-> nostāja);
waveOutSetVolume ((HWAVEOUT) WAVE_MAPPER, new_volume);
)
//------------------------------------------------ ---------------------------Vai kāds zina, kā pielāgot šajā avota kodu uz manu projektu, vai varat parādīt man citu audio steraming projekta pirmkoda caur usb?
thx ...
i sūtīt analog audio signālu izmantojot pic (A / D modulis), izmantojot sci uz FT232 čipu.Pēc tam es gribu uzrakstīt šo ciparu signālus noteiktā buferis un pēc tam, kad buferi piepilda, sūta signālus audio ierīci atskaņošanai.
Es atklāju avota kodu, kas var ierakstīt un atskaņot viļņa, izmantojot mikrofonu.bet es couldnt pielāgot šo kodu uz manu projektu.
kods ir redzams zemāk:
//------------------------------------------------ ---------------------------
# Ietvert <vcl\vcl.h>
# Pragma hdrstop
# Ietver "WaveformAPI.h"
//------------------------------------------------ ---------------------------
# Pragma resurss "*. DFM"
TForm1 * Form1;
//------------------------------------------------ ---------------------------
/************************************************* ******************** \
* WaveHeader (WAVEHDR) iesaiņojuma funkciju
\ ************************************************* ********************/
bool WaveMakeHeader (neparakstīta ilgi ulSize, HGLOBAL & HData, HGLOBAL & HWaveHdr,
LPSTR & lpData, LPWAVEHDR & lpWaveHdr)
(
HData = GlobalAlloc (GMEM_MOVEABLE | GMEM_SHARE, ulSize);
ja ()! HData atgriezties viltus;
lpData = (LPSTR) GlobalLock (HData);
if (! lpData)
(
GlobalFree (HData);
atgriezties viltus;
)
HWaveHdr = GlobalAlloc (GMEM_MOVEABLE | GMEM_SHARE, sizeof (WAVEHDR));
if (! HWaveHdr)
(
GlobalUnlock (HData);
GlobalFree (HData);
atgriezties viltus;
)
lpWaveHdr = (LPWAVEHDR) GlobalLock (HWaveHdr);
if (! lpWaveHdr)
(
GlobalUnlock (HWaveHdr);
GlobalFree (HWaveHdr);
GlobalUnlock (HData);
GlobalFree (HData);
atgriezties viltus;
)
ZeroMemory (lpWaveHdr, sizeof (WAVEHDR));
lpWaveHdr-> lpData = lpData;
lpWaveHdr-> dwBufferLength = ulSize;
atgriezties true;
)
//------------------------------------------------ ---------------------------
par spēkā neesošu WaveFreeHeader (HGLOBAL & HData, HGLOBAL & HWaveHdr)
(
GlobalUnlock (HWaveHdr);
GlobalFree (HWaveHdr);
GlobalUnlock (HData);
GlobalFree (HData);
)
//------------------------------------------------ ---------------------------
/************************************************* ******************** \
* WaveIn (ieraksts) iesaiņojuma funkciju
\ ************************************************* ********************/
bool WaveRecordOpen (LPHWAVEIN lphwi, HWND Hwnd, int nChannels,
ilgi lFrequency, int nBits)
(
WAVEFORMATEX wfx;
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = (WORD) nChannels;
wfx.nSamplesPerSec = (DWORD) lFrequency;
wfx.wBitsPerSample = (WORD) nBits;
wfx.nBlockAlign = (WORD) ((wfx.nChannels * wfx.wBitsPerSample) /
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Atdzist" border="0" />
;
wfx.nAvgBytesPerSec = (wfx.nSamplesPerSec * wfx.nBlockAlign);
wfx.cbSize = 0;
MMRESULT rezultāts = waveInOpen (lphwi, WAVE_MAPPER, un wfx (garš) Hwnd, NULL,
CALLBACK_WINDOW);
ja (rezultāts == MMSYSERR_NOERROR) atgriezties true;
atgriezties viltus;
)
//------------------------------------------------ ---------------------------
bool WaveRecordBegin (HWAVEIN DDI, LPWAVEHDR & lpWaveHdr)
(
MMRESULT rezultāts = waveInPrepareHeader (DDI, lpWaveHdr, sizeof (WAVEHDR));
ja (rezultāts == MMSYSERR_NOERROR)
(
MMRESULT rezultāts = waveInAddBuffer (DDI, lpWaveHdr, sizeof (WAVEHDR));
ja (rezultāts == MMSYSERR_NOERROR)
(
MMRESULT rezultāts = waveInStart (DDI);
ja (rezultāts == MMSYSERR_NOERROR) atgriezties true;
)
)
atgriezties viltus;
)
//------------------------------------------------ ---------------------------
par spēkā neesošu WaveRecordEnd (HWAVEIN DDI, LPWAVEHDR & lpWaveHdr)
(
waveInStop (DDI);
waveInReset (DDI);
waveInUnprepareHeader (DDI, lpWaveHdr, sizeof (WAVEHDR));
)
//------------------------------------------------ ---------------------------
par spēkā neesošu WaveRecordClose (HWAVEIN DDI)
(
waveInReset (DDI);
waveInClose (DDI);
)
//------------------------------------------------ ---------------------------
/************************************************* ******************** \
* WaveOut (atskaņošana) iesaiņojuma funkciju
\ ************************************************* ********************/
bool WavePlayOpen (LPHWAVEOUT lphwo, HWND Hwnd, int nChannels,
ilgi lFrequency, int nBits)
(
WAVEFORMATEX wfx;
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = (WORD) nChannels;
wfx.nSamplesPerSec = (DWORD) lFrequency;
wfx.wBitsPerSample = (WORD) nBits;
wfx.nBlockAlign = (WORD) ((wfx.nChannels * wfx.wBitsPerSample) /
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Atdzist" border="0" />
;
wfx.nAvgBytesPerSec = (wfx.nSamplesPerSec * wfx.nBlockAlign);
wfx.cbSize = 0;
MMRESULT rezultāts = waveOutOpen (lphwo, WAVE_MAPPER, un wfx (garš) Hwnd, NULL,
CALLBACK_WINDOW);
ja (rezultāts == MMSYSERR_NOERROR) atgriezties true;
atgriezties viltus;
)
//------------------------------------------------ ---------------------------
bool WavePlayBegin (HWAVEOUT hwo, LPWAVEHDR & lpWaveHdr)
(
MMRESULT rezultāts = waveOutPrepareHeader (hwo, lpWaveHdr, sizeof (WAVEHDR));
ja (rezultāts == MMSYSERR_NOERROR)
(
MMRESULT rezultāts = waveOutWrite (hwo, lpWaveHdr, sizeof (WAVEHDR));
ja (rezultāts == MMSYSERR_NOERROR) atgriezties true;
)
atgriezties viltus;
)
//------------------------------------------------ ---------------------------
par spēkā neesošu WavePlayEnd (HWAVEOUT hwo, LPWAVEHDR & lpWaveHdr)
(
waveOutReset (hwo);
waveOutUnprepareHeader (hwo, lpWaveHdr, sizeof (WAVEHDR));
)
//------------------------------------------------ ---------------------------
par spēkā neesošu WavePlayClose (HWAVEOUT hwo)
(
waveOutReset (hwo);
waveOutClose (hwo);
)
//------------------------------------------------ ---------------------------/************************************************* ******************** \
* Piemērs izmantošana ...
\ ************************************************* ********************/
__fastcall TForm1: TForm1 (TComponent * Īpašnieks)
: TForm (Īpašnieks)
(
ulSize = 1000000;
FAllocated = false;
FRecording = false;
FPlaying = false;
TrackBar1-> max = 0xFFFF;
TrackBar1-> Frekvenču = 1000;
DWORD current_volume;
waveOutGetVolume (0 & current_volume);
TrackBar1-> nostāja = TrackBar1-> Max - LOWORD (current_volume);
)
//------------------------------------------------ ---------------------------
__fastcall TForm1:: ~ TForm1 ()
(
ja (FAllocated) WaveFreeHeader (HData, HWaveHdr);
ja (FRecording) WaveRecordClose (DDI);
ja (FPlaying) WavePlayClose (hwo);
)
//------------------------------------------------ ---------------------------
spēkā __fastcall TForm1: RecordButtonClick (TObject * Sender)
(
ja (WaveRecordOpen (un DDI, rokturis, 2, 44100, 16))
(
ja (WaveMakeHeader (ulSize, HData, HWaveHdr, lpData, lpWaveHdr))
(
FAllocated = true;
ja (WaveRecordBegin (DDI, lpWaveHdr))
(
FRecording = true;
Caption = "reģistrēšana ...";
Shape1-> Brush-> Color clRed =;
StopButton-> Enabled = true;
RecordButton-> Enabled = false;
)
)
)
)
//------------------------------------------------ ---------------------------
spēkā __fastcall TForm1: StopButtonClick (TObject * Sender)
(
ja (FRecording)
(
WaveRecordEnd (DDI, lpWaveHdr);
FRecording = false;
)
ja (FPlaying)
(
WavePlayEnd (hwo, lpWaveHdr);
FPlaying = false;
Shape2-> Brush-> Color = clBlack;
StopButton-> Enabled = false;
)
)
//------------------------------------------------ ---------------------------
spēkā __fastcall TForm1: MMWimData (TMessage & Ziņu)
(
Caption = "Parakstīta ierakstu";
ja (FRecording) WaveRecordEnd (DDI, lpWaveHdr);
WaveRecordClose (DDI);
ja (WavePlayOpen (& hwo, rokturis, 2, 44100, 16))
(
ShowMessage ("Noklikšķiniet uz Labi, lai sāktu atskaņošanu! Ja jūs redzēt šo"
"Ziņojumu, pirms jūs noklikšķinājāt apstādināšanas pogu, tad"
"Bufera beidzās (pieaugums ulSize ).");
ja (WavePlayBegin (hwo, lpWaveHdr))
(
FPlaying = true;
Caption = "Spēlējot ...";
Shape1-> Brush-> Color = clBlack;
Shape2-> Brush-> Color = clGreen;
)
)
)
//------------------------------------------------ ---------------------------
spēkā __fastcall TForm1: MMWomDone (TMessage & Ziņu)
(
Caption = "Parakstīta spēlē";
WavePlayClose (hwo);
RecordButton-> Enabled = true;
StopButton-> Enabled = false;
Shape2-> Brush-> Color = clBlack;
)
//------------------------------------------------ ---------------------------
spēkā __fastcall TForm1: TrackBar1Change (TObject * Sender)
(
DWORD new_volume =
(DWORD) MAKEWPARAM (TrackBar1-> Max - TrackBar1-> nostāja,
TrackBar1-> Max - TrackBar1-> nostāja);
waveOutSetVolume ((HWAVEOUT) WAVE_MAPPER, new_volume);
)
//------------------------------------------------ ---------------------------Vai kāds zina, kā pielāgot šajā avota kodu uz manu projektu, vai varat parādīt man citu audio steraming projekta pirmkoda caur usb?
thx ...