USB аудіо потоків

R

r2d2droids

Guest
привіт всім,
я відправити аналогового аудіо сигналів за допомогою рис (A / D модуль) за допомогою науково FT232 в чіпі.Після цього я хочу написати ці цифрові сигнали з буфера і після буфер наповнюється, посилає сигнали на пристрій для відтворення.
я знайшов вихідний код, який може записувати і відтворювати хвилі, використовуючи мікрофон.але я не міг змінити це код мого проекту.
Код показаний нижче:

//------------------------------------------------ ---------------------------
# Включити <vcl\vcl.h>
# Ргадта ргадта

# Включити "WaveformAPI.h"
//------------------------------------------------ ---------------------------
# Ргадта ресурсів "*. DFM"
TForm1 * Form1;
//------------------------------------------------ ---------------------------

/************************************************* ******************** \
* WaveHeader (WAVEHDR) оболонка функцій
\ ************************************************* ********************/

Ьоо WaveMakeHeader (непідписані довгий ulSize, HGLOBAL і HData, HGLOBAL і HWaveHdr,
LPSTR і lpData, LPWAVEHDR і lpWaveHdr)
(
HData = GlobalAlloc (GMEM_MOVEABLE | GMEM_SHARE, ulSize);
якщо (! HData) повернутися помилковим;

lpData = (LPSTR) GlobalLock (HData);
якщо (! lpData)
(
GlobalFree (HData);
повернутися помилковим;
)

HWaveHdr = GlobalAlloc (GMEM_MOVEABLE | GMEM_SHARE, sizeof (WAVEHDR));
якщо (! HWaveHdr)
(
GlobalUnlock (HData);
GlobalFree (HData);
повернутися помилковим;
)

lpWaveHdr = (LPWAVEHDR) GlobalLock (HWaveHdr);
якщо (! lpWaveHdr)
(
GlobalUnlock (HWaveHdr);
GlobalFree (HWaveHdr);
GlobalUnlock (HData);
GlobalFree (HData);
повернутися помилковим;
)

ZeroMemory (lpWaveHdr, sizeof (WAVEHDR));
lpWaveHdr-> lpData = lpData;
lpWaveHdr-> dwBufferLength = ulSize;

Повертає TRUE;
)
//------------------------------------------------ ---------------------------

недійсним WaveFreeHeader (HGLOBAL і HData, HGLOBAL і HWaveHdr)
(
GlobalUnlock (HWaveHdr);
GlobalFree (HWaveHdr);
GlobalUnlock (HData);
GlobalFree (HData);
)
//------------------------------------------------ ---------------------------

/************************************************* ******************** \
* WaveIn (запис) оболонка функцій
\ ************************************************* ********************/

Ьоо WaveRecordOpen (LPHWAVEIN lphwi, HWND HWND, Int nChannels,
довгий 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="Прохолодно" border="0" />

;
wfx.nAvgBytesPerSec = (wfx.nSamplesPerSec wfx.nBlockAlign *);
wfx.cbSize = 0;

MMRESULT результат = waveInOpen (lphwi, WAVE_MAPPER, і WFX, (LONG) HWND, NULL,
CALLBACK_WINDOW);

якщо (== результаті MMSYSERR_NOERROR) повернутися вірно;
повернутися помилковим;
)
//------------------------------------------------ ---------------------------

Ьоо WaveRecordBegin (HWAVEIN ВЗГ, LPWAVEHDR і lpWaveHdr)
(
MMRESULT результат = waveInPrepareHeader (ОСО, lpWaveHdr, sizeof (WAVEHDR));
якщо (== результаті MMSYSERR_NOERROR)
(
MMRESULT результат = waveInAddBuffer (ОСО, lpWaveHdr, sizeof (WAVEHDR));
якщо (== результаті MMSYSERR_NOERROR)
(
MMRESULT результат = waveInStart (ТСО);
якщо (== результаті MMSYSERR_NOERROR) повернутися вірно;
)
)
повернутися помилковим;
)
//------------------------------------------------ ---------------------------

недійсним WaveRecordEnd (HWAVEIN ВЗГ, LPWAVEHDR і lpWaveHdr)
(
waveInStop (ТСО);
waveInReset (ТСО);
waveInUnprepareHeader (ОСО, lpWaveHdr, sizeof (WAVEHDR));
)
//------------------------------------------------ ---------------------------

недійсним WaveRecordClose (HWAVEIN ВЗГ)
(
waveInReset (ТСО);
waveInClose (ТСО);
)
//------------------------------------------------ ---------------------------

/************************************************* ******************** \
* WaveOut (відтворення) функцій-оболонок
\ ************************************************* ********************/

Ьоо WavePlayOpen (LPHWAVEOUT lphwo, HWND HWND, Int nChannels,
довгий 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="Прохолодно" border="0" />

;
wfx.nAvgBytesPerSec = (wfx.nSamplesPerSec wfx.nBlockAlign *);
wfx.cbSize = 0;

MMRESULT результат = waveOutOpen (lphwo, WAVE_MAPPER, і WFX, (LONG) HWND, NULL,
CALLBACK_WINDOW);

якщо (== результаті MMSYSERR_NOERROR) повернутися вірно;
повернутися помилковим;
)
//------------------------------------------------ ---------------------------

