usb audio straumēšana

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 ...

 
Esmu izmantojis WaveLib lai atklātu DTMF toņu stāšanās audio līniju un pēc tam nosūtot runu no audio skaļruņu ostā.Es lieto C # /. NET, bet es esmu diezgan pārliecināts, ka tur ir C versija.

Kāda ir problēma ar kodu jūs izmantojat?
Jums ir jābūt ļoti rūpīgam par izveidošanu audio mikseri un tās kontroli vai jums nav dzirdēt neko.

 
šajā paraugā, audio ieeja ir no skaņas kartes caur mic, un piešķirtā atmiņa ir pilna datas ņem mikrofonu un skaņas karte spēlē to kā vilnis failu, uc
bet es gribu, lai izvēlētos viļņu ievades kā usb ierīci.un datus var lietot kopā ar "FT_Read (ftHandle, RxBuffer, 1, un BytesReceived)" struktūra.arī RxBuffer ietver rakstveida datas.bu, kā pievienot šo struktūru šo kodu?

 

Welcome to EDABoard.com

Sponsor

Back
Top