Ьоо WavePlayBegin (HWAVEOUT hwo, LPWAVEHDR і lpWaveHdr)
(
MMRESULT результат = waveOutPrepareHeader (hwo, lpWaveHdr, sizeof (WAVEHDR));
якщо (== результаті MMSYSERR_NOERROR)
(
MMRESULT результат = waveOutWrite (hwo, lpWaveHdr, sizeof (WAVEHDR));
якщо (== результаті MMSYSERR_NOERROR) повернутися вірно;
)
повернутися помилковим;
)
//------------------------------------------------ ---------------------------

недійсним WavePlayEnd (HWAVEOUT hwo, LPWAVEHDR і lpWaveHdr)
(
waveOutReset (hwo);
waveOutUnprepareHeader (hwo, lpWaveHdr, sizeof (WAVEHDR));
)
//------------------------------------------------ ---------------------------

недійсним WavePlayClose (HWAVEOUT hwo)
(
waveOutReset (hwo);
waveOutClose (hwo);
)
//------------------------------------------------ ---------------------------/************************************************* ******************** \
* Приклад використання ...
\ ************************************************* ********************/

__fastcall TForm1:: TForm1 (ТСотропепЬ * Власник)
ТГогт (Власник)
(
ulSize = 1000000;
FAllocated = брехня;
FRecording = брехня;
FPlaying = брехня;

TrackBar1-> Max = 0xFFFF;
TrackBar1-> Частота = 1000;

DWORD current_volume;
waveOutGetVolume (0, і current_volume);
TrackBar1-> Позиція = TrackBar1-> Max - LOWORD (current_volume);
)
//------------------------------------------------ ---------------------------

__fastcall TForm1:: ~ TForm1 ()
(
якщо (FAllocated) WaveFreeHeader (HData, HWaveHdr);
якщо (FRecording) WaveRecordClose (ТСО);
якщо (FPlaying) WavePlayClose (hwo);

)
//------------------------------------------------ ---------------------------

недійсним __fastcall TForm1:: RecordButtonClick (TObject * Sender)
(
якщо (WaveRecordOpen (та ОСО, ручка, 2, 44100, 16))
(
якщо (WaveMakeHeader (ulSize, HData, HWaveHdr, lpData, lpWaveHdr))
(
FAllocated = True;
якщо (WaveRecordBegin (ОСО, lpWaveHdr))
(
FRecording = True;
Caption = "Запис ...";
Shape1-> Brush-> Color = clRed;
StopButton-> Enabled = правда;
RecordButton-> Enabled = брехня;
)
)
)
)
//------------------------------------------------ ---------------------------

недійсним __fastcall TForm1:: StopButtonClick (TObject * Sender)
(
якщо (FRecording)
(
WaveRecordEnd (ОСО, lpWaveHdr);
FRecording = брехня;
)
якщо (FPlaying)
(
WavePlayEnd (hwo, lpWaveHdr);
FPlaying = брехня;
Shape2-> Brush-> Color = clBlack;
StopButton-> Enabled = брехня;
)
)
//------------------------------------------------ ---------------------------

недійсним __fastcall TForm1:: MMWimData (TMessage і Msg)
(
Caption = "записали";
якщо (FRecording) WaveRecordEnd (ОСО, lpWaveHdr);
WaveRecordClose (ТСО);

якщо (WavePlayOpen (і hwo, ручка, 2, 44100, 16))
(
ShowMessage ("Натисніть кнопку ОК, щоб почати відтворення! Якщо ви бачите це"
"Повідомлення перед натиснув кнопку" стоп ", потім"
"Буфера вибіг (збільшення ulSize ).");
якщо (WavePlayBegin (hwo, lpWaveHdr))
(
FPlaying = True;
Caption = "Гра ...";
Shape1-> Brush-> Color = clBlack;
Shape2-> Brush-> Color = clGreen;
)
)
)
//------------------------------------------------ ---------------------------

недійсним __fastcall TForm1:: MMWomDone (TMessage і Msg)
(
Caption = "DONE ГРА";
WavePlayClose (hwo);
RecordButton-> Enabled = правда;
StopButton-> Enabled = брехня;
Shape2-> Brush-> Color = clBlack;
)
//------------------------------------------------ ---------------------------

недійсним __fastcall TForm1:: TrackBar1Change (TObject * Sender)
(
DWORD = new_volume
(DWORD) MAKEWPARAM (TrackBar1-> Max - TrackBar1-> Посада,
TrackBar1-> Max - TrackBar1-> Позиція);
waveOutSetVolume ((HWAVEOUT) WAVE_MAPPER, new_volume);
)
//------------------------------------------------ ---------------------------Хто-небудь знає, як адаптувати цей вихідний код свого проекту або може показати мені ще одне джерело звуку код проекту steraming через USB?

THX ...

 
Я використав для виявлення WaveLib DTMF тонів вступу в лінійний аудіовхід і відправляючи мовлення з аудіо порту динамік.Я використав C # /. NET, але я досить впевнений, що є C версії.

У чому полягає проблема з кодом, ви використовуєте?
Ви повинні бути дуже уважними у створенні звуковий мікшер та його контролю або ви не почуєте нічого.

 
У цьому прикладі, аудіо вхід з звукової карти через мікрофон і виділеної пам'яті заповнюється Датас прийняті мікрофона і звукової карти грає його, як хвиля файл і т.д.
але я хочу, щоб вибрати вхідний хвилі, як USB-пристрої.і дані можуть бути взяті з "FT_Read (ftHandle, RxBuffer, 1, і BytesReceived)" структури.також включає письмовий RxBuffer дані.бу, як додати цю структуру в цей код?

 

Welcome to EDABoard.com

Sponsor

Back
Top